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