如何将ThingsBoard设备遥测数据转发至对应关联多资产
多资产遥测转发实现方案(ThingsBoard)
前置准备
- 在ThingsBoard中创建对应冰箱资产(Fridge 22、Fridge 23、Fridge 44),记录每个资产的资产ID
- 在设备的自定义属性中添加端口-资产绑定关系,比如新增属性
portAssetMapping,值为JSON格式:{"port_1": "Fridge22的资产ID", "port_2": "Fridge23的资产ID", "port_3": "Fridge44的资产ID"}
方案一:设备端直接推送
基于单资产推送逻辑扩展,对每个端口的传感器数据单独调用API推送给对应资产:
- 设备采集数据后,按端口拆分数据(比如采集到
{"port_1_temp":2.5, "port_2_temp":3.1, "port_3_temp":2.8}) - 读取本地存储的端口-资产ID映射关系,对每个有效端口的数据调用ThingsBoard遥测API推送
- 示例伪代码:
import requests import time # 采集到的传感器数据 collected_data = {"port_1_temp": 2.5, "port_2_temp": 3.1, "port_3_temp": 2.8} # 端口-资产ID映射(可从设备属性同步) port_asset_map = {"port_1": "asset_id_22", "port_2": "asset_id_23", "port_3": "asset_id_44"} # 租户令牌(用于API鉴权) tenant_token = "YOUR_TENANT_ACCESS_TOKEN" tb_url = "http://your-thingsboard-instance/api" for port, asset_id in port_asset_map.items(): temp_key = f"{port}_temp" if temp_key in collected_data: # 构造遥测数据 payload = { "ts": int(time.time() * 1000), "values": {"temperature": collected_data[temp_key]} } # 调用API推送到对应资产 requests.post( f"{tb_url}/plugins/telemetry/ASSET/{asset_id}/timeseries/ANY", headers={"X-Authorization": f"Bearer {tenant_token}"}, json=payload )
方案二:ThingsBoard规则链处理(推荐)
将转发逻辑转移到平台侧,减少设备端负担:
- 设备按固定格式上传遥测,支持两种格式:
- 嵌套格式:
{"port_1": {"temperature":2.5}, "port_2": {"temperature":3.1}, "port_3": {"temperature":2.8}} - 扁平格式:
{"port_1_temp":2.5, "port_2_temp":3.1, "port_3_temp":2.8}
- 嵌套格式:
- 配置规则链流程:
- 消息节点:接收设备上传的遥测数据
- 脚本节点:编写JS脚本解析数据,结合设备属性中的绑定关系拆分出每个资产的遥测:
// 从设备属性获取端口-资产映射 var portAssetMap = metadata.deviceAttributes.portAssetMapping; var rawData = msg; var processedData = []; // 处理扁平格式数据 for (var key in rawData) { var port = key.split("_temp")[0]; if (portAssetMap[port]) { processedData.push({ assetId: portAssetMap[port], telemetry: {"temperature": rawData[key]} }); } } // 若用嵌套格式,替换为以下代码 // for (var port in rawData) { // if (portAssetMap[port]) { // processedData.push({ // assetId: portAssetMap[port], // telemetry: rawData[port] // }); // } // } return {msg: processedData, metadata: metadata, msgType: msgType}; - 拆分节点:将脚本输出的数组拆分为单个消息,每个消息对应一个资产的遥测
- 遥测转发节点:配置为将数据转发到
msg.assetId指定的资产,完成推送
注意事项
- 设备端推送场景需确保设备能访问ThingsBoard API,规则链场景需确保规则链有访问设备属性和资产的权限
- 令牌(租户令牌/资产令牌)需妥善保管,避免泄露
- 可在规则链中添加过滤节点,跳过无对应资产ID的端口数据,减少无效操作
内容的提问来源于stack exchange,提问作者betelgeuse
相关产品推荐
相关产品推荐

