演示如何根据室内室外仓库温度计的读数,计算并展示室内外温度差。

案例

让我们假设你有一个有两个温度计的仓库:室内和室外。在本教程中,我们将配置ThingsBoard规则引擎,根据温度传感器的最新读数自动计算仓库内外温度差。
请注意,这只是一个简单的理论用例,以演示平台的能力。您可以将本教程用作更复杂场景的基础。

先决条件

我们假设您已完成以下指南并查看了以下文章:

  • 入门指南。
  • 规则引擎概述

    模型定义

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

    遥测数据流

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

  • “温度计模拟器”-可选的规则链,用于模拟生成来自两个温度传感器的数据;

  • “根规则链”-规则链,实际上将设备遥测保存到数据库中,并在重定向到“温度差”链之前按设备类型过滤消息
  • “温度差”-实际计算仓库内外温度计之间温度差的规则链;

    温度计模拟器-规则链温度计模拟器规则链.png

    节点A和B:周期性生成随机温度(A:10秒/条,B:60秒/条),作为遥测消息传入根规则链。
    节点A:室内温度计
    1. var msg = {
    2. temperature: (20 + 5 * Math.random()).toFixed(1)
    3. };
    4. return {
    5. msg: msg,
    6. metadata: {
    7. deviceType: "内部温度计"
    8. },
    9. msgType: "POST_TELEMETRY_REQUEST"
    10. };
    节点B:室外温度计
    1. var msg = {
    2. temperature: (18 + 5 * Math.random()).toFixed(1)
    3. };
    4. return {
    5. msg: msg,
    6. metadata: {
    7. deviceType: "外部温度计"
    8. },
    9. msgType: "POST_TELEMETRY_REQUEST"
    10. };
    室内设备模拟.png室外模拟.png

    根规则链

    根规则链.png

    温度差-规则链

    温度差规则链.png

    节点E

    根据传入消息的deviceType将消息分发到indoor outdoor俩条链路
    1. function nextRelation(metadata, msg) {
    2. if (metadata.deviceType === '内部温度计') {
    3. return ['indoor'];
    4. } else if (metadata.deviceType ===
    5. '外部温度计')
    6. return ['outdoor'];
    7. }
    8. return nextRelation(metadata, msg);

    节点F/G

    将温度 temperature字段分别转换为outdoorTemperature/indoorTemperature
    1. //节点F
    2. var newMsg = {};
    3. newMsg.outdoorTemperature = msg.temperature;
    4. return {
    5. msg: newMsg,
    6. metadata: metadata,
    7. msgType: msgType
    8. };
    1. //节点G
    2. var newMsg = {};
    3. newMsg.indoorTemperature = msg.temperature;
    4. return {
    5. msg: newMsg,
    6. metadata: metadata,
    7. msgType: msgType
    8. };

    节点H

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

    节点I

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

    节点J

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

    节点K

    计算温度差
    1. var newMsg = {};
    2. newMsg.deltaTemperature = parseFloat(Math.abs(metadata.indoorTemperature - metadata.outdoorTemperature).toFixed(2));
    3. return {
    4. msg: newMsg,
    5. metadata: metadata,
    6. msgType: msgType
    7. };

    节点L

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

    仪表盘展示

    image.png
    点赞按钮.gif