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

所需條件
硬件需求
- 帶有攝像頭接口的Raspberry Pi(我使用的是Model A+)
- Raspberry Pi攝像頭模塊
- 支持監(jiān)控模式的USB Wi-Fi適配器(我使用的是基于RT5370的適配器,價格約為6歐元,易于購買)
- 某種形式的外殼(我制作的硬件詳情在此)
其他需求
- Telegram機(jī)器人:免費(fèi)且易于設(shè)置
- 已安裝Raspbian發(fā)行版(我使用的是Jessie lite,也可以使用其他操作系統(tǒng),但未經(jīng)測試)
- Python 3
自動化檢測
我的主要目標(biāo)之一是使系統(tǒng)完全自動化,無需在離家或回家時手動布防或撤防。我認(rèn)為實(shí)現(xiàn)這一目標(biāo)的最簡單方法是嘗試檢測家中居住者的手機(jī)。從概念上講,這很簡單,但在實(shí)踐中最具挑戰(zhàn)性,因?yàn)椋?/span>
- 在Wi-Fi接口上捕獲所有數(shù)據(jù)包非常耗費(fèi)資源
- 目前沒有好的支持監(jiān)控模式的5Ghz USB Wi-Fi適配器,這意味著數(shù)據(jù)包監(jiān)控僅限于2.4Ghz,而大多數(shù)現(xiàn)代手機(jī)現(xiàn)在使用5Ghz
- 手機(jī)并非始終在線并通過Wi-Fi發(fā)送數(shù)據(jù)包,有時它們會保持未連接狀態(tài)長達(dá)15分鐘或更長時間
- 即使準(zhǔn)確率達(dá)到99%,誤報也會令人煩惱
經(jīng)過大量測試,我采用了一種結(jié)合主動(ARP掃描)和被動(數(shù)據(jù)包捕獲)檢測的方法,通過Wi-Fi適配器實(shí)現(xiàn),并基于已知的手機(jī)MAC地址。手機(jī)MAC地址在配置中設(shè)置,rpi-security應(yīng)用程序在監(jiān)控模式接口上捕獲具有以下過濾條件的數(shù)據(jù)包:
- 來自任何已配置MAC的Wi-Fi探測請求
- 從已配置MAC發(fā)送到運(yùn)行rpi-security的主機(jī)的任何數(shù)據(jù)包
當(dāng)檢測到數(shù)據(jù)包時,應(yīng)用程序會重置計(jì)數(shù)器,如果計(jì)數(shù)器超過約10分鐘,則系統(tǒng)布防。為了消除許多誤報,在從布防到撤防狀態(tài)或反之的轉(zhuǎn)換過程中,應(yīng)用程序會對每個已配置的MAC地址執(zhí)行ARP掃描,以確保它們確實(shí)在線或離線。iOS和Android在99%的情況下都會響應(yīng)此ARP掃描,而ICMP ping則相當(dāng)不可靠。通過結(jié)合捕獲Wi-Fi探測請求和使用ARP掃描,Wi-Fi頻率無關(guān)緊要,因?yàn)槭謾C(jī)在兩個頻率上都發(fā)送探測請求,ARP掃描也適用于兩個頻率。
通知
使用Telegram機(jī)器人發(fā)送帶捕獲圖片的通知。他們有良好的移動應(yīng)用程序和友好的API。您還可以在瀏覽器中查看消息,并且消息會在設(shè)備之間同步。
如果系統(tǒng)處于布防狀態(tài)并檢測到運(yùn)動,則會從Telegram機(jī)器人向您發(fā)送帶有捕獲圖片的消息。
在任何警報狀態(tài)更改時也會發(fā)送通知。
遠(yuǎn)程控制
您可以向Telegram機(jī)器人發(fā)送命令以觸發(fā)某些操作:
- /disable:禁用服務(wù),直到重新啟用
- /enable:在禁用后啟用服務(wù)
- /status:發(fā)送狀態(tài)報告
- /photo:捕獲并發(fā)送照片
- /gif:捕獲并發(fā)送gif

Python
該應(yīng)用程序是用Python 3編寫的。大部分功能由以下pip模塊提供:
- picamera
- Scapy
- python-telegram-bot
應(yīng)用程序使用多線程以異步方式處理事件。有四個線程:
- telegram_bot:響應(yīng)命令
- monitor_alarm_state:布防和撤防系統(tǒng)
- capture_packets:捕獲來自移動設(shè)備的數(shù)據(jù)包
- process_photos:通過Telegram消息發(fā)送捕獲的圖片
安裝、配置和運(yùn)行
連接到您的WiFi網(wǎng)絡(luò)的接口必須是支持監(jiān)控模式的接口,并且這必須是手機(jī)連接的同一個WiFi網(wǎng)絡(luò)。
首先安裝必要的軟件包:
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服務(wù),重新加載systemd配置并啟用服務(wù):
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機(jī)器人API密鑰以及任何其他需要更改的配置。
確保你已經(jīng)使用raspi-config啟用了相機(jī)模塊。
啟動rpi-security服務(wù):
sudo systemctl start rpi-security.service
你需要至少向Telegram機(jī)器人發(fā)送一條消息,以便服務(wù)能夠保存你的Telegram chat_id。發(fā)送/status命令即可。
rpi-security作為服務(wù)運(yùn)行,并將日志記錄到syslog中。要查看日志,請檢查 /var/log/syslog。
還有一個調(diào)試選項(xiàng),它將日志輸出到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+模型所需要的全部內(nèi)容。這顯示了我的無線局域網(wǎng)網(wǎng)絡(luò)設(shè)備布局:
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 參數(shù),并同時更改 rpi-security.service 中對 mon0的引用即可。帶有PIR傳感器運(yùn)動檢測的舊版本
目前,該攝像頭用于運(yùn)動檢測。
連接丟失時重啟
大約每個月或兩個月,我的Raspberry Pi會丟失WLAN連接。我創(chuàng)建了一個cron作業(yè)來檢查連接,并在檢查失敗時重啟。
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編寫的安全系統(tǒng),用于在Raspberry Pi上運(yùn)行,具有運(yùn)動檢測和移動通知功能
-
攝像頭
+關(guān)注
關(guān)注
61文章
4972瀏覽量
98228 -
安防系統(tǒng)
+關(guān)注
關(guān)注
2文章
254瀏覽量
33813 -
運(yùn)動檢測
+關(guān)注
關(guān)注
0文章
39瀏覽量
12739 -
樹莓派
+關(guān)注
關(guān)注
121文章
1995瀏覽量
107366
發(fā)布評論請先 登錄
樹莓派攝像頭問題
安防攝像頭的過流保護(hù)
安防攝像頭の過載保護(hù)應(yīng)用
樹莓派攝像頭
如何用樹莓派來連接攝像頭
樹莓派的攝像頭應(yīng)該如何啟動詳細(xì)教程免費(fèi)下載
基于樹莓派的實(shí)時直播攝像頭
使用Raspberry Pi的Motioneyeos網(wǎng)絡(luò)攝像頭運(yùn)動檢測

用 樹莓派 打造安全+可定制的安防攝像頭 — 完整指南!

評論