了解如何使用“检查关系”节点检查实体之间的关系。

用例

让我们假设以下用例:

  • 你有2台设备:
    • 带有Smoke DetectorSmoke Sensor当数据出现时将数据发送到ThingsBoard。
    • Fire Alarm System当有烟雾时提供火灾警报。

但是有多种实现此情况的方法,例如,可以使用将传入消息路由到一个或多个输出链的Switch节点来实现。
有关如何使用Switch节点的更多信息请在另请参见部分。

先决条件

在开始本教程之前,你需要阅读以下指南:

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

    添加设备并创建它们之间的关系

    在ThingsBoard中添加两个Device实体:

  • 烟雾探测器表示为设备。它的名称为Smoke Detector类型为 Smoke Sensor

  • 火警系统表示为设备。它的名称是Fire Alarm System类型是Fire Alarm Device

创建类型的关系用途:

  • 从烟雾探测器到火灾报警系统;

以下屏幕截图显示了如何执行此操作:
检查实体之间的关系 - 图1 检查实体之间的关系 - 图2
检查实体之间的关系 - 图3

消息流

在本节中我们将解释本教程中每个节点的用途:

  • 节点A:Check Relation
    • 使用关系的类型和方向检查从设备Fire Alarm System到消息Smoke Detector的始发者的关系。
  • 节点B:Change originator
    • 将始发者从设备Smoke Detector更改为相关设备Fire Alarm System,提交的消息将作为来自设备“火灾警报系统”的消息进行处理。
  • 节点C:Transformation Script.
    • 将原始消息转换为RPC请求消息。
  • 节点D:RPC call request
    • 获取消息payload,并将其作为响应发送到Fire Alarm System
  • 节点E:Filter Script
    • 检查传入消息的数据是否为smoke
  • 节点F:Clear alarm
    • 加载最新警报该警报具有为消息发起者Smoke Detector配置的警报类型,并清除警报(如果存在)。
  • 节点G:Create alarm
    • 尝试为消息发起方加载配置了警报类型的最新警报即Smoke Detector
  • 节点H:Rule Chain
    • 将传入消息转发到指定的规则链Related Fire Alarm System

配置规则链

在本教程中我们修改了Root Rule Chain并创建了Related Fire Alarm System
以下屏幕截图显示了以上规则链的外观:

  • Related Fire Alarm System:

检查实体之间的关系 - 图4

  • Root Rule Chain:

检查实体之间的关系 - 图5

下载json文件以获取Root Rule Chain。不要忘了将此规则链标记为root

检查实体之间的关系 - 图6
另外你需要创建Related Fire Alarm System规则链,也可以下载json文件

下一节将向你展示如何创建它。

创建新的规则链 (Related Fire Alarm System)

转到Rule Chains -> Add new Rule Chain
配置:

  • 名称 : Related Fire Alarm System

检查实体之间的关系 - 图7
创建新规则链,按点击Edit按钮并配置链。

添加所需的节点

在此规则链中你将创建4个节点如以下各节所述:

节点A: Check Relation
  • 添加Check Relation节点,并将其连接到Input节点。
    该节点将使用关系的类型和方向检查从设备Fire Alarm System到消息Smoke Detector的始发者的关系。 如果存在该关系,则消息将通过True链发送。
  • 填写下表中输入的数据字段:
    | Field | Input Data | | :—- | :—- | | Name | Check Relation | | Direction | To | | Type | Device | | Device | Fire Alarm System | | Relation type | Uses |

检查实体之间的关系 - 图8

节点B: Change Orignator
  • 添加Change Orignator节点并将其连接到关联类型为TrueCheck Relation节点。
    该节点会将始发者从设备Smoke Detector更改为相关的设备Fire Alarm System并且提交的消息将作为来自另一个实体Fire Alarm System的消息进行处理。
  • 填写下表中输入的数据字段:
    | Field | Input Data | | :—- | :—- | | Name | Change Originator | | Originator source | Related | | Direction | From | | Max relationship level | 1 | | Relation type | Uses | | Entity type | Device |

