写点什么

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

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

    阅读完需:约 5 分钟

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


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


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


1.明确二进制上报的 Topic 和数据格式规则

2.云端预先配置针对指定 Topic 的原始数据配置 JS 解析脚本

3.在脚本解析模拟数据输入,校验脚本业务逻辑正确后,提交到 IoT 云端

4.运行设备,指定 Topic 上报原始数据

5.云端日志服务查看数据解析过程


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


1.技术架构方案

私有协议数据转换链路:


消息转换前后变化:


2 云端开发

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



数据转换脚本

原始数据:0x035e8192fd0000000d0000001b00000a8c


数据业务格式:


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



完整脚本内容

/** * 将设备自定义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);
// 发布数据到topicclient.publish(topic, payload);
复制代码

4 运行日志

设备上报原始 hex 数据日志


往期推荐


1、39张传感器工作原理GIF图汇总

2、智能手持测温枪开发实践

3、JMeter压测MQTT服务性能实战

4、IoT物联网平台日志服务详解

5、自建MQTT集群迁移阿里云IoT实践

6、工业Modbus电力104规约接入IoT平台

7、设备免烧录三元组,即时注册解决方案

8、IoT+TSDB+Quick BI 搭建楼宇环境监控

9、JS全栈开发,构建智能家居小程序


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


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

用户头像

阿里云AIoT

关注

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

还未添加个人简介

评论

发布
暂无评论
设备上报二进制数据在 IoT 平台解析实践——实践类_小程序_阿里云AIoT_InfoQ写作社区