天天看點

裝置上報二進制資料在 IoT 平台解析實踐裝置上報二進制資料在 IoT 平台解析實踐

裝置上報二進制資料在 IoT 平台解析實踐

裝置上報二進制資料在 IoT 平台解析實踐裝置上報二進制資料在 IoT 平台解析實踐

在IoT場景中,很多傳感器采集到的是私有協定二進制資料流,裝置端又不具備轉換成結構化JSON的能力,這時裝置可以通過自定義Topic上報二進制資料,在IoT物聯網平台支援雲端配置解析腳本,動态轉換成結構化的JSON資料。

完整端到端開發過程如下:

  1. 明确二進制上報的Topic和資料格式規則
  2. 雲端預先配置針對指定Topic的原始資料配置JS解析腳本
  3. 在腳本解析模拟資料輸入,校驗腳本業務邏輯正确後,送出到IoT雲端
  4. 運作裝置,指定Topic上報原始資料
  5. 雲端日志服務檢視資料解析過程

我們以手表為例,傳感器上報hex進制資料,到IoT物聯網平台,在雲端解析,最終以結構化JSON流轉到業務系統。

1.技術架構方案

私有協定資料轉換鍊路:

裝置上報二進制資料在 IoT 平台解析實踐裝置上報二進制資料在 IoT 平台解析實踐

消息轉換前後變化:

裝置上報二進制資料在 IoT 平台解析實踐裝置上報二進制資料在 IoT 平台解析實踐

2雲端開發

産品定義和消息通信Topic選擇

裝置上報二進制資料在 IoT 平台解析實踐裝置上報二進制資料在 IoT 平台解析實踐

資料轉換腳本

原始資料:

0x035e8192fd0000000d0000001b00000a8c

資料業務格式:

裝置上報二進制資料在 IoT 平台解析實踐裝置上報二進制資料在 IoT 平台解析實踐

雲端産品資料解析腳本配置

裝置上報二進制資料在 IoT 平台解析實踐裝置上報二進制資料在 IoT 平台解析實踐

完整腳本内容

/**
 * 将裝置自定義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 平台解析實踐裝置上報二進制資料在 IoT 平台解析實踐

往期推薦

[

裝置上報二進制資料在 IoT 平台解析實踐裝置上報二進制資料在 IoT 平台解析實踐
1、39張傳感器工作原理GIF圖

彙總

2、智能手持測溫槍開發實踐 3、JMeter壓測MQTT服務性能實戰 4、IoT物聯網平台日志服務詳解 5、自建MQTT叢集遷移阿裡雲IoT實踐 6、工業Modbus電力104規約接入IoT平台 7、裝置免燒錄三元組,即時注冊解決方案 8、IoT+TSDB+Quick BI 搭建樓宇環境監控 9、JS全棧開發,建構智能家居小程式

繼續閱讀