数据解析脚本(云网关)实践
物联网场景中,面对低配置且资源受限或者对网络流量有要求的设备,往往不适合在设备端构造JSON数据与IoT物联网平台通信,这时设备可通过自定义Topic将原始数据直接上报到物联网平台。物联网平台提供数据解析功能,可以根据您提交的脚本,将设备原始数据在云端转换成结构化的JSON格式,方便云上业务系统存储和展示。
1.自定义Topic数据解析
设备通过自定义Topic发布数据,且Topic携带解析标记(?_sn=default)时,物联网平台接收数据后,先调用您在控制台提交的业务数据解析脚本,将设备上报的原始数据解析为JSON结构体,再进行数据流转处理。
云上数据解析能力:
数据解析流程图:
说明
- 目前仅华东2(上海)地域支持自定义Topic数据解析。
- 设备上报数据是,在发布消息的自定义Topic后添加数据解析标记(?_sn=default)。
例如,设备发送到Topic /${productKey}/${deviceName}/user/update 的原数据需要解析为JSON格式。在设备上报时,该Topic为:/${productKey}/${deviceName}/user/update?_sn=default。
- 在物联网平台创建自定义Topic时按正常Topic定义,不添加解析标记。
- 仅解析设备上报云端的原数据,不解析云端下行数据。
- 解析前后,消息所在Topic不变。
例如,设备发送到/${productKey}/${deviceName}/user/update?_sn=default的数据,解析后仍在/${productKey}/${deviceName}/user/update的Topic中。
2.脚本解析实践案例
本次实践,我们以水泵运行数据采集为例,在设备端产生的原始数据是一个字符串: DATA,23,5000 ,通过数据脚本解析引擎在IoT物联网平台云端转换成结构化的JSON格式: {"temperature":23,"speed":5000} 。
Topic和Payload变化:
3.云端开发
3.1 创建产品
3.2 添加自定义Topic
进入产品详情,选择Topic类列表的Tab,添加自定义通信Topic : /${productKey}/${deviceName}/user/data
3.3 编写数据解析脚本
根据业务情况编写数据转换的脚本,通过模拟输入验证脚本正确性,然后提交到物联网平台,如下图:
本案例完整脚本如下:
/**
* 将设备自定义topic数据转换为json格式数据, 设备上报数据到物联网平台时调用
* 入参:topic 字符串,设备上报消息的topic
* 入参:rawData byte[]数组 不能为空
*
* 出参:jsonObj JSON对象 不能为空
*/
function transformPayload(topic, rawData) {
var jsonObj = {}
var dataSrc = String.fromCharCode.apply(String, rawData);
var data = dataSrc.split(',');
jsonObj.temperature = parseInt(data[1]);
jsonObj.speed = parseInt(data[2]);
return jsonObj;
}
3.4 注册设备
完成水泵产品的定义和数据解析脚本提交后,我们来注册一个设备,获取到身份认证的三元组信息,如下图:
4.设备端开发
我们通过Node.js脚本模拟水泵上报运行数据到IoT物联网平台,完整代码如下:
const mqtt = require('aliyun-iot-mqtt');
//设备身份
const options = {
productKey: "替换productKey",
deviceName: "替换deviceName",
deviceSecret: "替换deviceSecret",
regionId: "cn-shanghai"
};
//上报的Topic追加?_sn=default
const topic = `/${options.productKey}/${options.deviceName}/user/data?_sn=default`;
//设备端数据
var data = 'DATA,23,5000';
//1.建立连接
const client = mqtt.getAliyunIotMqttClient(options);
console.log('topic= '+topic)
console.log('payload= '+data)
//2.发布数据到topic
client.publish(topic, data);
5.联机运行
在电脑端启动水泵模拟的Node.js脚本后,我们在IoT物联网平台的控制台日志服务里可以观测到上行消息分析日志,消息内容已经在云端转换为了结构化JSON数据,如下图:
在物模型数据分析的Tab下,可以看到解析过程的日志,如下图:
【往期回顾】
1.自建MQTT集群迁移阿里云IoT平台
2.IoT时代:WiFi配网技术剖析
3.微信小程序和IoT智能家居实践