设备透传数据云端解析
设备原始数据无需适配物模型,在物联网平台云端通过脚本实现二进制数据转换为物模型JSON格式。
背景信息
在大量物联网业务场景中,由于资源受限,或配置较低,设备端不适合直接构造物模型的JSON数据结构体与物联网平台进行直接通信。此时,可以将原数据直接透传到物联网平台,然后在物联网平台控制台,编写数据解析脚本,将设备上行数据解析为物联网平台定义的标准格式(Alink JSON)。
物联网平台接收到来自设备的数据时,先运行解析脚本,将透传的数据转换成Alink JSON格式的数据,再进行业务处理。数据解析流程图如下所示。
配置云端控制台
创建产品并定义物模型。
根据设备实际情况,创建产品。
示例中,选择WiFi入网,数据采用透传/自定义方式。
在功能定义栏,自定义如下图所示功能。
包括温度、湿度、二氧化碳、甲醛、PM2.5、光照强度。
创建设备。
在设备页,为该产品创建设备。
示例中,使用设备序列号作为DeviceName。
记录完整的设备证书信息(ProductKey、DeviceName、DeviceSecret),以备后续设备开发使用。
数据解析
查看设备上行消息。
已开发完成的设备通电后,配置本地网络的WiFi账号、密码、设备身份信息后,即可在物联网平台看到设备状态为在线。
在物联网平台控制台左侧导航栏选择监控运维>日志服务,选中上面已创建的产品。
选择上行消息分析页签,单击MessageID,即可查看设备上报消息详情。
我们用Hex方式查看设备上报的原始数据。
0xaa1fc800003710ff0005d76b15001c013400ad0ff0400ffff18003000ff2e
此时并不能读懂设备数据的业务意义,需要使用阿里云物联网平台云端数据解析能力。
编写数据解析脚本。
找到设备开发文档,获取数据协议内容。参考协议,编写解析脚本,处理设备上报的原始数据。下图为某设备数据协议示例。您可以在物联网平台提供的数据解析页面,编辑、提交脚本并模拟数据解析。
数据解析脚本中需定义支持以下两个方法:
Alink JSON格式数据转为设备自定义数据格式:protocolToRawData。
设备自定义数据格式转Alink JSON格式数据:rawDataToProtocol。
示例中的环境采集设备只有数据上报功能,因此只需要编写上行数据解析函数rawDataToProtocol,无需实现protocolToRawData。
var PROPERTY_REPORT_METHOD = 'thing.event.property.post'; //上行数据,自定义二进制转物模型JSON function rawDataToProtocol(bytes) { var 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(); //属性上报method jsonMap['method'] =PROPERTY_REPORT_METHOD; //协议版本号固定字段 jsonMap['version'] = '1.0'; //标示该次请求id值 jsonMap['id'] = new Date().getTime(); var params = {}; //12,13对应产品属性中PM2.5 params['pm25'] = (dataView.getUint8(13)*256+dataView.getUint8(12)); //14,15对应产品属性中 temperature params['temperature'] = (dataView.getUint8(15)*256+dataView.getUint8(14))/10; //16,17对应产品属性中 humidity params['humidity'] = (dataView.getUint8(17)*256+dataView.getUint8(16)); //18,19对应产品属性中co2 params['co2'] = (dataView.getUint8(19)*256+dataView.getUint8(18)); //22,23对应产品属性中甲醛hcho params['hcho'] = (dataView.getUint8(23)*256+dataView.getUint8(22))/100; //28,29对应产品属性中光照lightLux params['lightLux'] = (dataView.getUint8(29)*256+dataView.getUint8(28)); jsonMap['params'] = params; return jsonMap; } //下行指令,物模型JSON转二进制格式 function protocolToRawData(json) { var payloadArray = [1];//此设备只有上报数据功能,无法接收云端指令 return payloadArray; }
模拟数据解析。
脚本编写完成后,将前面监控日志看到的设备Hex数据拷贝出来,粘贴到模拟输入框,单击运行,可以在右侧看到运行结果。确认数据正确后,提交脚本。
数据解析脚本提交后,进入设备详情页。选择运行状态页,显示经脚本解析后设备采集到的环境数据。
名词解释
物模型
是对设备在云端的功能描述,包括设备的属性、服务和事件。物联网平台通过定义一种物的描述语言来描述物模型,称之为 TSL(即 Thing Specification Language),采用JSON格式,您可以根据TSL组装上报设备的数据。
Alink协议
阿里云定义的设备与云端之间的通信协议。
设备证书
设备证书指ProductKey、DeviceName、DeviceSecret。
ProductKey:是物联网平台为产品颁发的全局唯一标识。
DeviceName:在注册设备时,自定义的或自动生成的设备名称,具备产品维度内的唯一性。
DeviceSecret:物联网平台为设备颁发的设备密钥,和DeviceName成对出现。
数据解析脚本
针对采用透传格式/自定义数据格式的设备,需要在云端编写数据解析脚本,将设备上报的二进制数据或自定义的JSON数据,转换为平台上的Alink JSON数据格式。
- 本页导读