在IoT场景中,很多传感器采集到的是私有协议二进制数据流,设备端又不具备转换成结构化JSON的能力,这时设备可以通过自定义Topic上报二进制数据,在IoT物联网平台支持云端配置解析脚本,动态转换成结构化的JSON数据。
完整端到端开发过程如下:
- 明确二进制上报Topic和数据规则
- 云端预先配置针对指定Topic的原始数据配置JS解析脚本
- 在脚本解析模拟数据输入,校验脚本业务逻辑正确后,提交到IoT云端
- 运行设备,指定Topic上报原始数据
- 云端日志服务查看数据解析过程
我们以手表为例,传感器上报hex进制数据,到IoT物联网平台,在云端解析,最终以结构化JSON流转到业务系统。
一、技术架构
设备端二进制数据在云端 IoT 平台转换链路,如下图:
消息转换前后变化:
二、IoT物联网平台 云端开发
创建产品和消息通信Topic选择:
原始数据:
0x035e8192fd0000000d0000001b00000a8c
数据业务格式:
在控制台产品详情>数据解析 配置并提交脚本
完整脚本内容如下:
function transformPayload(topic, rawData) {/*原始hex数据 : 0x035e8192fd0000000d0000001b00000a8c转换后JSON数据 : { "heartbeat": 15, "id": 1585549855, "steps": 2700, "speed": 56}*/ var jsonObj = {} if (topic.endsWith('/user/update')) { var uint8Array = new Uint8Array(rawData.length); for (var i = 0; i 在产品下注册设备,并获取设备身份三元组,如下:
三、设备端开发
我们通过Node.js程序模拟设备端上报二进制数据:
const mqtt = require('aliyun-iot-mqtt');//设备身份const options = { productKey: "a1kaK7XC8OB", deviceName: "BlXj1yasIJXmpKxymoUC", deviceSecret: "41798535d799760c8f67f02efd28b01c", regionId: "cn-shanghai"};//建立连接const client = mqtt.getAliyunIotMqttClient(options);// 消息Topic携带?_sn=default标识const topic = `/${options.productKey}/${options.deviceName}/user/update?_sn=default`;// 原始数据var payloadArray = [ 3, 94, 129, 169, 59, 0, 0, 0, 23, 0, 0, 0, 79, 0, 0, 30, 220 ];var payload = new Buffer(payloadArray);// 发布数据到topicclient.publish(topic, payload);
四、联机运行
设备运行后,我们可以在 IoT 控制台的日志服务里查看到完整的数据处理过程,包括设备上报的原始数据,以及脚本解析处理后的结构化JSON数据,如下图:
往期推荐
1、39张传感器工作原理GIF图汇总
2、智能手持测温枪开发实践
3、JMeter压测MQTT服务性能实战
4、IoT物联网平台日志服务详解
5、自建MQTT集群迁移阿里云IoT实践
6、工业Modbus电力104规约接入IoT平台
7、设备免烧录三元组,即时注册解决方案
8、IoT+TSDB+Quick BI 搭建楼宇环境监控
9、JS全栈开发,构建智能家居小程序