物模型其实就是云平台对产品功能的数字化描述。以“灯”为例,最简单的“灯”具有“开”和“关”属性,只需要在平台定义一个布尔量的数据点位,有些高级的“灯”还具有“亮度”、“色温”、“颜色”等属性,可以和简单“灯”一样定义多个属性描述,也可以定义一个结构体,下图就是基于阿里云“物联网平台”定义的两种“灯具”举例。
利用物模型规范数据传输的格式更好的整合和管理多样化的产品数据,提高数据处理和交互的效率,方便将设备接入软件即服务(SaaS)、平台即服务(PaaS)等云服务类型,比如利用“云智能”通用模板“零代码”开发手机应用以及利用“物联网平台”增值服务开发Web服务。
阿里云物模型使用
使用物模型需要对产品的功能进行定义,添加“灯”和“可控灯”两个属性,其中“灯”仅支持“开”“关”操作,而“可控灯”除了“开关”以外还可以进行“亮度”“色温”“颜色”控制。
配置完成点击“发布上线”即可,此时在进入设备界面的“物模型数据”下可以查看刚才添加的属性。
根据阿里云物模型JSON规则配置的上传数据格式:
{"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报文到阿里云规定的属性上报窗口,就可以在设备窗口查询到上报的属性;
阿里云官方提供的实例演示地址:https://help.aliyun.com/zh/iot/getting-started/using-mqtt-fx-to-access-iot-platform?spm=a2c4g.11186623.0.0.12254df9kv2LCH
上述报文如何配置的都可以在此处查询,除此之外,还需要了解平台推送数据的方法。
阿里云和ONENET推送设置的格式基本一致,但ONENET平台需要在收到数据后向指定地址推送接收成功的报文,讲解ONENET时再展开说明;
还是以控制“灯”为例,了解平台下发数据的报文,下述报文为平台关闭“灯”并配置控制“可控灯”状态的报文:
{"id":"2024306076","version":"1.0","params":{"light":0,"advanced_light":{"on":1,"luminance":500,"Temperature":1000,"colour":100}},"method":"thing.service.property.set"}
ONENET物模型使用
所有的云平台物模型功能较为相似,ONENET和阿里云一样描述为功能定义,除了UI有差异外其余基本一致。
报文上与阿里云也比较类似,与阿里云列举相同案例:
{"id":"123","version":"1.0","params":{"light":{"value":0, "time":1524448722123}}}
相比阿里云增加了数据点位的时间戳功能;
设备属性设置和阿里云相同,只是没有“method”字段,最大的差异时平台设置需要设备响应,否则服务器会返回错误。
DDSU666电表数据上报
《Node-RED实现电表数据上云》一文中使用Node-RED通过“MQTT节点”并利用“自定义topic”将透明报文数据传输至服务器实现了电表数据上云,通过自定义topic的方式连接服务器,无法使用平台的其他开发工具,通过前面对阿里云与中移物联网的物联网平台的物模型进行报文分析,接下来就手把手教大家使用物模型连接DDSU电表。
前文指路:
《Node-RED实现电表数据采集并上云》
下图为《Node-RED实现电表数据上云》的系统框架,接下来就在此基础上添加JSON报文解析和报文组合就可以实现物模型控制。
按照“阿里云物模型使用”提供方法在定义“正向有功总功率”“当前电压”“当前电流”“当前功率”“查询代码”五条属性(查询代码采用枚举,其余需要使用浮点值),之后就是在“阿里云查询”节点后添加两个函数节点,分别用于提取平台查询代码和查询代码保存(后续上报时需要用到)。
函数(提取查询代码)1:
msg.payload = msg.payload.params.Query_code;
return msg;
函数(保存查询代码)2:
var QueryCode=0;
flow.set("QueryCode", msg.payload);
return QueryCode;
以上步骤就可以完成阿里云平台下发的配置指令解析,随后和之前一样,通过查询码,查询电表数据。
待“电表解析”完成后,增加函数节点,组合JSON报文;
函数(ALIYUN报文配置)3:
var cache={"id":"123","version":"1.0","params":{},"method":"thing.event.property.post"};
cache.id = String(Date.parse(new Date())/1000); //将id数据用时间戳替换
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;
调整“阿里云查询”“阿里云上报”的地址:
阿里云查询(属性设置):/sys/a1iJTfIclao/DEV01/thing/service/property/set
阿里云上报(属性上报):/sys/a1iJTfIclao/DEV01/thing/event/property/post
同阿里云一样的方法定义五个属性,分别为“正向有功总电能”“当前电压”“当前电流”“当前功率”“查询代码”。
添加“mqtt in”节点、“函数”(返回报文)、“mqtt out”节点;
函数(返回报文),需要id一致:
var msg_cache = {"id":"1","code":200,"msg":"success"};
msg_cache.id=msg.payload.id;
msg.payload=msg_cache;
return msg;
解析过程与阿里云同步,调整函数(ONENET报文配置):
var cache={"id":"123","version":"1.0","params":{}};
cache.id = String(Date.parse(new Date())/1000);//将id数据用时间戳替换
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());//上传时间错
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查询(属性设置):$sys/QpUi02FdgF/220220069406/thing/property/set
返回接收成功(属性设置响应):$sys/QpUi02FdgF/220220069406/thing/property/set_reply
ONENET上报(属性上报):$sys/QpUi02FdgF/220220069406/thing/property/post
至此,就成功将DDSU666电表连接到阿里云与中移物联网。
ONENET调试窗口查询电表数据;
ALIYUN调试窗口查询电表数据;
产品推荐
E870-G1边缘计算网关是基于亿佰特自行研发的通讯协议《亿佰特云设备通讯协议》开发的以太网/4G边缘采集云网关,可通过服务器下发指令到设备达到控制或采集功能;可采集500个边缘数据点。设备上支持多种协议(TCP、UDP、MQTT)接入服务器,支持心跳包、注册包设置;同时该产品支持多种配置方式,支持网页平台;采用工业级设计标准,保证设备的高可靠性。
全部0条评论
快来发表一下你的评论吧 !