ThingsBoard 多个设备的最新遥测数据合并计算案例


演示如何根据室内室外仓库温度计的读数,计算并展示室内外温度差。 # 案例 让我们假设你有一个有两个温度计的仓库:室内和室外。在本教程中,我们将配置ThingsBoard规则引擎,根据温度传感器的最新读数自动计算仓库内外温度差。
请注意,这只是一个简单的理论用例,以演示平台的能力。您可以将本教程用作更复杂场景的基础。 ## 先决条件 我们假设您已完成以下指南并查看了以下文章:

模型定义

我们将创建一个名为“仓库A”,类型为“仓库”的资产。
资产-仓库.png
创建俩个名为“内部温度计”和“外部温度计”的设备配置
image.png
我们将创建两个名为“内部温度计”和“外部温度计”的设备,并相应地使用“内部温度计”和“外部温度计”的设备类型。
image.pngimage.png
资产“仓库A”和设备“内部温度计”/“外部温度计”之间添加关联。为了在规则链中将消息发起人从内外温度计更改到仓库A。
:请查看文档,了解如何创建资产和关联。
image.pngimage.png

遥测数据流

文章会解释每个节点的目的。将涉及三个规则链:

  • “温度计模拟器”-可选的规则链,用于模拟生成来自两个温度传感器的数据;
  • “根规则链”-规则链,实际上将设备遥测保存到数据库中,并在重定向到“温度差”链之前按设备类型过滤消息
  • “温度差”-实际计算仓库内外温度计之间温度差的规则链;

温度计模拟器-规则链

温度计模拟器规则链.png
**节点A和B:**周期性生成随机温度(A:10秒/条,B:60秒/条),作为遥测消息传入根规则链。
节点A:室内温度计

var msg = {
  temperature: (20 + 5 * Math.random()).toFixed(1)
};    
return {
  msg: msg,
  metadata: {
    deviceType: "内部温度计"
  },
  msgType: "POST_TELEMETRY_REQUEST"
};

节点B:室外温度计

var msg = {
  temperature: (18 + 5 * Math.random()).toFixed(1)
};
return {
  msg: msg,
  metadata: {
    deviceType: "外部温度计"
  },
  msgType: "POST_TELEMETRY_REQUEST"
};

室内设备模拟.png室外模拟.png

根规则链

根规则链.png

温度差-规则链

温度差规则链.png

节点E

根据传入消息的deviceType将消息分发到indoor outdoor俩条链路

function nextRelation(metadata, msg) {
    if (metadata.deviceType === '内部温度计') {
        return ['indoor'];
    } else if (metadata.deviceType ===
        '外部温度计')
        return ['outdoor'];
}
return nextRelation(metadata, msg);

节点F/G

将温度 temperature字段分别转换为outdoorTemperature/indoorTemperature

//节点F
var newMsg = {};
newMsg.outdoorTemperature = msg.temperature;
return {
    msg: newMsg,
    metadata: metadata,
    msgType: msgType
};
//节点G
var newMsg = {};
newMsg.indoorTemperature = msg.temperature;
return {
    msg: newMsg,
    metadata: metadata,
    msgType: msgType
};

节点H

把消息发起人从俩个温度计设备改为仓库A。之后提交的消息会作为资产消息处理。
室内外温度到仓库A.png

节点I

将资产“仓库A”的遥测消息保存到数据库。

节点J

将消息发起人的最新遥测数据加入元数据中
遥测加入元数据.png

节点K

计算温度差

var newMsg = {};
newMsg.deltaTemperature = parseFloat(Math.abs(metadata.indoorTemperature - metadata.outdoorTemperature).toFixed(2));
return {
  msg: newMsg,
  metadata: metadata,
  msgType: msgType
};

节点L

保存温度差到数据库。此时可以查看资产“仓库A”的最新遥测数据,分别由室内室外和温度差三个字段。
image.png

仪表盘展示

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fool_dawei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值