写点什么

IoT 平台云端通用数据解析脚本实践——实践类

作者:阿里云AIoT
  • 2023-02-28
    浙江
  • 本文字数:1650 字

    阅读完需:约 5 分钟

数据解析脚本(云网关)实践

物联网场景中,面对低配置且资源受限或者对网络流量有要求的设备,往往不适合在设备端构造 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=defaultconst 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.发布数据到topicclient.publish(topic, data);
复制代码


5.联机运行

在电脑端启动水泵模拟的 Node.js 脚本后,我们在 IoT 物联网平台的控制台日志服务里可以观测到上行消息分析日志,消息内容已经在云端转换为了结构化 JSON 数据,如下图:

物模型数据分析的 Tab 下,可以看到解析过程的日志,如下图:


【往期回顾】

1.自建MQTT集群迁移阿里云IoT平台

2.IoT时代:WiFi配网技术剖析

3.微信小程序和IoT智能家居实践


物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn


阿里云物联网平台客户交流群

用户头像

阿里云AIoT

关注

物联网内容搬运者 2022-04-22 加入

还未添加个人简介

评论

发布
暂无评论
IoT平台云端通用数据解析脚本实践——实践类_小程序_阿里云AIoT_InfoQ写作社区