這個(gè)項(xiàng)目是一個(gè)DIY觸摸屏面板,用于布防/解除HomeAssistant的報(bào)警系統(tǒng)。它由RaspberryPi、3.5英寸觸摸屏顯示器、基于Python的自定義應(yīng)用程序和MQTT提供支持。
本文將引導(dǎo)您完成項(xiàng)目的創(chuàng)建,并提供創(chuàng)建您自己的項(xiàng)目所需的一切!
家庭助理
HomeAssistant是一個(gè)了不起的開源家庭自動(dòng)化平臺(tái)。它的眾多功能之一是能夠?qū)崿F(xiàn)您自己的家庭安全警報(bào)系統(tǒng)。然后,您可以使用各種傳感器來確定是否/何時(shí)觸發(fā)警報(bào)。
就我而言,我的所有外門上都有幾個(gè)Z-Wave門傳感器。如果在警報(bào)激活時(shí)任何門打開,我會(huì)在手機(jī)和電腦上收到即時(shí)推送通知。最終,我將把它擴(kuò)展到包括運(yùn)動(dòng)傳感器和警報(bào)器。
雖然這工作正常,但布防/撤防設(shè)備的唯一方法是通過Web界面。不幸的是,手動(dòng)警報(bào)沒有一個(gè)API接口,我們可以使用它來發(fā)送布防/撤防命令,同時(shí)還可以從HA接收即時(shí)狀態(tài)更改。
因此,我創(chuàng)建了新的手動(dòng)MQTT警報(bào)組件,其功能與手動(dòng)警報(bào)相同,但也允許通過MQTT進(jìn)行雙向通信!有了這個(gè)組件,我們可以使用我們可以想象的任何網(wǎng)絡(luò)連接平臺(tái)輕松構(gòu)建自己的遠(yuǎn)程鍵盤。就我而言,我選擇使用帶有觸摸屏的RaspberryPi構(gòu)建解決方案。
至少,您需要以下組件:
Adafruit的PiTFTPlus480x3203.5“TFT+觸摸屏顯示器
微型SD卡
*我在這個(gè)項(xiàng)目中使用了PiZeroW,但是任何帶有wifi的Pi都應(yīng)該可以工作(即使是使用USBwifi適配器的)。
可選:該軟件還支持可選的屏幕保護(hù)模式,在這種模式下,屏幕會(huì)在很長(zhǎng)一段時(shí)間后黑屏。通過添加PIR運(yùn)動(dòng)傳感器,我們可以讓屏幕保持關(guān)閉,直到有人接近鍵盤,從而延長(zhǎng)顯示器的使用壽命。只需將PIR傳感器連接到顯示器底部的額外引腳-請(qǐng)參閱本頁下方的運(yùn)動(dòng)傳感器部分。
準(zhǔn)備HomeAssistant和MQTT
HomeAssistantv0.50添加了我們需要使用的新alarm.manual_mqtt組件。這依賴于MQTT平臺(tái)的啟動(dòng)和運(yùn)行,因此請(qǐng)確保首先執(zhí)行此操作。
要將警報(bào)添加到HomeAssistant,只需將其放入您的文件中:configuration.yml
可以在文檔頁面上找到完整的配置選項(xiàng)列表。alarm.manual_mqtt
準(zhǔn)備樹莓派
PiTFT顯示器需要特殊的內(nèi)核驅(qū)動(dòng)程序、配置和校準(zhǔn)。Adafruit確實(shí)提供了一個(gè)很好的指南和預(yù)烘焙的操作系統(tǒng)映像,其中包括這些;但是,這個(gè)舊圖像無法在PiZeroW上正常工作(wifi完全壞了)。
就我而言,我最終安裝了最新版本的RaspbianJessieLite并按照這些說明使顯示器正常工作。
注意:此項(xiàng)目不需要X桌面環(huán)境,因?yàn)檐浖苯永L制到屏幕的幀緩沖區(qū)。如果您按照上一個(gè)鏈接中的說明進(jìn)行操作,只需跳過任何引用X11的部分。
此時(shí),您的TFT上應(yīng)該會(huì)出現(xiàn)一個(gè)功能齊全的LinuxCLI!
要讓觸摸屏與pygame一起使用,請(qǐng)確保您使用的是SDL1.2。
現(xiàn)在我們可以在Pi上安裝報(bào)警面板軟件了!
軟件
要安裝它,請(qǐng)使用Git將存儲(chǔ)庫克隆到某個(gè)位置-我選擇了/srv:
您還需要通過將.env.dist示例文件復(fù)制到.env并編輯以下設(shè)置來配置面板:
PINS-您想使用的4位密碼的逗號(hào)分隔列表。
MQTT_HOST-MQTT服務(wù)器的IP或主機(jī)名
MQTT_USER-MQTT的用戶名
MQTT_PASS-MQTT對(duì)應(yīng)的密碼
您現(xiàn)在可以運(yùn)行該程序:
最后,如果您希望警報(bào)面板在啟動(dòng)時(shí)啟動(dòng),請(qǐng)將以下內(nèi)容添加到您的rc.local文件(exit0行上方):
可選運(yùn)動(dòng)傳感器/屏幕保護(hù)程序
為了最大限度地延長(zhǎng)顯示器的使用壽命,可以使用PIR運(yùn)動(dòng)傳感器在無人時(shí)自動(dòng)關(guān)閉顯示器。PiTFT顯示器在其底部方便地暴露了GPIO引腳,因此只需進(jìn)行以下連接:
直流至5v
GND到地
輸出到任何未使用的GPIO(例如引腳23)
確保將以下行添加到您的.env文件中,以便控制面板了解您的傳感器-將23替換為您選擇使用的任何GPIO引腳:
PIR_GPIO_PIN=23
(如果您的控制面板已經(jīng)在運(yùn)行,那么您需要在進(jìn)行此更改后重新啟動(dòng)它。)
用法
應(yīng)用程序啟動(dòng)后,顯示器應(yīng)自動(dòng)連接到MQTT。
每當(dāng)HomeAssistant中的鬧鐘狀態(tài)發(fā)生變化時(shí),它都會(huì)通過MQTT自動(dòng)將新狀態(tài)實(shí)時(shí)推送到顯示屏上。
要通過報(bào)警面板更改報(bào)警狀態(tài),您必須先按相應(yīng)的數(shù)字鍵輸入有效的PIN碼。如果您不小心按錯(cuò)了按鈕,只需點(diǎn)擊被屏蔽的輸入、#鍵或*鍵即可清除您的輸入。
輸入有效的PIN將解鎖按鈕以更改狀態(tài):
解除“武裝”
離開
按下其中任何一個(gè)都會(huì)通過MQTT向HomeAssistant發(fā)送命令以進(jìn)行相應(yīng)的更改。
底層-創(chuàng)建UI和應(yīng)用程序
設(shè)計(jì)UI相當(dāng)簡(jiǎn)單。使用Photoshop,我創(chuàng)建了一個(gè)新的480x320工作區(qū),并將其劃分為相等單位的網(wǎng)格,以確保按鈕的大小和對(duì)齊方式正確:
然后將每個(gè)按鈕及其不同狀態(tài)提取到PNG。
Python應(yīng)用程序使用我在PyGame之上創(chuàng)建的自定義UI庫。一切(除了狀態(tài)文本)都呈現(xiàn)為具有多種狀態(tài)的“按鈕”:
PIN輸入(1-9、*、0和#):
默認(rèn)
按下
操作按鈕(撤防、布防回家、布防離開):
默認(rèn)(禁用)
激活(警報(bào)系統(tǒng)的當(dāng)前狀態(tài))
可用(啟用-輸入正確的PIN后即可選擇)
甚至顯示當(dāng)前屏蔽PIN的框也被繪制為帶有狀態(tài)的“按鈕”:
默認(rèn)(沒有輸入)
輸入了1個(gè)號(hào)碼
輸入2個(gè)數(shù)字
輸入3個(gè)數(shù)字
輸入4個(gè)數(shù)字,PIN有效
輸入4個(gè)數(shù)字,PIN不正確
每個(gè)按鈕狀態(tài)都有自己的圖像-我們只需跟蹤當(dāng)前狀態(tài)并根據(jù)需要在圖像之間切換。
應(yīng)用程序本身運(yùn)行一個(gè)簡(jiǎn)單的事件循環(huán)——在每次迭代中,我們通過MQTT檢查屏幕觸摸或傳入狀態(tài)更改。UI狀態(tài)也會(huì)根據(jù)需要重新繪制。為了防止CPU以100%的速度運(yùn)行并產(chǎn)生過多的熱量,我們還睡眠了很短的一段時(shí)間。
一旦輸入正確的PIN,操作按鈕就會(huì)解鎖。當(dāng)按下未鎖定的操作按鈕時(shí),我們會(huì)立即通過MQTT向HomeAssistant發(fā)出命令,以相應(yīng)地更改警報(bào)狀態(tài)。
外殼
每個(gè)DIY項(xiàng)目都需要一個(gè)外殼,因此我嘗試設(shè)計(jì)一個(gè)定制的3D打印外殼來容納我的控制面板和PIR傳感器:
這不是最漂亮的情況,一些內(nèi)部測(cè)量不是100%完美的,還有一些小問題:
Pi的背面和外殼的背面之間有一個(gè)微小的間隙-理想情況下,我希望它們齊平。這是用熱膠固定的。
支柱可能更堅(jiān)固。
前面板的厚度略短于TFT顯示器,使其突出約1毫米。
沒有額外的通風(fēng)孔(雖然熱量還不是問題)。
設(shè)計(jì)非?;A(chǔ)(我不是設(shè)計(jì)師)。
由于這些原因,我將來可能會(huì)重新設(shè)計(jì)這個(gè)案例,但現(xiàn)在它已經(jīng)足夠滿足我的需要了:)
顯示器和PIR傳感器的測(cè)量結(jié)果非常完美,因此它們非常適合并緊貼在外殼的前部。安裝后,我使用了大量的熱膠將PCB固定在正面內(nèi)側(cè)。
對(duì)于后部,我只需將微型USB電纜穿過孔,將其插入Pi,然后將前后部件卡扣在一起。我之前添加的熱膠仍然是溫暖的,所以它有助于將前后部件粘合在一起。
然后我使用CommandLargePictureHangingStrips(帶有類似尼龍搭扣的材料)將它安裝在墻上。我本可以在外殼上打孔并使用螺絲,但我想要一些不那么永久的東西,以防我以后決定進(jìn)行改進(jìn)。
-
報(bào)警系統(tǒng)
+關(guān)注
關(guān)注
5文章
647瀏覽量
75186 -
面板
+關(guān)注
關(guān)注
13文章
1675瀏覽量
53836 -
樹莓派
+關(guān)注
關(guān)注
116文章
1706瀏覽量
105607
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論