关于传感器:设备上报二进制数据在-IoT-平台解析实践实践类

设施上报二进制数据在 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);

// 公布数据到topic
client.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/produc…

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理