了解如何配置Rule Engine以根据来自设备的传入数据创建和清除警报。

用例

假设你的设备正在使用DHT22传感器来收集温度读数并将其推送到ThingsBoard。
DHT22传感器适用于-40至80°C的温度读数。如果温度超出范围,我们希望生成警报。
在本教程中,我们将配置ThingsBoard规则引擎以

  • 如果温度> 80°C或温度<-40°C创建或更新现有警报
  • 如果温度> -40°C且<80°C清除警报

    先决条件

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

  • 入门指南

  • 规则引擎概述

    添加设备

    在ThingsBoard中添加设备实体。它的名称为Thermostat Home其类型为Thermostat
    创建和清除警报 - 图1

消息流

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

  • 节点A:Filter Script节点。
    • 通过温度阈值检查脚本并验证节:“如果温度在预期的间隔内则脚本将返回False否则将返回True”。
  • 节点B:Create alarm节点。
    • 如果发布的温度不在预期的时间范围内(过滤器脚本节点返回True)则创建或更新警报。
  • 节点C:Clear alarm节点。
    • 如果发布的温度在预期的时间范围内(脚本节点返回False)则清除警报(如果存在)。
  • 节点D:Rule Chain节点。
    • 将传入消息转发到指定的规则链Create & Clear Alarms

配置规则链

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

  • 创建和清除警报:

创建和清除警报 - 图2

  • 根规则链:

创建和清除警报 - 图3

下载附件json文件以获取Create & Clear Alarms规则链。 如上图所示在根规则链中创建节点D,以将遥测转发到导入的规则链。

下一节将向你展示如何从头开始创建此规则链。

创建新的规则链(创建并清除警报

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

  • 名称 : Create & Clear Alarms

创建和清除警报 - 图4
创建新规则链。点击Edit按钮进行配置。

添加所需的节点

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

节点A: Filter Script
  • 添加Filter Script节点并将其连接到关联类型为SuccessInput节点。
    此节点将使用以下脚本验证:“温度是否在预期间隔内”:

    1. return msg.temperature < -40 || msg.temperature > 80;

    如果温度在预期的时间间隔内,则脚本将返回False,否则将返回True。

  • 输入名称Under Threshold

创建和清除警报 - 图5

节点B: Create alarm
  • 添加Create alarm节点,并将其连接到关联类型为TrueFilter Script节点。
    如果发布的温度不在预期范围内(过滤器脚本节点返回True)则此节点将为消息发起方加载配置了警报类型的最新警报,即Thermostat Home

  • 输入名称Create alarm并在警报类型中输入Critical Temperature

创建和清除警报 - 图6

节点C: Clear Alarm
  • 添加Clear Alarm节点并将其连接到关联类型为FalseFilter Script节点。
    此节点将为消息始发者Thermostat Home
    加载配置了警报类型的最新警报,如果发布的温度在预期范围内(脚本节点返回False)则清除该警报(如果存在)。
  • 输入名称Clear Alarm并在警报类型中输入Critical Temperature

创建和清除警报 - 图7

修改根规则链

以下屏幕截图显示了初始“根规则链”。
创建和清除警报 - 图8
初始规则链已通过添加以下节点进行了修改:

节点D: 规则链
  • 添加Rule Chain节点并将其连接到关联类型为TrueFilter Script节点。
    节点将传入消息转发到指定的规则链Create & Clear Alarms
  • 输入名称Create & Clear Alarms.

创建和清除警报 - 图9

以下屏幕截图显示了最终的Root Rule Chain应该是什么样子:
创建和清除警报 - 图10

如何验证规则链和遥测

对于发布设备遥测我们将使用Rest API遥测上传API。为此,我们将需要复制设备Thermometer的访问令牌。
创建和清除警报 - 图11

  1. **你需要将$ACCESS_TOKEN替换为实际的设备令牌**

点击Clear Alarm和Create Alarm节点中的调试模式按钮以验证结果。
创建和清除警报 - 图12
创建和清除警报 - 图13
发布temperature = 99后会创建警报:

  1. curl -v -X POST -d '{"temperature":99}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

创建和清除警报 - 图14
发布temperature = 180后更新警报:

  1. curl -v -X POST -d '{"temperature":180}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

创建和清除警报 - 图15
发布temperature = 30后会清除警报:

  1. curl -v -X POST -d '{"temperature":30}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"

创建和清除警报 - 图16

另外你可以:

  • 在Create and Clear Alarm节点中配置Alarm Details功能
  • 通过添加警报部件以可视化警报来配置仪表板。
  • 定义用于警报处理的其他逻辑例如:发送电子邮件。

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