基于OpenHarmony設(shè)計實現(xiàn)的智能家居中控面板
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
1、設(shè)計背景及項目介紹
目前,智能家居理念飛速發(fā)展,各種智能家居產(chǎn)品不斷問世,隨著家用電器的發(fā)展,家用電器也要順應(yīng)科技的發(fā)展步伐走向智能化。智能家居不僅能給用戶提供安全、健康和舒適的生活環(huán)境,用戶還能方便地遠程監(jiān)控自己的家居狀態(tài),控制家庭電器設(shè)備。當(dāng)前,家居電子設(shè)備除常用家電設(shè)備以外,家庭安防設(shè)備和家庭醫(yī)療設(shè)備也逐漸增多。同時,隨著網(wǎng)絡(luò)技術(shù)的深入應(yīng)用,家庭中的多種電器設(shè)備都需要與互聯(lián)網(wǎng)對接。如何實現(xiàn)多種家庭設(shè)備的集中管理和遠程控制,是智能家居功能的體現(xiàn)?;谝陨媳尘埃疚奶岢隽艘环N基于OpenHarmony設(shè)計實現(xiàn)智能中控設(shè)備,目的是使開發(fā)者了解集成設(shè)備進行統(tǒng)一管理控制的一種方法。
本項目主題來自于OpenHarmony開源開發(fā)者成長計劃,實現(xiàn)了基于OpenHarmony設(shè)備的L0、L1、L2設(shè)備之間的互聯(lián)互通,實現(xiàn)了基于中控設(shè)備的設(shè)備遠程控制、設(shè)備聯(lián)動控制、設(shè)備自主控制等功能,功能相繼開發(fā)中與優(yōu)化中。
2、項目架構(gòu)
鑒于目前分布式軟總線技術(shù)開發(fā)難度較大,故本文采用MQTT物聯(lián)網(wǎng)通信協(xié)議來實現(xiàn)設(shè)備與云端通信,但中控面板端后期將會采用華為云應(yīng)用端API接口進行升級,進一步降低中控設(shè)備的資源消耗。
【智能中控面板】
智能中控面基于BearPI-HM Micro開發(fā)板設(shè)計實現(xiàn),其主控程序基 openHarmony JS應(yīng)用程序框架設(shè)計實現(xiàn),并使用MQTT物聯(lián)網(wǎng)通信協(xié)議接入華為云IOT平臺,同時可將控制指令發(fā)送至華為云IOT平臺,供云端處理。
【華為云IOT平臺】
華為云IOT平臺提供了設(shè)備接入服務(wù),供中控面板以及L0子節(jié)點設(shè)備的接入,同時設(shè)備控制基于設(shè)備聯(lián)動服務(wù)進行開發(fā),實現(xiàn)一條指令控制一個設(shè)備、一條指令控制多個設(shè)備、多條指令控制一個設(shè)備、多條指令控制多個設(shè)備等復(fù)雜邏輯的場景控制需求。
【L0子節(jié)點設(shè)備】
基于鴻蒙輕量系統(tǒng)開發(fā)的設(shè)備控制端,集成于智能設(shè)備上,可通過MQTT協(xié)議接入華為云IOT平臺,可實現(xiàn)復(fù)雜的設(shè)備控制邏輯,中控調(diào)用這些控制邏輯僅需一條指令即可,大大的解耦合了中控端與設(shè)備端復(fù)雜的控制邏輯鏈,將復(fù)雜邏輯控制鏈完全隔離于設(shè)備內(nèi)部。
3、中控應(yīng)用設(shè)計
中控應(yīng)用基于openHarmony應(yīng)用程序框架設(shè)計實現(xiàn),下面是設(shè)計圖,由于時間關(guān)系,設(shè)計圖還未完全開發(fā)實現(xiàn),后續(xù)會繼續(xù)跟進。
【主頁】
主頁控制設(shè)計顯示當(dāng)前中控面板采集到的微環(huán)境信息,提供了場景聯(lián)動的接口,支持一鍵控制多個設(shè)備。
【燈光控制】
燈光設(shè)計目前暫設(shè)計了一室一控,后續(xù)會繼續(xù)優(yōu)化拓展。
【空調(diào)設(shè)備控制】
【窗簾設(shè)備控制】
4、中控MQTT設(shè)計與添加設(shè)備思路
中控MQTT設(shè)計實現(xiàn)基于OpenHarmony3.0 LTS版本,后續(xù)更新后可能會有所改變。具體實現(xiàn)為中控MQTT通信過程處于內(nèi)核態(tài)驅(qū)動程序,JS應(yīng)用通過發(fā)起接口調(diào)用后,進入用戶態(tài)調(diào)用內(nèi)核態(tài)接口的流程,并且JS應(yīng)用會將所需要向云端發(fā)送的MQTT協(xié)議主題內(nèi)容直接傳入內(nèi)核態(tài),內(nèi)核態(tài)不作數(shù)據(jù)處理和解析,直接將數(shù)據(jù)發(fā)布至云端,這樣設(shè)計的目的是為了在添加設(shè)備的時候,僅需改變JS應(yīng)用的數(shù)據(jù)結(jié)構(gòu),并不需要修改設(shè)備的代碼,完成了解耦合。
{
"services": [{
"service_id": "smartctn",
"properties": {
"led": 1, // LED設(shè)備
"temp":30, // 溫度
"humi":70, // 濕度
"mode":"OFF"
}
}
]}
}
【打開LED燈示例】
僅需改變數(shù)據(jù)結(jié)構(gòu)的操作數(shù)即可。
open(e){
let that = this;
this.testable.services[0].properties.led = 1;
let payload = JSON.stringify(this.testable);
console.log(payload)
app.mqttpublish({
code:2,
payload:payload,
success(res){
},
fail(res,code){
},
complete(){
}
})
},
5、設(shè)備聯(lián)動設(shè)計
在添加好設(shè)備之后,進入設(shè)備聯(lián)動控制邏輯界面,添加聯(lián)動控制觸發(fā)條件即可。
6、總結(jié)
目前來看,實現(xiàn)控制還是有點復(fù)雜,待后續(xù)分布式軟總線的相關(guān)學(xué)習(xí)完全后,會嘗試修改控制方法。經(jīng)過本次項目設(shè)計后,我很榮幸得到許多優(yōu)秀的老師、開發(fā)伙伴給予我的技術(shù)支持。同時,該項目將會一直維護更新。直到功能能夠完全滿足需求為止。
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??