切换语言
EN CN
树莓派开发者 / 产品应用 / 树莓派制成的 — 带运动检测和摄像头的安防系统

树莓派制成的 — 带运动检测和摄像头的安防系统

上海晶珩发布于 2024-08-22
5806 浏览

自动布防/撤防、运动检测、带图片的移动通知

项目所用物品

硬件组件

· Raspberry Pi  1 Model A+:任何支持摄像头模块的Raspberry Pi 均可             X1

· Raspberry Pi  摄像头模块                                                    X1

· USB WLAN/WiFi适配器:必须支持监控模式,推荐使用RT5370                   X1

· Makerbeam(可选):用于制作外壳                                          X1

软件应用和在线服务

· Raspberry Pi  Raspbian

· Telegram Bot

项目简介

Raspberry Pi 安防系统是一个简单的基于Raspberry Pi 的安防系统,具有以下功能:

· 使用摄像头进行运动检测和拍照

· 发送带照片的移动通知

· 自动检测是否有人在家并自动布防或撤防

· 可通过Telegram远程禁用或查询

类似产品:

· https://www.kickstarter.com/projects/vivienmuller/ulo/

· http://canary.is/

所需条件

硬件需求

· 带有摄像头接口的Raspberry Pi (我使用的是Model A+)

· Raspberry Pi 摄像头模块

· 支持监控模式的USB Wi-Fi适配器(我使用的是基于RT5370的适配器,价格约为6欧元,易于购买)

· 某种形式的外壳(我制作的硬件详情在此)

其他需求

· Telegram机器人:免费且易于设置

· 已安装Raspbian发行版(我使用的是Jessie lite,也可以使用其他操作系统,但未经测试)

· Python 3

工作原理

自动人员检测我的主要目标之一是使系统完全自动化,无需在离家或回家时手动布防或撤防。我认为实现这一目标的最简单方法是尝试检测家中居住者的手机。从概念上讲,这很简单,但在实践中最具挑战性,因为:

· 在Wi-Fi接口上捕获所有数据包非常耗费资源

· 目前没有好的支持监控模式的5Ghz USB Wi-Fi适配器,这意味着数据包监控仅限于2.4Ghz,而大多数现代手机现在使用5Ghz

· 手机并非始终在线并通过Wi-Fi发送数据包,有时它们会保持未连接状态长达15分钟或更长时间

· 即使准确率达到99%,误报也会令人烦恼

经过大量测试,我采用了一种结合主动(ARP扫描)和被动(数据包捕获)检测的方法,通过Wi-Fi适配器实现,并基于已知的手机MAC地址。手机MAC地址在配置中设置,rpi-security应用程序在监控模式接口上捕获具有以下过滤条件的数据包:

· 来自任何已配置MAC的Wi-Fi探测请求

· 从已配置MAC发送到运行rpi-security的主机的任何数据包

当检测到数据包时,应用程序会重置计数器,如果计数器超过约10分钟,则系统布防。为了消除许多误报,在从布防到撤防状态或反之的转换过程中,应用程序会对每个已配置的MAC地址执行ARP扫描,以确保它们确实在线或离线。iOS和Android在99%的情况下都会响应此ARP扫描,而ICMP ping则相当不可靠。通过结合捕获Wi-Fi探测请求和使用ARP扫描,Wi-Fi频率无关紧要,因为手机在两个频率上都发送探测请求,ARP扫描也适用于两个频率。

通知使用Telegram机器人发送带捕获图片的通知。他们有良好的移动应用程序和友好的API。您还可以在浏览器中查看消息,并且消息会在设备之间同步。

如果系统处于布防状态并检测到运动,则会从Telegram机器人向您发送带有捕获图片的消息。

在任何警报状态更改时也会发送通知。

远程控制您可以向Telegram机器人发送命令以触发某些操作:

· /disable:禁用服务,直到重新启用

· /enable:在禁用后启用服务

· /status:发送状态报告

· /photo:捕获并发送照片

· /gif:捕获并发送gif

Python该应用程序是用Python 3编写的。大部分功能由以下pip模块提供:

· picamera

· Scapy

· python-telegram-bot

应用程序使用多线程以异步方式处理事件。有四个线程:

· telegram_bot:响应命令

· monitor_alarm_state:布防和撤防系统

· capture_packets:捕获来自移动设备的数据包

· process_photos:通过Telegram消息发送捕获的图片

安装、配置和运行

连接到您的WiFi网络的接口必须是支持监控模式的接口,并且这必须是手机连接的同一个WiFi网络。

首先安装必要的软件包:

sudo apt-get update
sudo apt-get install -y tcpdump iw python3-dev python3-pip libjpeg8-dev zlib1g-dev libffi-dev python3-numpy
sudo pip3 install --upgrade pip

