物模型其實(shí)就是云平臺(tái)對(duì)產(chǎn)品功能的數(shù)字化描述。以“燈”為例,最簡(jiǎn)單的“燈”具有“開(kāi)”和“關(guān)”屬性,只需要在平臺(tái)定義一個(gè)布爾量的數(shù)據(jù)點(diǎn)位,有些高級(jí)的“燈”還具有“亮度”、“色溫”、“顏色”等屬性,可以和簡(jiǎn)單“燈”一樣定義多個(gè)屬性描述,也可以定義一個(gè)結(jié)構(gòu)體,下圖就是基于阿里云“物聯(lián)網(wǎng)平臺(tái)”定義的兩種“燈具”舉例。
利用物模型規(guī)范數(shù)據(jù)傳輸?shù)母袷礁玫恼虾凸芾矶鄻踊漠a(chǎn)品數(shù)據(jù),提高數(shù)據(jù)處理和交互的效率,方便將設(shè)備接入軟件即服務(wù)(SaaS)、平臺(tái)即服務(wù)(PaaS)等云服務(wù)類(lèi)型,比如利用“云智能”通用模板“零代碼”開(kāi)發(fā)手機(jī)應(yīng)用以及利用“物聯(lián)網(wǎng)平臺(tái)”增值服務(wù)開(kāi)發(fā)Web服務(wù)。
阿里云物模型使用
使用物模型需要對(duì)產(chǎn)品的功能進(jìn)行定義,添加“燈”和“可控?zé)簟眱蓚€(gè)屬性,其中“燈”僅支持“開(kāi)”“關(guān)”操作,而“可控?zé)簟背恕伴_(kāi)關(guān)”以外還可以進(jìn)行“亮度”“色溫”“顏色”控制。
配置完成點(diǎn)擊“發(fā)布上線(xiàn)”即可,此時(shí)在進(jìn)入設(shè)備界面的“物模型數(shù)據(jù)”下可以查看剛才添加的屬性。
根據(jù)阿里云物模型JSON規(guī)則配置的上傳數(shù)據(jù)格式:
{"id":"123","version":"1.0","params":{"light":1,"advanced_light":{"on":1,"luminance":500,"Temperature":1000,"colour":100}},"method":"thing.event.property.post"}
利用Node-RED推送JSON報(bào)文到阿里云規(guī)定的屬性上報(bào)窗口,就可以在設(shè)備窗口查詢(xún)到上報(bào)的屬性;
阿里云官方提供的實(shí)例演示地址:https://help.aliyun.com/zh/iot/getting-started/using-mqtt-fx-to-access-iot-platform?spm=a2c4g.11186623.0.0.12254df9kv2LCH
上述報(bào)文如何配置的都可以在此處查詢(xún),除此之外,還需要了解平臺(tái)推送數(shù)據(jù)的方法。
阿里云和ONENET推送設(shè)置的格式基本一致,但ONENET平臺(tái)需要在收到數(shù)據(jù)后向指定地址推送接收成功的報(bào)文,講解ONENET時(shí)再展開(kāi)說(shuō)明;
還是以控制“燈”為例,了解平臺(tái)下發(fā)數(shù)據(jù)的報(bào)文,下述報(bào)文為平臺(tái)關(guān)閉“燈”并配置控制“可控?zé)簟睜顟B(tài)的報(bào)文:
{"id":"2024306076","version":"1.0","params":{"light":0,"advanced_light":{"on":1,"luminance":500,"Temperature":1000,"colour":100}},"method":"thing.service.property.set"}
ONENET物模型使用
所有的云平臺(tái)物模型功能較為相似,ONENET和阿里云一樣描述為功能定義,除了UI有差異外其余基本一致。
報(bào)文上與阿里云也比較類(lèi)似,與阿里云列舉相同案例:
{"id":"123","version":"1.0","params":{"light":{"value":0,"time":1524448722123}}}
相比阿里云增加了數(shù)據(jù)點(diǎn)位的時(shí)間戳功能;
設(shè)備屬性設(shè)置和阿里云相同,只是沒(méi)有“method”字段,最大的差異時(shí)平臺(tái)設(shè)置需要設(shè)備響應(yīng),否則服務(wù)器會(huì)返回錯(cuò)誤。
DDSU666電表數(shù)據(jù)上報(bào)
《Node-RED實(shí)現(xiàn)電表數(shù)據(jù)上云》一文中使用Node-RED通過(guò)“MQTT節(jié)點(diǎn)”并利用“自定義topic”將透明報(bào)文數(shù)據(jù)傳輸至服務(wù)器實(shí)現(xiàn)了電表數(shù)據(jù)上云,通過(guò)自定義topic的方式連接服務(wù)器,無(wú)法使用平臺(tái)的其他開(kāi)發(fā)工具,通過(guò)前面對(duì)阿里云與中移物聯(lián)網(wǎng)的物聯(lián)網(wǎng)平臺(tái)的物模型進(jìn)行報(bào)文分析,接下來(lái)就手把手教大家使用物模型連接DDSU電表。
前文指路:
《Node-RED實(shí)現(xiàn)電表數(shù)據(jù)采集并上云》
下圖為《Node-RED實(shí)現(xiàn)電表數(shù)據(jù)上云》的系統(tǒng)框架,接下來(lái)就在此基礎(chǔ)上添加JSON報(bào)文解析和報(bào)文組合就可以實(shí)現(xiàn)物模型控制。
按照“阿里云物模型使用”提供方法在定義“正向有功總功率”“當(dāng)前電壓”“當(dāng)前電流”“當(dāng)前功率”“查詢(xún)代碼”五條屬性(查詢(xún)代碼采用枚舉,其余需要使用浮點(diǎn)值),之后就是在“阿里云查詢(xún)”節(jié)點(diǎn)后添加兩個(gè)函數(shù)節(jié)點(diǎn),分別用于提取平臺(tái)查詢(xún)代碼和查詢(xún)代碼保存(后續(xù)上報(bào)時(shí)需要用到)。
函數(shù)(提取查詢(xún)代碼)1:
msg.payload = msg.payload.params.Query_code;
return msg;
函數(shù)(保存查詢(xún)代碼)2:
var QueryCode=0;
flow.set("QueryCode", msg.payload);
return QueryCode;
以上步驟就可以完成阿里云平臺(tái)下發(fā)的配置指令解析,隨后和之前一樣,通過(guò)查詢(xún)碼,查詢(xún)電表數(shù)據(jù)。
待“電表解析”完成后,增加函數(shù)節(jié)點(diǎn),組合JSON報(bào)文;
函數(shù)(ALIYUN報(bào)文配置)3:
var cache={"id":"123","version":"1.0","params":{},"method":"thing.event.property.post"};
cache.id = String(Date.parse(new Date())/1000);//將id數(shù)據(jù)用時(shí)間戳替換
var QueryCode=flow.get('QueryCode') || 0;
switch (QueryCode){
case 1:
cache.params.P = parseFloat(msg.payload);
break;
case 2:
cache.params.V = parseFloat(msg.payload);
break;
case 3:
cache.params.I = parseFloat(msg.payload);
break;
case 4:
cache.params.p = parseFloat(msg.payload);
break;
}
msg.payload=cache;
return msg;
調(diào)整“阿里云查詢(xún)”“阿里云上報(bào)”的地址:
阿里云查詢(xún)(屬性設(shè)置):/sys/a1iJTfIclao/DEV01/thing/service/property/set
阿里云上報(bào)(屬性上報(bào)):/sys/a1iJTfIclao/DEV01/thing/event/property/post
同阿里云一樣的方法定義五個(gè)屬性,分別為“正向有功總電能”“當(dāng)前電壓”“當(dāng)前電流”“當(dāng)前功率”“查詢(xún)代碼”。
添加“mqtt in”節(jié)點(diǎn)、“函數(shù)”(返回報(bào)文)、“mqtt out”節(jié)點(diǎn);
函數(shù)(返回報(bào)文),需要id一致:
var msg_cache = {"id":"1","code":200,"msg":"success"};
msg_cache.id=msg.payload.id;
msg.payload=msg_cache;
return msg;
解析過(guò)程與阿里云同步,調(diào)整函數(shù)(ONENET報(bào)文配置):
var cache={"id":"123","version":"1.0","params":{}};
cache.id = String(Date.parse(new Date())/1000);//將id數(shù)據(jù)用時(shí)間戳替換
var QueryCode=flow.get('QueryCode') || 0;
switch (QueryCode){
case 1:
cache.params.P={};
cache.params.P.value = parseFloat(msg.payload);
cache.params.P.time = Date.parse(new Date());//上傳時(shí)間錯(cuò)
break;
case 2:
cache.params.V={};
cache.params.V.value = parseFloat(msg.payload);
cache.params.V.time = Date.parse(new Date());
break;
case 3:
cache.params.I={};
cache.params.V.value = parseFloat(msg.payload);
cache.params.I.time = Date.parse(new Date());
break;
case 4:
cache.params.p={};
cache.params.V.value = parseFloat(msg.payload);
cache.params.p.time = Date.parse(new Date());
break;
}
msg.payload=cache;
return msg;
ONENET查詢(xún)(屬性設(shè)置):$sys/QpUi02FdgF/220220069406/thing/property/set
返回接收成功(屬性設(shè)置響應(yīng)):$sys/QpUi02FdgF/220220069406/thing/property/set_reply
ONENET上報(bào)(屬性上報(bào)):$sys/QpUi02FdgF/220220069406/thing/property/post
至此,就成功將DDSU666電表連接到阿里云與中移物聯(lián)網(wǎng)。
ONENET調(diào)試窗口查詢(xún)電表數(shù)據(jù);
ALIYUN調(diào)試窗口查詢(xún)電表數(shù)據(jù);
產(chǎn)品推薦
E870-G1邊緣計(jì)算網(wǎng)關(guān)是基于億佰特自行研發(fā)的通訊協(xié)議《億佰特云設(shè)備通訊協(xié)議》開(kāi)發(fā)的以太網(wǎng)/4G邊緣采集云網(wǎng)關(guān),可通過(guò)服務(wù)器下發(fā)指令到設(shè)備達(dá)到控制或采集功能;可采集500個(gè)邊緣數(shù)據(jù)點(diǎn)。設(shè)備上支持多種協(xié)議(TCP、UDP、MQTT)接入服務(wù)器,支持心跳包、注冊(cè)包設(shè)置;同時(shí)該產(chǎn)品支持多種配置方式,支持網(wǎng)頁(yè)平臺(tái);采用工業(yè)級(jí)設(shè)計(jì)標(biāo)準(zhǔn),保證設(shè)備的高可靠性。
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44635瀏覽量
373397 -
電表
+關(guān)注
關(guān)注
12文章
558瀏覽量
35339 -
云平臺(tái)
+關(guān)注
關(guān)注
1文章
1307瀏覽量
38957
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論