自動布防/撤防、運動檢測、帶圖片的移動通知
項目所用物品
硬件組件
- Raspberry Pi1 Model A+ 一個:任何支持攝像頭模塊的Raspberry Pi均可
- Raspberry Pi 攝像頭模塊一個
- USB WLAN/WiFi適配器一個:必須支持監控模式,推薦使用RT5370
- Makerbeam(可選)一個:用于制作外殼
軟件應用和在線服務
項目簡介
Raspberry Pi安防系統是一個簡單的基于Raspberry Pi 的安防系統,具有以下功能:
- 使用攝像頭進行運動檢測和拍照
- 發送帶照片的移動通知
- 自動檢測是否有人在家并自動布防或撤防
- 可通過Telegram遠程禁用或查詢

所需條件
硬件需求
- 帶有攝像頭接口的Raspberry Pi(我使用的是Model A+)
- Raspberry Pi攝像頭模塊
- 支持監控模式的USB Wi-Fi適配器(我使用的是基于RT5370的適配器,價格約為6歐元,易于購買)
- 某種形式的外殼(我制作的硬件詳情在此)
其他需求
自動化檢測
我的主要目標之一是使系統完全自動化,無需在離家或回家時手動布防或撤防。我認為實現這一目標的最簡單方法是嘗試檢測家中居住者的手機。從概念上講,這很簡單,但在實踐中最具挑戰性,因為:
- 在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 updatesudo apt-get install -y tcpdump iw python3-dev python3-pip libjpeg8-dev zlib1g-dev libffi-dev python3-numpysudo pip3 install --upgrade pip
安裝rpi-security服務,重新加載systemd配置并啟用服務:
sudo pip3 install https://github.com/FutureSharks/rpi-security/archive/master.zipsudo systemctl daemon-reloadsudo 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 monitorroot@raspberrypi:~# ifconfig mon0 uproot@raspberrypi:~# rpi-security.py -d2016-05-28 14:43:30 DEBUG rpi-security.py:73 MainThread State file read: /var/lib/rpi-security/state.yaml2016-05-28 14:43:30 DEBUG rpi-security.py:44 MainThread Calculated network: 192.168.178.0/242016-05-28 14:43:41 INFO rpi-security.py:214 monitor_alarm_state thread running2016-05-28 14:43:41 INFO rpi-security.py:196 capture_packets thread running2016-05-28 14:43:41 INFO rpi-security.py:259 telegram_bot thread running2016-05-28 14:43:41 INFO rpi-security.py:154 process_photos thread running2016-05-28 14:43:43 INFO rpi-security.py:392 MainThread rpi-security running2016-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:bb2016-05-28 14:44:29 DEBUG rpi-security.py:191 capture_packets Packet detected from aa:aa:aa:bb:bb:bb2016-05-28 14:44:48 DEBUG rpi-security.py:280 Dummy-1 Motion detected but current_state is: disarmed
這就是Raspberry PiA+模型所需要的全部內容。這顯示了我的無線局域網網絡設備布局:
root@raspberrypi:~# iw devphy#0 Interface mon0 ifindex 4 wdev 0x3 addr 00609c:01 type monitor Interface wlan0 ifindex 2 wdev 0x1 addr 00609c:01 type managed channel 1 (2412 MHz), width: 40 MHz, center1: 2422 MHz
你可能會遇到具有不同名稱的接口,只需在/etc/rpi-security.conf 文件中更改 network_interface 參數,并同時更改 rpi-security.service 中對 mon0的引用即可。帶有PIR傳感器運動檢測的舊版本
目前,該攝像頭用于運動檢測。
連接丟失時重啟
大約每個月或兩個月,我的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上運行,具有運動檢測和移動通知功能
-
攝像頭
+關注
關注
60文章
4897瀏覽量
96991 -
安防系統
+關注
關注
2文章
252瀏覽量
33548 -
運動檢測
+關注
關注
0文章
37瀏覽量
12673 -
樹莓派
+關注
關注
118文章
1881瀏覽量
106243
發布評論請先 登錄
相關推薦
樹莓派攝像頭問題
樹莓派攝像頭
如何用樹莓派來連接攝像頭
基于樹莓派的實時直播攝像頭
使用Raspberry Pi的Motioneyeos網絡攝像頭運動檢測

評論