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