因?yàn)槠颍覀儗ode-RED聯(lián)動(dòng)云平臺(tái)物模型實(shí)現(xiàn)電表數(shù)據(jù)上報(bào)教程分為了三段,前文撰寫(xiě)的《Node-RED聯(lián)動(dòng)ONENET云平臺(tái)物模型的應(yīng)用教程》、《阿里云物模型的應(yīng)用教程》兩篇文章中介紹了什么是物模型、ONENET物模型的使用以及阿里云物模型的使用教程。本文將重點(diǎn)介紹Node-RED聯(lián)動(dòng)云平臺(tái)物模型實(shí)現(xiàn)電表數(shù)據(jù)上報(bào)過(guò)程的案例教程,
《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ù)上云》的系統(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ù);
好了,今天的分享就到這里啦,EBYTE每一天都致力于更好的助力物聯(lián)化、智能化、自動(dòng)化的發(fā)展,提升資源利用率,更多產(chǎn)品更多資料,感興趣的小伙伴可以登錄我們的億佰特官網(wǎng)進(jìn)行了解,也可以直接撥打400電話(huà)咨詢(xún)技術(shù)專(zhuān)員!