本文提供JavaScript語言的自定義Topic消息解析腳本模板和示例。
腳本模板
var SELF_DEFINE_TOPIC_UPDATE_FLAG = '/user/update' //自定義Topic:/user/update。
var SELF_DEFINE_TOPIC_ERROR_FLAG = '/user/update/error' //自定義Topic:/user/update/error。
/**
* 將設備自定義Topic消息數據轉換為JSON格式數據,設備上報數據到物聯網平臺時調用。
* 入參:topic,字符串,設備上報消息的Topic。
* 入參:rawData,byte[]數組,不能為空。
* 出參:jsonObj,對象,不能為空。
*/
function transformPayload(topic, rawData) {
var jsonObj = {};
return jsonObj;
}
示例腳本
說明 以下示例腳本僅用于解析自定義Topic消息。如果產品的數據格式為透傳/自定義,還需編寫物模型消息解析腳本。物模型消息解析腳本編寫指導,請參見提交物模型消息解析腳本。
有關透傳/自定義說明,請參見創建產品。
var SELF_DEFINE_TOPIC_UPDATE_FLAG = '/user/update' //自定義Topic:/user/update。
var SELF_DEFINE_TOPIC_ERROR_FLAG = '/user/update/error' //自定義Topic:/user/update/error。
/*
示例數據:
自定義Topic:
/user/update,上報數據。
輸入參數:
topic: /${productKey}/${deviceName}/user/update
bytes: 0x000000000100320100000000
輸出參數:
{
"prop_float": 0,
"prop_int16": 50,
"prop_bool": 1,
"topic": "/${productKey}/${deviceName}/user/update"
}
*/
function transformPayload(topic, bytes) {
var uint8Array = new Uint8Array(bytes.length);
for (var i = 0; i < bytes.length; i++) {
uint8Array[i] = bytes[i] & 0xff;
}
var dataView = new DataView(uint8Array.buffer, 0);
var jsonMap = {};
if(topic.includes(SELF_DEFINE_TOPIC_ERROR_FLAG)) {
jsonMap['topic'] = topic;
jsonMap['errorCode'] = dataView.getInt8(0)
} else if (topic.includes(SELF_DEFINE_TOPIC_UPDATE_FLAG)) {
jsonMap['topic'] = topic;
jsonMap['prop_int16'] = dataView.getInt16(5);
jsonMap['prop_bool'] = uint8Array[7];
jsonMap['prop_float'] = dataView.getFloat32(8);
}
return jsonMap;
}