快捷搜索:  汽车  科技

iot 数据如何处理(设备上报二进制数据在)

iot 数据如何处理(设备上报二进制数据在)数据业务格式:数据转换脚本原始数据:0x035e8192fd0000000d0000001b00000a8c私有协议数据转换链路:消息转换前后变化:产品定义和消息通信Topic选择

简介: 设备上报二进制数据在 IoT 平台解析实践

设备上报二进制数据在 IoT 平台解析实践

iot 数据如何处理(设备上报二进制数据在)(1)


在IoT场景中,很多传感器采集到的是私有协议二进制数据流,设备端又不具备转换成结构化json的能力,这时设备可以通过自定义Topic上报二进制数据,在IoT物联网平台支持云端配置解析脚本,动态转换成结构化的JSON数据。

完整端到端开发过程如下:

  1. 明确二进制上报的Topic和数据格式规则
  2. 云端预先配置针对指定Topic的原始数据配置JS解析脚本
  3. 在脚本解析模拟数据输入,校验脚本业务逻辑正确后,提交到IoT云端
  4. 运行设备,指定Topic上报原始数据
  5. 云端日志服务查看数据解析过程

我们以手表为例,传感器上报hex进制数据,到IoT物联网平台,在云端解析,最终以结构化JSON流转到业务系统。

1.技术架构方案

私有协议数据转换链路:

iot 数据如何处理(设备上报二进制数据在)(2)

消息转换前后变化:

iot 数据如何处理(设备上报二进制数据在)(3)

2云端开发

产品定义和消息通信Topic选择

iot 数据如何处理(设备上报二进制数据在)(4)

数据转换脚本
原始数据:
0x035e8192fd0000000d0000001b00000a8c

数据业务格式:

iot 数据如何处理(设备上报二进制数据在)(5)


云端产品数据解析脚本配置

iot 数据如何处理(设备上报二进制数据在)(6)

完整脚本内容

/** * 将设备自定义topic数据转换为json格式数据 设备上报数据到物联网平台时调用 * 入参:topic 字符串,设备上报消息的topic * 入参:rawData byte[]数组 不能为空 * 出参:jsonObj JSON对象 不能为空 */ function transformPayload(topic rawData) { var jsonObj = {} /* 原始hex数据 : 0x035e8192fd0000000d0000001b00000a8c 转换后JSON数据 : { "heartbeat": 15 "id": 1585549855 "steps": 2700 "speed": 56 } */ if (topic.endsWith('/user/update')) { var uint8Array = new Uint8Array(rawData.length); for (var i = 0; i < rawData.length; i ) { uint8Array[i] = rawData[i] & 0xff; } var dataView = new DataView(uint8Array.buffer 0); var fHead = uint8Array[0]; // command if (fHead == 0x03) { // jsonObj['id'] = dataView.getInt32(1); //心跳 jsonObj['heartbeat'] = dataView.getInt32(5); //速度 jsonObj['speed'] = dataView.getInt32(9); //总步数 jsonObj['steps'] = dataView.getInt32(13); } } return jsonObj; }3设备端开发

设备上报hex原始数据的代码片段:

const mqtt = require('aliyun-iot-mqtt'); //设备身份 const options = { productKey: "a1kaK7XC8oB" deviceName: "BlXj1yasMJXmpKxymoUC" deviceSecret: "41798535d799c60c8f67f02efd28b01c" 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); // 发布数据到topic client.publish(topic payload); 4运行日志

设备上报原始hex数据日志

iot 数据如何处理(设备上报二进制数据在)(7)

猜您喜欢: