You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ThingsBoard设备遥测数据转发至对应关联多资产

多资产遥测转发实现方案(ThingsBoard)

前置准备

  1. 在ThingsBoard中创建对应冰箱资产(Fridge 22、Fridge 23、Fridge 44),记录每个资产的资产ID
  2. 在设备的自定义属性中添加端口-资产绑定关系,比如新增属性portAssetMapping,值为JSON格式:
    {"port_1": "Fridge22的资产ID", "port_2": "Fridge23的资产ID", "port_3": "Fridge44的资产ID"}
    

方案一:设备端直接推送

基于单资产推送逻辑扩展,对每个端口的传感器数据单独调用API推送给对应资产:

  1. 设备采集数据后,按端口拆分数据(比如采集到{"port_1_temp":2.5, "port_2_temp":3.1, "port_3_temp":2.8})
  2. 读取本地存储的端口-资产ID映射关系,对每个有效端口的数据调用ThingsBoard遥测API推送
  3. 示例伪代码:
    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规则链处理(推荐)

将转发逻辑转移到平台侧,减少设备端负担:

  1. 设备按固定格式上传遥测,支持两种格式:
    • 嵌套格式:{"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}
  2. 配置规则链流程:
    • 消息节点:接收设备上传的遥测数据
    • 脚本节点:编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:05:03