安装rpi-security服务,重新加载systemd配置并启用服务:

sudo pip3 install https://github.com/FutureSharks/rpi-security/archive/master.zip
sudo systemctl daemon-reload
sudo systemctl enable rpi-security.service

在/etc/rpi-security.conf文件中添加你的MAC地址、Telegram机器人API密钥以及任何其他需要更改的配置。

确保你已经使用raspi-config启用了相机模块。

启动rpi-security服务:

sudo systemctl start rpi-security.service

你需要至少向Telegram机器人发送一条消息,以便服务能够保存你的Telegram chat_id。发送/status命令即可。

rpi-security作为服务运行,并将日志记录到syslog中。要查看日志,请检查/var/log/syslog。

还有一个调试选项,它将日志输出到stdout:

root@raspberrypi:~# iw phy phy0 interface add mon0 type monitor
root@raspberrypi:~# ifconfig mon0 up
root@raspberrypi:~# rpi-security.py -d
2016-05-28 14:43:30 DEBUG   rpi-security.py:73  MainThread          State file read: /var/lib/rpi-security/state.yaml
2016-05-28 14:43:30 DEBUG   rpi-security.py:44  MainThread          Calculated network: 192.168.178.0/24
2016-05-28 14:43:41 INFO    rpi-security.py:214 monitor_alarm_state thread running
2016-05-28 14:43:41 INFO    rpi-security.py:196 capture_packets     thread running
2016-05-28 14:43:41 INFO    rpi-security.py:259 telegram_bot        thread running
2016-05-28 14:43:41 INFO    rpi-security.py:154 process_photos      thread running
2016-05-28 14:43:43 INFO    rpi-security.py:392 MainThread          rpi-security running
2016-05-28 14:43:43 INFO    rpi-security.py:112 MainThread          Telegram message Sent: "rpi-security running"
2016-05-28 14:44:29 DEBUG   rpi-security.py:191 capture_packets     Packet detected from aa:aa:aa:bb:bb:bb
2016-05-28 14:44:29 DEBUG   rpi-security.py:191 capture_packets     Packet detected from aa:aa:aa:bb:bb:bb
2016-05-28 14:44:48 DEBUG   rpi-security.py:280 Dummy-1             Motion detected but current_state is: disarmed

这就是Raspberry Pi A+模型所需要的全部内容。这显示了我的无线局域网网络设备布局:

root@raspberrypi:~# iw dev
phy#0
        Interface mon0
        ifindex 4
        wdev 0x3
        addr 00:0f:60:08:9c:01
        type monitor
        Interface wlan0
        ifindex 2
        wdev 0x1
        addr 00:0f:60:08:9c:01
        type managed
        channel 1 (2412 MHz), width: 40 MHz, center1: 2422 MHz

你可能会遇到具有不同名称的接口,只需在 /etc/rpi-security.conf 文件中更改 network_interface 参数,并同时更改 rpi-security.service 中对 mon0 的引用即可。

带有PIR传感器运动检测的旧版本

目前,该摄像头用于运动检测。如果您想使用支持PIR传感器的旧版本,请查看0.7版本:

https://github.com/FutureSharks/rpi-security/releases/tag/0.7

连接丢失时重启

大约每个月或两个月,我的Raspberry Pi 会丢失WLAN连接。我创建了一个cron作业来检查连接,并在检查失败时重启。

echo '*/20 * * * * root /usr/bin/host api.telegram.org > /dev/null 2>1 || (/usr/bin/logger "Rebooting due to connectivity issue"; /sbin/shutdown -r now)' > /etc/cron.d/reboot-on-connection-failure

自定义部件和外壳

硬件详情

摄像头和PIR传感器Makerbeam支架的CAD文件:https://github.com/FutureSharks/rpi-security/tree/master/hardware

代码

Github链接

安装、配置等

https://github.com/FutureSharks/rpi-security

一个用Python编写的安全系统,用于在Raspberry Pi 上运行,具有运动检测和移动通知功能

产品应用 树莓派 运动检测 摄像头 安防系统

上海晶珩

上海晶珩是树莓派官方设计合作伙伴和官方代理商,专注于推广树莓派技术在多个行业中的应用,并提供专业技术服务,以加速客户产品研发进程。上海晶珩为物联网(IoT)、工业自动化、人工智能(AI)、工业控制等领域提供全面的工业树莓派解决方案和可靠的工业计算机产品。

  • 上海市嘉罗公路1661号盛创企业家园29号楼
  • +86-159 2148 3028
  • sales@edatec.cn
提交您的留言

提示

提交即表示您同意 EDATEC 的隐私政策

请输入验证码

captcha