检查实体之间的关系 - 图9

节点C: Script Transformation
  • 添加Script Transformation节点并将其连接到关系类型为Success的更改Change Orignator节点。

该节点会将原始消息转换为RPC请求消息。
-RPC调用将具有2个属性:

  1. <table style="width: 25%">
  2. <thead>
  3. <tr>
  4. <td><b>Property</b></td><td><b>Value</b></td>
  5. </tr>
  6. </thead>
  7. <tbody>
  8. <tr>
  9. <td>method</td>
  10. <td>ON</td>
  11. </tr>
  12. <tr>
  13. <td>params</td>
  14. <td>{}</td>
  15. </tr>
  16. </tbody>
  17. </table>
  • 请添加以下脚本:

    1. var newMsg = {};
    2. if(msg.smoke == 'true'){
    3. newMsg.method = 'ON';
    4. }
    5. newMsg.params={};
    6. return {msg: newMsg, metadata: metadata, msgType: msgType};
  • 输入名称New RPC message

检查实体之间的关系 - 图10

节点D: RPC call request
  • 添加RPC call request节点并将其连接到关系类型为SuccessScript Transformation节点
    该节点获取消息payload并将其作为响应发送到消息始发者Fire Alarm System
  • 输入名称Fire Alarm System
  • 输入值为60秒。

检查实体之间的关系 - 图11
此规则链已准备就绪,我们应该保存它。

修改Root Rule Chain

初始规则链已通过添加以下节点进行了修改:

节E: Filter Script
  • 添加Filter Script节点并将其连接到关联类型为SuccessSave Timeseries节点。
    该节点将使用以下脚本检查传入消息的数据是否为smoke

    1. return msg.smoke== 'true';
  • 输入名称Smoke Alarm Filter

检查实体之间的关系 - 图12

节点F: Clear Alarm
  • 添加Clear Alarm节点并将其连接到关联类型为FalseFilter Script节点。
    此节点将为消息始发者Smoke Detector加载配置了警报类型的最新警报,并清除警报(如果存在)。
  • 输入名称Clear Smoke Alarm和警报类型Smoke Alarm

检查实体之间的关系 - 图13

节点G: Create alarm
  • 添加Create alarm节点,并将其连接到关联类型为TrueFilter Script节点。
    该节点尝试为消息发起方加载配置了警报类型的最新警报即Smoke Detector
  • 输入名称Create Smoke Alarm和警报类型Smoke Alarm

检查实体之间的关系 - 图14

节点H: Rule Chain
  • 添加Rule Chain节点并将其连接到关联类型为TrueFilter Script节点。
    该节点将传入消息转发到指定的规则链Related Fire Alarm System
  • 输入名称Related Fire Alarm System

检查实体之间的关系 - 图15
以下屏幕截图显示了最终的Root Rule Chain应该是什么样子:
检查实体之间的关系 - 图16

如何验证Rule Chain和Post telemetry

  • 使用以下JavaScript代码模拟Fire Alarm System设备。

    • FireAlarmEmulator.js.
    • 要运行脚本你需要执行以下步骤:
    • 复制Fire Alarm System设备访问令牌,然后将其粘贴到脚本中。
      你可以从设备页面复制访问令牌。
  • 使用Rest APIs遥测上传APIs从设备Smoke Detector发布遥测。

    1. curl -v -X POST -d '{"smoke":"true"}' http://demo.thingsboard.io/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
    2. **你需要将$ACCESS_TOKEN替换为实际的设备令牌**

检查实体之间的关系 - 图17检查实体之间的关系 - 图18
另外你可以:

  • 通过添加警报部件以可视化警报来配置仪表板。
  • 定义用于警报处理的其他逻辑例如发送电子邮件。

请参阅另请参阅部分下的第三和第四链接,以了解如何执行此操作。

另请参阅