本文介紹Python語言的自定義Topic消息解析腳本模板和示例。
腳本模板
SELF_DEFINE_TOPIC_UPDATE_FLAG = '/user/update' #自定義Topic:/user/update。
SELF_DEFINE_TOPIC_ERROR_FLAG = '/user/update/error' #自定義Topic:/user/update/error。
# 將設備自定義Topic消息數據轉換為JSON格式數據,設備上報數據到物聯網平臺時調用。
# 入參: topic,字符串,設備上報消息的Topic。
# 入參: rawData,列表,列表元素取值為int類型,不能為空。
# 出參: jsonObj,字典。
def transform_payload(topic, rawData):
jsonObj = {}
return jsonObj
腳本示例
說明 以下示例腳本僅用于解析自定義Topic消息。如果產品的數據格式為透傳/自定義,還需編寫物模型消息解析腳本。物模型消息解析腳本編寫指導,請參見提交物模型消息解析腳本。
有關透傳/自定義說明,請參見創建產品。
# coding=UTF-8
SELF_DEFINE_TOPIC_UPDATE_FLAG = '/user/update' #自定義Topic:/user/update。
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"
# }
def transform_payload(topic, bytes):
uint8Array = []
for byteValue in bytes:
uint8Array.append(byteValue & 0xff)
jsonMap = {}
if SELF_DEFINE_TOPIC_ERROR_FLAG in topic:
jsonMap['topic'] = topic
jsonMap['errorCode'] = bytes_to_int(uint8Array[0:1])
elif SELF_DEFINE_TOPIC_UPDATE_FLAG in topic:
jsonMap['topic'] = topic
jsonMap['prop_int16'] = bytes_to_int(uint8Array[5:7])
jsonMap['prop_bool'] = bytes_to_int(uint8Array[7: 8])
jsonMap['prop_float'] = bytes_to_int(uint8Array[8:])
return jsonMap
# byte數組轉換為整型。
def bytes_to_int(bytes):
data = ['%02X' % i for i in bytes]
return int(''.join(data), 16)