了解如何配置Rule Engine以根据来自设备的传入数据创建和清除警报。
用例
假设你的设备正在使用DHT22传感器来收集温度读数并将其推送到ThingsBoard。
DHT22传感器适用于-40至80°C的温度读数。如果温度超出范围,我们希望生成警报。
在本教程中,我们将配置ThingsBoard规则引擎以
- 如果温度> 80°C或温度<-40°C创建或更新现有警报
-
先决条件
我们假设你已完成以下指南并查看了以下文章:
入门指南。
- 规则引擎概述。
添加设备
在ThingsBoard中添加设备实体。它的名称为Thermostat Home其类型为Thermostat。
消息流
在本节中,我们将解释本教程中每个节点的用途:
- 节点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
以下屏幕截图显示了以上规则链的外观:
- 创建和清除警报:
- 根规则链:
下载附件json文件以获取Create & Clear Alarms规则链。 如上图所示在根规则链中创建节点D,以将遥测转发到导入的规则链。
创建新的规则链(创建并清除警报)
转到Rule Chains -> Add new Rule Chain
配置:
- 名称 : Create & Clear Alarms
添加所需的节点
节点A: Filter Script
添加Filter Script节点并将其连接到关联类型为Success的Input节点。
此节点将使用以下脚本验证:“温度是否在预期间隔内”:return msg.temperature < -40 || msg.temperature > 80;
如果温度在预期的时间间隔内,则脚本将返回False,否则将返回True。
输入名称Under Threshold。
节点B: Create alarm
- 添加Create alarm节点,并将其连接到关联类型为True的Filter Script节点。
如果发布的温度不在预期范围内(过滤器脚本节点返回True)则此节点将为消息发起方加载配置了警报类型的最新警报,即Thermostat Home
。 - 输入名称Create alarm并在警报类型中输入Critical Temperature。
节点C: Clear Alarm
- 添加Clear Alarm节点并将其连接到关联类型为False的Filter Script节点。
此节点将为消息始发者Thermostat Home
加载配置了警报类型的最新警报,如果发布的温度在预期范围内(脚本节点返回False)则清除该警报(如果存在)。 - 输入名称Clear Alarm并在警报类型中输入Critical Temperature。
修改根规则链
以下屏幕截图显示了初始“根规则链”。
初始规则链已通过添加以下节点进行了修改:
节点D: 规则链
- 添加Rule Chain节点并将其连接到关联类型为True的Filter Script节点。
节点将传入消息转发到指定的规则链Create & Clear Alarms。 - 输入名称Create & Clear Alarms.
以下屏幕截图显示了最终的Root Rule Chain应该是什么样子:
如何验证规则链和遥测
对于发布设备遥测我们将使用Rest API遥测上传API。为此,我们将需要复制设备Thermometer的访问令牌。
**你需要将$ACCESS_TOKEN替换为实际的设备令牌**
点击Clear Alarm和Create Alarm节点中的调试模式按钮以验证结果。
发布temperature = 99后会创建警报:
curl -v -X POST -d '{"temperature":99}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
发布temperature = 180后更新警报:
curl -v -X POST -d '{"temperature":180}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
发布temperature = 30后会清除警报:
curl -v -X POST -d '{"temperature":30}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
另外你可以:
- 在Create and Clear Alarm节点中配置Alarm Details功能
- 通过添加警报部件以可视化警报来配置仪表板。
- 定义用于警报处理的其他逻辑例如:发送电子邮件。
请参阅另请参阅部分下第二到第四的链接,以了解如何执行此操作。