Thingsboard 规则链实现聚合统计遥测数据上一次和本次差值

本文介绍如何在ThingsBoard中实现电量数据的差值计算,包括通过规则链获取上一次电量值并计算差值的方法,最终实现区域电量的聚合查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到一个需求,按时间段统计一片区域的插座电量。

看了下Thingsboard聚合查询函数,只支持 MIN, MAX, AVG, SUM, COUNT, NONE; 蛋疼了,没有差值

统计这块还是Opentsdb好用,几十个的聚合函数随便玩,不过Thingsboard规则链可以无缝和Opentsdb集成,只要服务器够,其实也还好。

不多说,记录下差值计算的规则链写法,官网也有完整文档。

https://thingsboard.io/docs/user-guide/rule-engine-2-0/tutorials/telemetry-delta-validation/

 

首先判断插座的遥测数据是否包含电量,没包含直接存储,(比较简单截图略过)。

下来获取上一次电量的值,以便取差值,首先tb支持取一段时间,某一个具体指标上报的第一个、最后一个、以及全部(max 1000)的数据,

数据拿到后,tb会把数据写入元数据中。方便后续计算差值

然后计算取个差值。存入上级资产列表。

最后使用之前帖子写的聚合查询功能实现,完成区域聚合查询即可。资产就是插座所在区域。

从tb和Api检查下数据,功能ok

<think>嗯,用户想在ThingsBoard里合并多个设备的最新遥测数据并进行计算。首先,我需要回忆一下ThingsBoard的相关功能。之前看到引用里提到,可以通过资产关联设备,然后在资产上处理数据。比如,创建两个温度设备关联到同一个资产,保存数据后计算温差。这应该是一个常见的方法。 用户的问题涉及到数据合并计算,可能需要用到规则链来处理。记得规则链中的聚合节点或者脚本节点可以用来处理数据。比如,引用[4]里提到使用规则链的script节点过滤数据,所以可能类似的节点可以用来合并数据。 另外,数据查询API可能也是关键。引用[2]提到用户指南数据查询API的地址,可能需要用REST API获取多个设备的最新数据,然后在服务器端进行计算。或者,使用遥测订阅功能实时获取数据。 步骤的话,可能需要先创建资产,关联设备。然后通过规则链来处理数据。比如,当设备上报数据时,规则链数据转发到资产属性,然后计算差值。或者,使用聚合节点将多个设备的数据合并,再计算温差。 还需要考虑如何保存计算结果。引用[3]提到保存温度差到资产的遥测数据,这样可以在仪表盘展示。所以可能需要将计算结果写入到资产的遥测中。 可能的问题点:如何确保同时获取两个设备的最新数据?可能需要时间窗口的聚合,或者在脚本节点中缓存数据,当两个数据都到达时进行计算。或者,使用最新数据查询API分别获取设备的数据,再进行计算。 另外,用户可能需要具体的配置步骤,比如创建资产、关联设备、配置规则链中的节点连接,比如Script节点编写JS代码来合并数据计算。引用[3]的案例中,资产有三个字段,说明可能需要在资产上保存合并后的数据。 总结步骤应该是:1. 创建资产并关联设备;2. 配置规则链,使用相关节点(如聚合、脚本)处理数据;3. 在规则链中计算差值并保存到资产;4. 在仪表盘展示结果。可能需要参考用户指南中的遥测处理部分,或者API文档来获取数据。</think>在ThingsBoard中合并多个设备的最新遥测数据并进行计算,可通过以下步骤实现: ### 一、数据关联与存储 1. **创建资产关联设备** 在资产详情页的"管理关联"中,将需要合并数据的设备(如温度传感器A/B)与同一资产(如仓库A)建立关联关系[^1][^3] 2. **配置规则链处理数据** 使用`聚合`节点或`脚本`节点实现数据合并: ```javascript // 在Script节点中处理数据关联 var deviceType = metadata.deviceType; if(deviceType === '室内温度计'){ var indoorTemp = msg.temperature; metadata.assetAttributes.indoorTemp = indoorTemp; } else if(deviceType === '室外温度计'){ var outdoorTemp = msg.temperature; metadata.assetAttributes.outdoorTemp = outdoorTemp; } ``` 通过`关联属性集`节点将处理后的数据写入资产属性[^4] ### 二、温差计算实现 ```python # 通过REST API获取最新数据(示例) GET http://{host}/api/plugins/telemetry/DEVICE/{deviceId}/values/timeseries Authorization: Bearer {JWT_TOKEN} ``` 使用`计算差值`节点处理实时数据流: ```javascript // 在规则链Script节点中计算温差 var delta = metadata.assetAttributes.indoorTemp - metadata.assetAttributes.outdoorTemp; msg.tempDelta = delta; return {msg: msg, metadata: metadata, msgType: msgType}; ``` 通过`保存遥测数据`节点将结果写入资产遥测 ### 三、数据可视化配置 1. 在资产详情页查看合并后的三个字段:`indoorTemp`, `outdoorTemp`, `tempDelta` 2. 创建仪表盘时选择`最新值`数据源类型,绑定资产实体即可展示合并计算结果
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值