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