1 前言
近些年來(lái),隨著科技的更新迭代,IoT行業(yè)迎來(lái)了一個(gè)快速膨脹發(fā)展的窗口期,我們隨之可見(jiàn)的是,越來(lái)越多的智能化產(chǎn)品進(jìn)入到了我們的日常生活中,包括發(fā)展比較早的智能家居類產(chǎn)品、智能家電類產(chǎn)品,還有近些年非?;馃岬闹悄艽┐黝惍a(chǎn)品,這些都得到了市場(chǎng)很好的反饋。
科技不僅能給人們帶來(lái)幸福感的提升,而且隨著智能設(shè)備越來(lái)越發(fā)達(dá),在某些特定的場(chǎng)景下,它往往還能救人于危難之時(shí)。
本文要講述的正是這樣一套智能的IoT系統(tǒng)在家庭環(huán)境下的部署應(yīng)用,它能夠幫助人們解決一些危險(xiǎn)難題。
2 項(xiàng)目簡(jiǎn)介
2.1 項(xiàng)目名稱
基于N32G457和RT-Thread全新打造的私有化定制家用式智能告警系統(tǒng)
2.2 設(shè)計(jì)思路
主體思路采用 N32G457 芯片作為終端側(cè)的主控MCU,搭載國(guó)產(chǎn)實(shí)時(shí)操作系統(tǒng) RT-Thread,外接 ESP8266 Wi-Fi 模塊,以及若干用于檢測(cè)的傳感器,比如煙霧傳感器、酒精傳感器、天然氣傳感器、空氣質(zhì)量傳感器等,將檢測(cè)的信息轉(zhuǎn)換成可能產(chǎn)生的告警數(shù)字信號(hào),通過(guò)板載告警指示燈和告警警報(bào)器本地輸出告警信息,同時(shí)通過(guò)Wi-Fi的網(wǎng)絡(luò)能力,將告警信息透過(guò)網(wǎng)絡(luò)直接推送到關(guān)注告警信息的相關(guān)人員,實(shí)現(xiàn)相對(duì)實(shí)時(shí)的安全解決方案。
2.3 主要解決的問(wèn)題
主要的解決的問(wèn)題場(chǎng)景是普通家用環(huán)境下的危險(xiǎn)因素告警檢測(cè),這其中包含最基本的煙霧檢測(cè)(對(duì)應(yīng)明火燃燒)、酒精檢測(cè)(對(duì)應(yīng)易燃液體)、天然氣泄漏檢測(cè)(對(duì)應(yīng)易燃易爆)、空氣質(zhì)量檢測(cè)(對(duì)應(yīng)不明物品燒焦產(chǎn)生有害的氣體充斥在家庭環(huán)境中)。
還有一個(gè)家庭環(huán)境中,上述的危險(xiǎn)因素會(huì)成倍放大的場(chǎng)景是,家中只有獨(dú)居老人的時(shí)候。比如,我的家人就很經(jīng)常做飯忘了關(guān)天然氣,但是我們年輕人會(huì)經(jīng)常發(fā)現(xiàn)并及時(shí)提醒他們,才不至于釀成悲劇。但是,獨(dú)居老人就是很大的問(wèn)題,因老人們年紀(jì)上來(lái)了,嗅覺(jué)、味覺(jué)、聽(tīng)覺(jué)、視力等多項(xiàng)身體機(jī)能指標(biāo)都下降得很厲害,面對(duì)上述場(chǎng)景,也難快速地發(fā)現(xiàn)危險(xiǎn)并做出有效的解決措施,那么這就需要一套更加智能的解決方案及時(shí)發(fā)現(xiàn)這些危險(xiǎn),以最現(xiàn)眼最宏觀的方式告知獨(dú)居老人,及時(shí)接觸風(fēng)險(xiǎn)。
我這個(gè)智能解決方案能夠很好地解決這個(gè)場(chǎng)景問(wèn)題,一方面它自帶了多種探測(cè)傳感器,能夠及時(shí)發(fā)現(xiàn)危險(xiǎn);同時(shí)當(dāng)危險(xiǎn)發(fā)生時(shí),通過(guò)告警指示燈閃爍和警報(bào)器盛宴告警,最大程序地提醒獨(dú)居老人,危險(xiǎn)已經(jīng)發(fā)生,應(yīng)盡快解除危險(xiǎn);另一方面,這個(gè)智能系統(tǒng)支持獨(dú)居老人的子女訂閱關(guān)注告警系統(tǒng)推送的危險(xiǎn)信息,通過(guò) 微信 的及時(shí)性,直接傳達(dá)到子女手中,這也能夠保證危險(xiǎn)發(fā)生的第一時(shí)間能夠得到子女的關(guān)注和提醒,得以順利協(xié)助老人解除危險(xiǎn)。
2.4 項(xiàng)目創(chuàng)新點(diǎn)
輕量化的終端設(shè)計(jì),板載RT-Thread操作系統(tǒng),方便應(yīng)用功能開(kāi)發(fā),可快速橫向擴(kuò)展功能;
終端設(shè)備部署可實(shí)現(xiàn)分布式,不局限于具體的部署環(huán)境;
整套IoT后端系統(tǒng)完全私有化部署,不受限于任何IoT云平臺(tái);數(shù)據(jù)安全能夠得到很好的保證;
報(bào)警推送消息的內(nèi)容可完全自定義配置,設(shè)計(jì)非常靈活;
接收?qǐng)?bào)警推送的人員支持可配置,可遠(yuǎn)程實(shí)時(shí)推送告警消息到多個(gè)人員;
面對(duì) 獨(dú)居老人 的相關(guān) 安全問(wèn)題,能夠很好地提供高效的解決方案。
3 系統(tǒng)架構(gòu)介紹
3.1 系統(tǒng)核心架構(gòu)圖
整個(gè)系統(tǒng)的核心架構(gòu)圖如下所示:
從上面這個(gè)核心架構(gòu)圖中,我們可以看到整個(gè)IoT系統(tǒng)組成,包括智能設(shè)備終端側(cè)、WEB配置前端側(cè)、智能IoT系統(tǒng)平臺(tái)后端側(cè),同時(shí)還有手機(jī)移動(dòng)端。下面就整個(gè)系統(tǒng)的幾大重要組件,我會(huì)一一進(jìn)行簡(jiǎn)要講解。
3.2 終端側(cè)
終端側(cè)主要承載的是現(xiàn)場(chǎng)環(huán)境要素的檢測(cè),同時(shí)做一些邊緣側(cè)的應(yīng)用邏輯處理,還需要具備對(duì)外網(wǎng)絡(luò)的通訊能力,能在第一時(shí)間把緊要消息通過(guò)網(wǎng)絡(luò)通道傳輸出去。
終端側(cè)包括的核心組件有:國(guó)民技術(shù)的 N32G457,搭載的是國(guó)產(chǎn)實(shí)時(shí)操作系統(tǒng) RT-Thread,同時(shí)外設(shè)板載有 ESP8266 Wi-Fi通訊模組、告警指示燈、聲音告警器、煙霧傳感器、酒精傳感器、天然氣傳感器、空氣質(zhì)量傳感器、若干按鍵等等。
終端側(cè)不僅包含設(shè)備硬件,還需要對(duì)應(yīng)的固件軟件,兩者相輔相成,共同完成終端側(cè)的功能邏輯。
3.3 后端側(cè)
這里的后端側(cè),從細(xì)分來(lái)看,總有4部分:
EMQ :「隨處運(yùn)行,無(wú)限連接,任意集成」云原生分布式物聯(lián)網(wǎng)接入平臺(tái),一體化的分布式 MQTT 消息服務(wù)和強(qiáng)大的 IoT 規(guī)則引擎,為高可靠、高性能的物聯(lián)網(wǎng)實(shí)時(shí)數(shù)據(jù)移動(dòng)、處理和集成提供動(dòng)力,助力企業(yè)快速構(gòu)建關(guān)鍵業(yè)務(wù)的 IoT 平臺(tái)與應(yīng)用。它就一個(gè)MQTT的Broker,消息的中轉(zhuǎn)站,終端側(cè)的上報(bào)消息能夠有序、高效、穩(wěn)定地傳遞給 Domoticz,它是功不可沒(méi)。
Domoticz :Domoticz 是一個(gè)開(kāi)源的智能家居系統(tǒng),通過(guò)它你可以監(jiān)測(cè)和控制各種設(shè)備比如:燈、開(kāi)關(guān) ,各種傳感器、儀表比如:溫度、雨、風(fēng)、紫外線、電、氣體、水 等等。還可以向任一移動(dòng)設(shè)備發(fā)送通知或警告。
SQLite : SQLite 是一個(gè)軟件庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫(kù)引擎。SQLite 是在世界上最廣泛部署的 SQL 數(shù)據(jù)庫(kù)引擎,在我們的系統(tǒng)中,它承載的是整個(gè)系統(tǒng)的數(shù)據(jù)、配置、產(chǎn)品等核心數(shù)據(jù)的存儲(chǔ),具有舉足輕重的地位。
Wechat服務(wù)后臺(tái) : 這部分并不是我開(kāi)發(fā)的,也不是我所能控制的,羅列在此,只為了表示后端系統(tǒng)組成的完整性。
3.4 前端側(cè)
前端側(cè)包括的是開(kāi)源智能家居系統(tǒng) Domoticz 的配置前端,通過(guò)這個(gè)前端頁(yè)面,可以快速地創(chuàng)建虛擬的智能產(chǎn)品,通過(guò)對(duì)接數(shù)據(jù)協(xié)議,實(shí)現(xiàn)對(duì)智能設(shè)備的管理和展示。
同時(shí)這個(gè)前端頁(yè)面可以 兼容 到PC端瀏覽器和移動(dòng)端瀏覽器,帶有用戶登陸管控功能,有利于維護(hù)數(shù)據(jù)和產(chǎn)品的安全。
當(dāng)它在移動(dòng)端使用時(shí),可以實(shí)現(xiàn)無(wú)APP,直接使用手機(jī)瀏覽器就夠了,不會(huì)過(guò)多地消耗手機(jī)的存儲(chǔ)空間,很輕量化,依賴相對(duì)較少。
它與后端的 Domoticz 是典型的 B/S網(wǎng)絡(luò)架構(gòu)模型,與之相對(duì)應(yīng)的有 C/S網(wǎng)絡(luò)架構(gòu)模型。
B/S網(wǎng)絡(luò)架構(gòu),指的是 Browser/Server(瀏覽器/服務(wù)器) 架構(gòu),就是只需要安裝維護(hù)一個(gè)服務(wù)器,而客戶端采用瀏覽器的方式來(lái)運(yùn)行軟件。它是隨著Internet技術(shù)而興起的,是對(duì)C/S結(jié)構(gòu)的一種變化和改進(jìn)。主要利用了WWW瀏覽器技術(shù),結(jié)合多種Script語(yǔ)言和新技術(shù),將系統(tǒng)功能實(shí)現(xiàn)的核心部分集中到服務(wù)器上,簡(jiǎn)化了系統(tǒng)的開(kāi)發(fā)、維護(hù)和使用。它是一種全新的軟件系統(tǒng)構(gòu)造技術(shù),它只需要安裝一個(gè)瀏覽器和數(shù)據(jù)庫(kù),就可以讓瀏覽器通過(guò)Web Server同數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互。
C/S網(wǎng)絡(luò)架構(gòu),它是一種網(wǎng)絡(luò)體系結(jié)構(gòu),其中客戶端是用戶運(yùn)行應(yīng)用程序的PC端或者工作站,客戶端要依靠服務(wù)器來(lái)獲取資源。C/S架構(gòu)是通過(guò)提供查詢響應(yīng)而不是總文件傳輸來(lái)減少了網(wǎng)絡(luò)流量。它允許多用戶通過(guò)GUI前端更新到共享數(shù)據(jù)庫(kù),在客戶端和服務(wù)器之間通信一般采用遠(yuǎn)程調(diào)用(RPC)或標(biāo)準(zhǔn)查詢語(yǔ)言(SQL)語(yǔ)句。
B/S網(wǎng)絡(luò)架構(gòu)的基本特征:
B / S架構(gòu)的優(yōu)點(diǎn):
(1)該架構(gòu)不需要安裝客戶端,可以直接運(yùn)行在Web瀏覽器中;
(2)B/S架構(gòu)可以直接放在Internet網(wǎng)絡(luò)上,從而達(dá)到通過(guò)某些特權(quán)來(lái)控制多客戶端訪問(wèn)的目的以及交互方式;
(3)B/S架構(gòu)由于不需要安裝客戶端,因此不存在更新多個(gè)客戶端以及升級(jí)服務(wù)器等問(wèn)題。
B / S架構(gòu)的缺點(diǎn):
(1)在跨瀏覽器中,B/S架構(gòu)不是令人最滿意的架構(gòu),時(shí)常容易出現(xiàn)頁(yè)面兼容顯示的問(wèn)題;
(2)在速度和安全性方面,仍然需要花費(fèi)巨大的設(shè)計(jì)成本,這是B/S架構(gòu)中最大的問(wèn)題;
(3)客戶端服務(wù)器交互是請(qǐng)求響應(yīng)模式,通常需要刷新頁(yè)面,這是不愿意看到客戶的。但是這個(gè)缺點(diǎn)在Ajax受歡迎之后該問(wèn)題得到了一定程度的緩解。
網(wǎng)絡(luò)C/S架構(gòu)的基本特征:
(1)客戶端進(jìn)程包含特定于解決方案的邏輯,并提供用戶與應(yīng)用程序系統(tǒng)其余部分之間的接口。服務(wù)器進(jìn)程充當(dāng)管理共享資源(如數(shù)據(jù)庫(kù),打印機(jī),調(diào)制解調(diào)器或高性能處理器)的軟件引擎。
(2)前端任務(wù)和后端任務(wù)對(duì)計(jì)算資源有著根本不同的要求,例如處理器速度,內(nèi)存,磁盤(pán)速度和容量以及輸入/ 輸出設(shè)備。
(3)客戶端和服務(wù)器的硬件平臺(tái)和操作系統(tǒng)通常不相同。客戶端和服務(wù)器進(jìn)程通過(guò)一組明確定義的標(biāo)準(zhǔn)應(yīng)用程序接口(API)和RPC進(jìn)行通信。
(4)C/S架構(gòu)的一個(gè)重要特征是可擴(kuò)展性,它們可以水平或垂直縮放。水平擴(kuò)展意味著添加或刪除客戶端,工作站只會(huì)對(duì)性能產(chǎn)生輕微影響。垂直擴(kuò)展意味著遷移到更大更快的服務(wù)器計(jì)算機(jī)或多服務(wù)器中。
WEB端的顯示配圖如下所示:
3.5 移動(dòng)端側(cè)
這個(gè)移動(dòng)端側(cè),包括兩個(gè)部分,一個(gè)是前面已經(jīng)提及的 Domoticz 在手機(jī)移動(dòng)端瀏覽器依然可以保持很好的顯示兼容性,也能夠完成PC瀏覽器一模一樣的功能;但能放在移動(dòng)端,它的便捷性就一下子提升了一個(gè)級(jí)別,并且無(wú)APP模式,大大提高了客戶使用的意愿。
另一個(gè)部分就是我們的 國(guó)民APP微信,微信憑借著 10 億月活、8 億日活的運(yùn)營(yíng)數(shù)據(jù)牢牢控制住社交APP的頭把交椅,幾乎可以說(shuō)是人人離不開(kāi)微信,它確確實(shí)實(shí)地人們的生活帶來(lái)了便利。
通過(guò)對(duì)Domoticz系統(tǒng)的改裝,使得它在原本的事件通知上也支持推送消息到微信客戶端,這也將大大提升系統(tǒng)產(chǎn)品的易用性和可落地性。
4 系統(tǒng)設(shè)計(jì)說(shuō)明
下面就系統(tǒng)的各個(gè)組件的設(shè)計(jì),做簡(jiǎn)要的說(shuō)明。
4.1 硬件部分
硬件部分主要分為四大部分:MCU主控、Wi-Fi模組、各類傳感器、輸出設(shè)備。
MCU主控 :N32G457
本次使用的MCU主控來(lái)自國(guó)民科技的32位高性能MCU,以下是它的板載資源介紹:
在我設(shè)計(jì)的這個(gè)系統(tǒng)中,我主要使用其UART1(debug功能)、UART2(連接ESP8266)、UART3(連接語(yǔ)音播報(bào)模塊)、還有6個(gè)GPIO(用于接入各類傳感器的輸入及告警信息的輸出)。
我的硬件實(shí)物連接圖如下所示:
Wi-Fi模組 : ESP8266
我這里使用的搭建ESP8266 Wi-Fi芯片的模組ESP-12F,它是由安信可科技開(kāi)發(fā)的,該模塊核心處理器 ESP8266 在較小尺寸封裝中集成了 業(yè)界領(lǐng)先的 Tensilica L106 超低功耗 32 位微型 MCU,帶有 16 位精簡(jiǎn)模式,主頻支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA,板載天線。
各類傳感器 :MQ系列煙感、燃?xì)獾葌鞲衅?/p>
這里主要包括系統(tǒng)中使用的煙霧傳感器、酒精傳感器、天然氣傳感器、空氣質(zhì)量傳感器,這幾個(gè)都是MQ氣體類傳感器。
MQ氣體傳感器使用的氣敏材料是在清潔空氣中電導(dǎo)率較低的二氧化錫(SnO2)。當(dāng)傳感器所處環(huán)境中存在可燃?xì)怏w時(shí),傳感器的電導(dǎo)率隨空氣中可燃?xì)怏w濃度的增加而增大。使用簡(jiǎn)單的電路即可將電導(dǎo)率的變化轉(zhuǎn)換為與該氣體濃度相對(duì)應(yīng)的輸出信號(hào)。MQ氣體傳感器對(duì)甲烷的靈敏度高,對(duì)丙烷、丁烷也有較好的靈敏度。這種傳感器可檢測(cè)多種可燃性氣體,特別是天然氣,是一款適合多種營(yíng)養(yǎng)的低成本傳感器。
輸出設(shè)備 :DY-SV17F語(yǔ)音播放模塊
DY-SV17F是一款智能語(yǔ)音模塊,集成IO分段觸發(fā),UART串口控制,ONE_line單總線串口控制,標(biāo)準(zhǔn)MP3等7種工作模式;板載5W D類功放,可直接驅(qū)動(dòng)4Ω,3~5W喇叭;支持MP3,WAV解碼格式,板載32Mbit(4MByte)flash存儲(chǔ)音頻文件,可通過(guò)USB數(shù)據(jù)線連接電腦更新音頻文件。
4.2 軟件部分
軟件部分主要分為兩部分:終端固件部分和Domoticz消息推送定制部分。
4.2.1 終端固件開(kāi)發(fā)
終端固件主要包括四大部分:N32G457的原廠BSP、RT-Thread實(shí)時(shí)操作系統(tǒng)、ESP8266相關(guān)的配置代碼使能、個(gè)性化的應(yīng)用邏輯代碼。
其中N32G457的原廠BSP基本不動(dòng),原廠和相關(guān)開(kāi)發(fā)者已經(jīng)適配好了;通用的RT-Thread操作系統(tǒng)的代碼也不在此處的修改中,直接復(fù)用已有的代碼,這里使用的版本是 4.0.2 。
ESP8266相關(guān)的AT、網(wǎng)絡(luò)組件代碼也是現(xiàn)成的,使能配置之后就可以直接用了,還是非常的方便。不過(guò)這里其實(shí)我也是踩坑了,下面的項(xiàng)目復(fù)盤(pán)會(huì)講到。
所以這里重點(diǎn)講一下,應(yīng)用邏輯的代碼:主要包括幾個(gè)傳感器的檢測(cè)驅(qū)動(dòng)、告警指示燈的控制邏輯、音頻播放模塊的驅(qū)動(dòng)、按鍵觸發(fā)功能的處理等。
整個(gè)應(yīng)用軟件部分的程序框架如下圖所示:
其中:
Main-Thread :執(zhí)行整個(gè)應(yīng)用的初始化,負(fù)責(zé)管理各個(gè)子線程的同步和銜接,比如告警信號(hào)產(chǎn)生時(shí),觸發(fā)告警信號(hào)的對(duì)外上報(bào),正是由Main-Thread來(lái)執(zhí)行的。
System-Config :用于完成整個(gè)系統(tǒng)相關(guān)的屬性配置,比如傳感器探測(cè)的周期設(shè)定、傳感器接入的GPIO設(shè)定、UART口的分配、EMQ后端定制的配置、Domticz后端傳感器編號(hào)的配置等等;這里的配置項(xiàng)都是全局生效的。
MQTT-Thread :承載整個(gè)應(yīng)用對(duì)外發(fā)送和對(duì)內(nèi)接收的網(wǎng)絡(luò)數(shù)據(jù)通道,告警信息的上報(bào)和傳感器數(shù)據(jù)的上報(bào),都深度依賴這個(gè)線程。
WiFi-Thread :本線程主要用于定時(shí)探測(cè)Wi-Fi網(wǎng)絡(luò)的有效性,通過(guò)對(duì)網(wǎng)絡(luò)設(shè)備節(jié)點(diǎn)的判斷,為應(yīng)用的其他邏輯功能提供一定的參考。
Sensors-Thread : 由于所選用的幾種傳感器都是同一類傳感器,且都是IO類的傳感器,所以通過(guò)列表的形式把他們定義在一起,方便輪詢管理;主要的工作就是定時(shí)采集數(shù)據(jù),判斷是否有對(duì)應(yīng)的傳感器觸發(fā)了告警。
Alert-LED-Thread :本線程要做的是事情就是在Sensors-Thread產(chǎn)生某一種或某幾種告警信號(hào)后,里面通過(guò)LED的閃爍,達(dá)到以視覺(jué)沖擊的告警目的。
Alert-Sound-Thread :本線程與Alert-LED-Thread線程類似,同樣都是處理告警信號(hào)的對(duì)外傳遞,只不過(guò)它用的是聲音的聽(tīng)覺(jué)沖擊來(lái)達(dá)到告警的目的。它與Sensors模塊通過(guò)郵箱來(lái)傳遞播報(bào)哪一條報(bào)警信息,這與Domoticz后端綁定的通知信息是對(duì)等的。
Key-Scan-Thread :這個(gè)線程需要做的事情,主要是當(dāng)產(chǎn)生告警信號(hào)后,燈亮鈴響時(shí),可以通過(guò)按鍵來(lái)消除LED告警和聲音告警,使得系統(tǒng)檢測(cè)恢復(fù)到初始狀態(tài)。
在軟件設(shè)計(jì)過(guò)程中,所有涉及到線程間同步的機(jī)制,均采用信號(hào)量和消息隊(duì)列來(lái)實(shí)現(xiàn),主線程在這其中起到承上啟下的作用。
總結(jié)一下,本次在使用RT-Thread操作系統(tǒng)的時(shí)候,使用到了其 串口設(shè)備驅(qū)動(dòng)、GPIO設(shè)備驅(qū)動(dòng)、AT組件、SAL 套接字抽象層、信號(hào)量、郵箱 等核心模塊,整體使用上還是挺順手的。
基本代碼示意圖如下所示:
4.2.2 Domoticz推送定制
這里主要的軟件實(shí)現(xiàn)就是,就是將原本Domoticz中需要通過(guò)Email推送出去的消息,轉(zhuǎn)到通過(guò)HTTP接口推送到微信中,從而關(guān)注了對(duì)應(yīng)微信的人員就可以收到對(duì)應(yīng)的告警信息推送。這里用到了一個(gè)python腳本實(shí)現(xiàn)HTTP接口,然后POST消息到微信中。
基礎(chǔ)的改動(dòng)代碼正如下圖所示:
4.3 私有化部署的 IoT 系統(tǒng)
這里提及的私有化部署,主要是將IoT后端系統(tǒng)部署在個(gè)人云服務(wù)器上,以便于通過(guò)公網(wǎng)快速訪問(wèn);同時(shí),由于是私有化部署,不受限于任何的IoT云平臺(tái),這對(duì)比外面普通對(duì)接阿里云平臺(tái)、涂鴉云平臺(tái)、微信云平臺(tái)、小米云平臺(tái)、百度云平臺(tái)等等,是有一個(gè)的優(yōu)勢(shì)的;至少在個(gè)人家庭數(shù)據(jù)的沉淀和數(shù)據(jù)安全上,沒(méi)有那么地?fù)?dān)心。
這里的系統(tǒng)部署,包括幾個(gè)部分:
EMQ的部署 :
EMQ的部署相對(duì)比較容易,基本參照官方教程就可以完成,感興趣的可以去了解他們的github開(kāi)源倉(cāng)庫(kù)。
Domoticz的部署 :
這里其實(shí)我是踩坑了的,下文的經(jīng)驗(yàn)總結(jié)會(huì)細(xì)講。總之,一開(kāi)始各種不順,后面推過(guò)一系列的摸索學(xué)習(xí),決定采用修改Domoticz的源碼,借助企業(yè)微信的推送功能,打通系統(tǒng)告警消息推送到微信的功能。
企業(yè)微信相關(guān)的部署 :
從這里我們知道,要完成Domoticz的通知推送與微信消息推送打通,我們需要借助企業(yè)微信的應(yīng)用功能,企業(yè)微信開(kāi)放了相關(guān)的接口來(lái)實(shí)現(xiàn)這部分功能,感興趣的可以參考下 官網(wǎng)的文檔介紹,當(dāng)然也可以參考下我采用的 引路文章。
WEB訪問(wèn)域名的配置 :
當(dāng)Domiticz在私有云服務(wù)器上部署成功之后,基本就可以通過(guò)公網(wǎng)IP加對(duì)應(yīng)端口的形式,以HTTP或HTTPS的方式訪問(wèn);由于IP和端口不容易記憶且容易拼錯(cuò),所以才衍生了配置域名訪問(wèn)的需求,之前我配置過(guò)類似的功能,比如使用 http://yyds.recan-li.cn就可以訪問(wèn)我的 CSDN主頁(yè),之前我寫(xiě)過(guò)類似的教程,基本參考教程一步步做可以完成相關(guān)的配置功能了。配置完的效果就是,我可以通過(guò) http://smart.recan-li.cn 就可以訪問(wèn)Domoticz的WEB配置前端,而不需要輸入繁瑣難記的IP+端口了。
5 項(xiàng)目實(shí)施過(guò)程
主要實(shí)施過(guò)程如下所示:
1)搭建后端系統(tǒng),先把EMQ這個(gè)MQTT broker搭建起來(lái),使得終端和后端的數(shù)據(jù)通道得以建立起來(lái);
2)部署安裝Domoticz,可選用zip包解壓安裝或源碼編譯安裝,但由于要定制化告警消息推送到微信,這里強(qiáng)烈建議使用源碼級(jí)編譯安裝;當(dāng)Domoticz安裝運(yùn)行起來(lái)后,其對(duì)應(yīng)的SQLite數(shù)據(jù)庫(kù)也是同步在工作的;這時(shí)WEB端的訪問(wèn)服務(wù)也是同步開(kāi)啟了;
3)通過(guò)Domoticz的WEB端配置,建立MQTT類型傳感器,同時(shí)在平臺(tái)建立與終端一一對(duì)應(yīng)的虛擬傳感器;這一步完成之后,便可以使用MQTT.fx等MQTT調(diào)試工具模擬對(duì)Domoticz上的虛擬設(shè)備進(jìn)行狀態(tài)推送,看其對(duì)應(yīng)的狀態(tài)是否會(huì)發(fā)生改變;
4)搭建企業(yè)微信的環(huán)境,包括創(chuàng)建一個(gè)企業(yè)微信賬號(hào),再在企業(yè)微信下創(chuàng)建一個(gè)應(yīng)用,取得企業(yè)ID、應(yīng)用ID和應(yīng)用私鑰;有這個(gè)要素之后,就可以使用微信推送的HTTP接口做消息推送的模擬測(cè)試;
5)再在Domoticz源碼上集成應(yīng)用HTTP接口推送(告警)消息到微信客戶端的功能代碼;
6)開(kāi)發(fā)終端的固件,調(diào)試Wi-Fi通訊,MQTT上下行,以及各個(gè)傳感器的工作;
7)需要關(guān)注微信推送消息的人員掃碼 關(guān)注 企業(yè)微信中對(duì)應(yīng)的應(yīng)用,同時(shí)打開(kāi)微信客戶端的通知顯示權(quán)限,這樣當(dāng)新的消息通過(guò)企業(yè)微信應(yīng)用推送下來(lái)時(shí),手機(jī)端就會(huì)彈窗提示;
8)終端工作起來(lái),嘗試觸發(fā)一些告警狀態(tài),觀察終端的處理邏輯和狀態(tài)上報(bào)到Domoticz的數(shù)據(jù)更新,同時(shí)觀察告警消息往微信客戶端的推送情況。
通過(guò)上述一系列的實(shí)施之后,整個(gè)私有化部署的家用式智能告警系統(tǒng)就跑起來(lái)了,enjoy it !
6 項(xiàng)目效果顯示
相關(guān)的展示圖片和演示視頻,見(jiàn)下文:
【項(xiàng)目展示圖片】
【項(xiàng)目演示視頻】見(jiàn) B站視頻。
【項(xiàng)目開(kāi)源代碼】n32g457_esp8266_smart_home
7 項(xiàng)目復(fù)盤(pán)
7.1 項(xiàng)目踩的那些坑
RT-Thread Studio的配置項(xiàng)摸索半天,想去搜索一下配置項(xiàng),又不知何從做起,我是深度Linux環(huán)境開(kāi)發(fā)者,平時(shí)一個(gè)grep能解決的事情,我不知道在Windows下有什么好的替代方案,慢不慢先不說(shuō),先得有。之前在Linux都是menuconfig,我始終覺(jué)得那個(gè)更親切。知其然,也知其所以然。
ESP8266的固件燒錄耽誤老半天,上次RDC大會(huì)抽中的ESP-12F開(kāi)發(fā)板,默認(rèn)出來(lái)的lua版本,而非AT版本;由于RT-Thread的組件是需要AT版本的,于是找個(gè)好幾個(gè)教程,費(fèi)了好大勁才把AT調(diào)出來(lái),期間各種下載失?。ㄟ€是下載到90%才失敗的那種),各種下載工具折騰,下載速度也慢;本來(lái)想偷下懶用ESP8266省事的,硬是折騰得想臨時(shí)換模組。
ESP8266的AT是通了,但是編譯個(gè)N32G457固件使用UART2帶ESP8266,死活work不起來(lái);無(wú)奈求助于RT-Thread,很快找到了論壇好友 crystal266 的 基于RT-Thread和N32G457的智能家居demo ,看到他已經(jīng)完成了全部流程,應(yīng)該可以為我所有,所以我借用他的配置代碼,果然ESP8266的通訊能力一下子就拉滿了。那種感覺(jué)好像,項(xiàng)目馬上就可以結(jié)項(xiàng)了,絲滑地很。
Domotics的郵件通知功能,在最新版本上就是各個(gè)渣渣,還特意閱讀了一個(gè)國(guó)外同行遇到的同樣的問(wèn)題,看了他們的issue溝通,然后依然沒(méi)有任何思緒。一路執(zhí)行,我放棄了stable版本的Domoticz安裝版本(zip包直接拉起bin文件)轉(zhuǎn)向源碼自行編譯編譯,重新操刀在發(fā)送郵件通知的地方,把通知重定向發(fā)往微信里面。再次,感慨,開(kāi)源大法好,任何字節(jié)細(xì)致都逃不過(guò)你的法眼!你想怎么玩就怎么玩!
具體如何修改相關(guān)的代碼,可以參考上面的 4.2.2 小節(jié)。
Domiticz 是我目前遇到編譯開(kāi)源軟件,最蛋疼的一次,各種問(wèn)題,真正的是走一步出問(wèn)題一步,然后解決一步再前進(jìn)一步,期間過(guò)程遇到各種奇葩問(wèn)題,編譯慢也是知道吐槽一下,所幸最后還是編譯出來(lái)了,能夠把它跑起來(lái)。
之前在配置Domoticz的郵箱通知功能失敗之后,我考慮過(guò)使用它的SMS短信通知功能,無(wú)奈Domoticz的大神們都是國(guó)外的,給出的接口都是國(guó)外公司的,我想注冊(cè)一個(gè)賬號(hào)體驗(yàn)下,居然死活注冊(cè)不成功!說(shuō)好的技術(shù)無(wú)國(guó)界呢?放棄!
接下來(lái)各種搜索推送通知方案,短信、郵件、HTTP、語(yǔ)音等,了解了阿里云、騰訊云的各種相關(guān)服務(wù),無(wú)奈要不是接口做的相對(duì)我來(lái)說(shuō)復(fù)雜了些,要不就是功能不能很好地滿足我的功能需求(提供的功能需求限制太多);差點(diǎn)放棄了,后面被我檢索到一篇關(guān)于企業(yè)微信支持開(kāi)發(fā)者推送消息的文章,讓我眼前一亮,心想這才是我想的 為所欲為,這個(gè)太棒了。一個(gè)python腳本配置一下就可以輕松搞起來(lái),你還能找到比這個(gè)更簡(jiǎn)單的嗎?
微信推送算是搞定了,接下來(lái)的Domoticz的域名網(wǎng)址配置,又出問(wèn)題了;之前我配置過(guò)使用 http://yyds.recan-li.cn 就可以訪問(wèn)CSDN主頁(yè)的方法,我使用該方法依葫蘆畫(huà)瓢,設(shè)置了 http://smart.recan-li.cn 的域名訪問(wèn)Domoticz,結(jié)果卻出現(xiàn)了nginx返回http502. 真是無(wú)可奈何。
終端側(cè)的槽點(diǎn)倒是沒(méi)多少了,但這樣需要重點(diǎn)吐槽下 N32G457在RT-Thread Studio下使用pyocd.exe,時(shí)好時(shí)壞,有些郁悶。
好像N45G357這板子還有點(diǎn)脆弱,差點(diǎn)焊廢了,差點(diǎn)芯片就起不來(lái)了!
最后一個(gè)不算是坑的點(diǎn):使用RT-Thread開(kāi)發(fā)IoT應(yīng)用這種量級(jí)的代碼,用起來(lái)還是 倍兒爽,希望RT-Thread能把這份爽繼續(xù)發(fā)揚(yáng)下去。
7.2 項(xiàng)目帶來(lái)的啟發(fā)
DDL是第一生產(chǎn)力
我始終覺(jué)得我是一個(gè)無(wú)形之中在不斷踐行這個(gè)slogan的開(kāi)發(fā)者,雖然我知道這個(gè)習(xí)慣真的很不好,每次在DDL之前總是付出比平常多幾倍的時(shí)間和精力去努力完成既定的任務(wù)和計(jì)劃,其實(shí)這個(gè)投入和產(chǎn)出是非常不正常也不科學(xué)的。所以,當(dāng)我深刻意識(shí)到這點(diǎn)之后,我也會(huì)努力克制住平時(shí)的惰性,爭(zhēng)取把時(shí)間計(jì)劃做得更細(xì)致,把有限的時(shí)間最大化地利用,做一個(gè)生活和技術(shù)都自律的人。
優(yōu)先解決主要矛盾
我剛?cè)胄械臅r(shí)候,帶我的師傅經(jīng)常跟我們說(shuō)一句話:“先解決 有沒(méi)有 的問(wèn)題!”其實(shí),跟這里說(shuō)的優(yōu)先解決主要矛盾是一樣的,比如你搭這個(gè)智能化 IoT 系統(tǒng),如何能快速搭建好產(chǎn)品原型,把終端側(cè)的數(shù)據(jù)和后端打通,那首先你必須得解決終端側(cè)聯(lián)網(wǎng)的問(wèn)題,這個(gè)就是優(yōu)先級(jí)最高的,后端系統(tǒng)到可能不是最先的,你有網(wǎng)絡(luò)之后,你可以先用一個(gè)本地的MQTT broker一樣可以看到終端側(cè)的數(shù)據(jù)上報(bào),而數(shù)據(jù)端的采集、處理邏輯,我倒認(rèn)為是最次要的;因?yàn)槟阍诖酥?,你完全可以模擬數(shù)據(jù),你想要什么數(shù)據(jù)就有什么數(shù)據(jù),但是最終在整個(gè)數(shù)據(jù)傳到鏈條打通之后,終端側(cè)數(shù)據(jù)的準(zhǔn)確性及多樣化的業(yè)務(wù)邏輯往往可以起到錦上添花的效果。
努力把你當(dāng)那些 TODO 消滅掉
我相信每個(gè)人都有自己很多的 TODO,但是往往程序猿的 TODO 又好像代碼里的注釋寫(xiě)的那種,不僅騙了自己,同時(shí)也騙了別人。而項(xiàng)目中的 TODO 往往就是那些需要優(yōu)化,需要沉淀,需要突破的地方,就好像我這個(gè)項(xiàng)目一樣,比如如何做好更好的用戶體驗(yàn)?比如如何快速、準(zhǔn)確地完成私有化部署?比如如何快速地迭代新的終端側(cè)功能?比如這個(gè)產(chǎn)品有沒(méi)有更大的潛在商業(yè)價(jià)值?這一系列的 TODO 往往才是核心競(jìng)爭(zhēng)力的體現(xiàn),只有把它們踏踏實(shí)實(shí)消滅了,才有可能帶來(lái)新的臺(tái)階。
7.3 未來(lái)的一些想法和規(guī)劃
斷舍離
短期內(nèi),這應(yīng)該會(huì)是我參加的最后一次這種設(shè)計(jì)大賽了,倒不是說(shuō)這樣的設(shè)計(jì)大賽無(wú)法給我?guī)?lái)學(xué)習(xí)和成長(zhǎng)的價(jià)值,而是我發(fā)現(xiàn)我現(xiàn)在的工作需要承擔(dān)更多的東西,我需要靜下來(lái)心去實(shí)現(xiàn)新的突破。相比之下,現(xiàn)階段在工作上的突破或許要比在設(shè)計(jì)大賽上的成長(zhǎng)對(duì)我來(lái)說(shuō)更為重要。工作和生活是不可能完全隔離,但需要做好權(quán)衡,畢竟人的精力是有限的,我希望把它花在最需要成長(zhǎng)的地方。
技術(shù)備忘錄
技術(shù)備忘錄里的幾十個(gè)技術(shù)備選課題等著我去靜下心來(lái)梳理、沉淀和轉(zhuǎn)換,這往往會(huì)耗費(fèi)大量的精力去琢磨。熟悉我的朋友可知,我每月在 RT-Thread論壇 至少輸出2篇技術(shù)干貨,很榮幸連續(xù)拿了3個(gè)月度優(yōu)秀文章,同時(shí)還有好幾篇技術(shù)文章得到【優(yōu)秀】稱號(hào),還有收到論壇好友的友情打賞,這些都在激勵(lì)著我不斷前行,我也會(huì)堅(jiān)持把這個(gè)月度技術(shù)輸出繼續(xù)下去,希望可以把自己的技術(shù)經(jīng)驗(yàn)傳遞給更多需要的技術(shù)人。
一年之計(jì)在于春
最近剛寫(xiě)了一篇心靈雞湯,感興趣的可以當(dāng)做水文一篇,沒(méi)事解解乏。【職場(chǎng)心靈雞湯】以多年來(lái)拿最佳的心路歷程來(lái)復(fù)盤(pán)【如何成為優(yōu)秀的5%】
8 致謝
感謝強(qiáng)大的政府,深明大義的果斷決策,才得以控制住在深圳眼看就要大概率多點(diǎn)擴(kuò)散的新冠疫情,才有今天安靜地坐在辦公室碼代碼的自由。
感謝 RT-Thread的小師弟,不屈不撓地催促(初略算了下,不少于3次)我趕緊完成比賽項(xiàng)目,趕緊提交比賽文檔,錯(cuò)過(guò)這村就沒(méi)這店了,才不至于讓我的參賽項(xiàng)目流產(chǎn)。
感謝論壇好友 crystal266 的 參賽作品文章及基礎(chǔ)代碼 快速地幫我們踩了ESP8266在N32G457上面的坑,才得以項(xiàng)目在 DDL 之前完成作品的提交。
感謝家人對(duì)這段時(shí)間工作安排的密集和生活照料的無(wú)暇,才得以全心思地投入作品創(chuàng)作。
最后,不求最佳,但求無(wú)憾!
原文標(biāo)題:【N32G457】從0到1打造一個(gè)私有化部署的家用式智能告警系統(tǒng)
文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論
查看更多