借助IoT平台云端数据解析能力,转换Modbus,电力协议,hex数据

 阿里云安全     |      2020-04-01 00:00:00

1.整体技术方案

在IoT场景中,很多传感器采集到的都是二进制数据,或者私有协议格式数据流,设备端又不具备转换成结构化JSON的能力,这时候我们可以借助IoT物联网平台云端自定义数据解析能力,转换Modbus,电力协议,hex数据,私有协议为结构化的JSON,再流转到业务系统。

数据流转链路

image.png

消息变化

image.png

2.物联网平台开发

消息通信Topic

image.png

hex转换脚本配置


原始数据:0x035e8192fd0000000d0000001b00000a8c
数据业务格式:
image.png
脚本配置
image.png


完整脚本内容

/**
 * 将设备自定义topic数据转换为json格式数据, 设备上报数据到物联网平台时调用
 * 入参:topic   字符串,设备上报消息的topic     
 * 入参:rawData byte[]数组                  不能为空
 * 出参:jsonObj JSON对象                    不能为空
 */
function transformPayload(topic, rawData) {
    var jsonObj = {}
    
    //原始hex数据 : 0x035e8192fd0000000d0000001b00000a8c
/*
{
  "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原始数据

// 消息Topic携带?_sn=default标识
const topic = '/aiDerw9823s/dn308/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数据

image.png

脚本转换后日志

image.png

业务消息报文日志

消息详情(topic和payload)
image.png