阿里云物联网平台物模型数据解析脚本

阿⾥云物联⽹平台物模型数据解析脚本
在⼀些物联⽹业务场景中,由于资源受限或配置较低,设备端不适合直接构造物模型的JSON数据结构体与物联⽹平台进⾏直接通信。
这种情况下,可以将设备上报的原数据直接透传到物联⽹平台。物联⽹平台调⽤您提交的数据解析脚本,将设备上⾏数据解析为物联⽹平台定义的标准格式(Alink JSON),再进⾏业务处理。
恩丹西酮
⽬前⽀持解析两类数据:
⾃定义Topic上⾏数据,即将设备通过⾃定义Topic上报给云端的⾃定义格式数据Payload解析为JSON格式。
上、下⾏物模型Topic的数据,即将设备上报给云端的⾃定义格式物模型数据解析为Alink JSON格式,和
将云端下发的Alink JSON格式数据解析为设备⾃定义的格式。
我们这⾥使⽤的是:物模型数据解析
数据格式为透传/⾃定义的产品下的设备与云端进⾏物模型数据通信时,需要物联⽹平台调⽤您提交的数据解析脚本,将上、下⾏物模型数据分别解析为物联⽹平台定义的标准格式(Alink JSON)和设备的⾃定义数据格式。
物联⽹平台接收到来⾃设备的数据时,先运⾏解析脚本,将透传的数据转换成Alink JSON格式的数据,再进⾏业务处理;物联⽹平台下发数据给设备前,也会先通过脚本将数据转换为设备的⾃定义格式,再下发给设备。
数据解析流程图:
设备上报透传格式的属性或事件(上⾏数据)全流程图:
调⽤设备服务或设置属性(下⾏数据)全流程图:
好了,接下来我们进⾏产品以及设备的配置:
1. 产品配置
参数说明
产品名称⾃定义产品名称
所属品类⾃定义品类
节点类型直连设备
数据格式透传/⾃定义
连⽹协议蜂窝 (2G / 3G / 4G / 5G)
产品物模型定义
设备物模型参数定义如下,这部分定义与⾃定义协议对应,⾮常重要
2. 设备端接⼊物联⽹平台
设备采⽤物模型通信 Topic中的透传上⾏⽤于设备发布属性、事件和扩展信息的数据。
这⾥我是⽤的是将Modbus数据通过MQTT协议发送到云平台的模块,设备发送到物联⽹平台的为16进制数据格式如下(Modbus帧):0x010412003700132f014e1f2a081a02001800f40008965b
这⾥我⽤的是采⽤ModbusSlave软件模拟设备数据,然后模块去查询这个虚拟设备的数据,数据定义如下:
中国市场经济
3. 数据解析脚本
本⽰例的数据解析脚本(javascript)如下:
/**
* 将设备⾃定义topic数据转换为json格式数据, 设备上报数据到物联⽹平台时调⽤
* ⼊参:topic  字符串,设备上报消息的topic
* ⼊参:rawData byte[]数组不能为空
* 出参:jsonObj JSON对象不能为空
*/
function transformPayload(topic, rawData){
var jsonObj ={}
return jsonObj;
}
var COMMAND_REPORT=0x00;//属性上报
var COMMAND_SET=0x01;//属性设置
var COMMAND_REPORT_REPLY=0x02;//上报数据返回结果
流行病学调查
var COMMAND_SET_REPLY=0x03;//属性设置设备返回结果
var COMMAD_UNKOWN=0xff;//未知的命令
var ALINK_PROP_REPORT_METHOD='thing.event.property.post';//物联⽹平台Topic,设备上传属性数据到云端
var ALINK_PROP_SET_METHOD='thing.service.property.set';//物联⽹平台Topic,云端下发属性控制指令到设备端var ALINK_PROP_SET_REPLY_METHOD='thing.service.property.set';//物联⽹平台Topic, 设备上报属性设置的结果到云端/**
* 将设备的⾃定义格式数据转换为Alink协议的数据,设备上报数据到物联⽹平台时调⽤
* ⼊参:rawData byte[]数组不能为空
* 出参:jsonObj Alink JSON对象不能为空
*/
function rawDataToProtocol(bytes){
uint8Array =new Uint8Array(bytes.length);
for(var i=0;i<bytes.length;i++){
uint8Array[i]= bytes[i]&0xff;
}
var dataView =new DataView(uint8Array.buffer,0);
var jsonMap =new Object();
jsonMap['method']=ALINK_PROP_REPORT_METHOD;
jsonMap['version']='1.0';
jsonMap['id']=''+Uint8(1);
/*数据解析部分*/
var params={};
params['FuelTankLiquidLevel']= Uint16(3);//下标为modbus数据帧字节索引
params['FuelBoxLiquidLevel']= Uint16(5);
params['TotalRuntime']= Uint16(7);
params['TotalPower']= Math.Uint16(9)*0.01*100)/100;
params['TotalStartTime']= Uint16(11);
params['OutPower']= Math.Uint16(13)*0.1*10)/10;//将获取到的数据进⾏缩⼩10倍处理
params['OutCurrent']= Math.Uint16(15)*0.1*10)/10;
params['OutVoltage']= Math.Uint16(17)*0.1*10)/10;
params['RunningStatus']= Uint16(19);
jsonMap['params']= params;//ALink JSON格式 - params标准字段
return jsonMap;
}
/**
*  将Alink协议的数据转换为设备能识别的格式数据,物联⽹平台给设备下发数据时调⽤
*  ⼊参:jsonObj Alink JSON对象不能为空
*  出参:rawData byte[]数组不能为空
*
短花针茅*/
function protocolToRawData(json){
var method = json['method'];
var id = json['id'];
var version = json['version'];
var payloadArray =[];
if(method ==ALINK_PROP_SET_METHOD)// 属性设置
{
var params = json['params'];
var FuelTankLiquidLevel= params['FuelTankLiquidLevel'];
var FuelBoxLiquidLevel= params['FuelBoxLiquidLevel'];
var TotalRuntime= params['TotalRuntime'];
var TotalPower= params['TotalPower'];
var TotalRuntime= params['TotalStartTime'];
var TotalPower= params['OutPower'];
var TotalPower= params['OutCurrent'];
var TotalPower= params['OutVoltage'];
var TotalPower= params['RunningStatus'];
//按照⾃定义协议格式拼接 rawData
payloadArray = at(buffer_uint8(COMMAND_SET));// command字段
payloadArray = at(buffer_int32(parseInt(id)));// ALink JSON格式 'id',将Json格式id转为字符串
威尼斯的小艇教学设计payloadArray = at(buffer_int16(FuelTankLiquidLevel));// 属性'FuelTankLiquidLevel'的值,要注意数据类型        payloadArray = at(buffer_uint16(FuelBoxLiquidLevel));
payloadArray = at(buffer_uint16(TotalRuntime));
payloadArray = at(buffer_float32(TotalPower));
国家形象宣传片人物篇
payloadArray = at(buffer_uint16(TotalStartTime));
payloadArray = at(buffer_uint16(OutPower));
payloadArray = at(buffer_uint16(OutCurrent));
payloadArray = at(buffer_uint16(OutVoltage));
payloadArray = at(buffer_uint16(RunningStatus));
}else if(method ==ALINK_PROP_REPORT_METHOD){//设备上报数据返回结果
var code = json['code'];
payloadArray = at(buffer_uint8(COMMAND_REPORT_REPLY));//command字段
payloadArray = at(buffer_int32(parseInt(id)));// ALink JSON格式 'id'

本文发布于:2024-09-20 21:33:36,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/613845.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   设备   定义   平台   格式   物联   解析
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议