演示如何根据室内室外仓库温度计的读数,计算并展示室内外温度差。
案例
让我们假设你有一个有两个温度计的仓库:室内和室外。在本教程中,我们将配置ThingsBoard规则引擎,根据温度传感器的最新读数自动计算仓库内外温度差。
请注意,这只是一个简单的理论用例,以演示平台的能力。您可以将本教程用作更复杂场景的基础。
先决条件
我们假设您已完成以下指南并查看了以下文章:
- 入门指南。
-
模型定义
我们将创建一个名为“仓库A”,类型为“仓库”的资产。
创建俩个名为“内部温度计”和“外部温度计”的设备配置
我们将创建两个名为“内部温度计”和“外部温度计”的设备,并相应地使用“内部温度计”和“外部温度计”的设备类型。
资产“仓库A”和设备“内部温度计”/“外部温度计”之间添加关联。为了在规则链中将消息发起人从内外温度计更改到仓库A。
注:请查看文档,了解如何创建资产和关联。
遥测数据流
文章会解释每个节点的目的。将涉及三个规则链:
“温度计模拟器”-可选的规则链,用于模拟生成来自两个温度传感器的数据;
- “根规则链”-规则链,实际上将设备遥测保存到数据库中,并在重定向到“温度差”链之前按设备类型过滤消息
- “温度差”-实际计算仓库内外温度计之间温度差的规则链;
温度计模拟器-规则链
节点A和B:周期性生成随机温度(A:10秒/条,B:60秒/条),作为遥测消息传入根规则链。
节点A:室内温度计
节点B:室外温度计var msg = {
temperature: (20 + 5 * Math.random()).toFixed(1)
};
return {
msg: msg,
metadata: {
deviceType: "内部温度计"
},
msgType: "POST_TELEMETRY_REQUEST"
};
var msg = {
temperature: (18 + 5 * Math.random()).toFixed(1)
};
return {
msg: msg,
metadata: {
deviceType: "外部温度计"
},
msgType: "POST_TELEMETRY_REQUEST"
};
根规则链
温度差-规则链
节点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。之后提交的消息会作为资产消息处理。
节点I
将资产“仓库A”的遥测消息保存到数据库。节点J
将消息发起人的最新遥测数据加入元数据中
节点K
计算温度差var newMsg = {};
newMsg.deltaTemperature = parseFloat(Math.abs(metadata.indoorTemperature - metadata.outdoorTemperature).toFixed(2));
return {
msg: newMsg,
metadata: metadata,
msgType: msgType
};
节点L
保存温度差到数据库。此时可以查看资产“仓库A”的最新遥测数据,分别由室内室外和温度差三个字段。
仪表盘展示