You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将设备属性与遥测数据推送至关联的ThingsBoard资产?

解决设备属性/遥测聚合后同步至关联资产的简便方法

嘿,我刚好之前处理过类似的需求,给你几个不用复杂API就能搞定的简便思路:

1. 用规则链(Rule Chains)实现自动同步(最推荐)

这是ThingsBoard官方最推崇的自动化方式,完全不用自己写外部服务:

  • 首先创建一个新的规则链,添加**“遥测/属性上报”触发节点**,监听目标设备的上报事件;
  • 接着添加**“脚本转换节点”**,在这里处理聚合逻辑——比如计算最近N条数据的平均值、总和,脚本用JavaScript写就行,举个计算温度平均值的例子:
    // 假设上报的遥测里有temperature数组,或者从历史数据中拉取
    var tempValues = msg.temperature;
    var avgTemp = tempValues.reduce((total, val) => total + val, 0) / tempValues.length;
    // 输出要同步到资产的数据
    return {
        msg: {averageTemperature: avgTemp},
        metadata: metadata,
        msgType: "POST_TELEMETRY_REQUEST"
    };
    
  • 最后添加**“更新资产遥测/属性节点”**,配置里选择“通过关联关系获取资产”,指定设备和资产的关联类型(比如Contains或者你自定义的关系),这样就能自动把聚合后的数据推送到关联资产了。

如果是需要基于时间窗口的聚合(比如最近1小时的总和),可以用规则链里的**“时间窗口聚合节点”**,直接选择avg、sum等内置聚合函数,不用自己写脚本,更省心。

2. 结合关联关系API做批量/手动同步

如果需要手动触发或者批量处理,可以用ThingsBoard的REST API配合关联关系查询:

  • 先通过接口获取设备关联的资产ID:
    GET /api/relation?fromId={你的设备ID}&fromType=DEVICE&relationType=Contains
    
  • 然后用资产ID调用遥测/属性更新接口,把你提前计算好的聚合数据推过去:
    // 推送遥测
    POST /api/plugins/telemetry/{资产ID}/timeseries
    Body: {"temperatureSum": 250}
    
    // 更新属性
    POST /api/entities/{资产ID}/attributes
    Body: {"sharedAttributes": {"dailyEnergyAvg": 12.5}}
    
    聚合逻辑可以在你的服务端实现,比如调用ThingsBoard的历史数据查询接口拉取设备数据,计算后再推给资产。

3. 用服务器端属性实现实时动态计算(无需持久化)

如果只是需要在资产页面实时展示聚合值,不需要把数据存到资产的遥测/属性里,可以用资产的服务器端属性

  • 给目标资产添加服务器端属性,用ThingsBoard的表达式语言写聚合逻辑,比如:
    avg(telemetry.temperature, device=Contains, duration=5m)
    
    这个表达式会自动计算所有关联设备最近5分钟的温度平均值,在资产详情页实时更新,完全不用手动推送数据,适合实时监控场景。

内容的提问来源于stack exchange,提问作者Guilherme Lancia

火山引擎 最新活动