了解如何在“警报”节点中配置“警报详细信息”功能,以及如何将“警报”小部件添加到仪表板。
用例
本教程基于创建和清除警报教程并且它是用例。
我们将重用上述教程中的规则链并在创建和清除警报点中配置警报详细信息功能。
假设你的设备正在使用DHT22传感器来收集温度读数并将其推送到ThingsBoard。
DHT22传感器适用于-40至80°C的温度读数。如果温度超出范围,我们希望生成警报。
在本教程中我们将ThingsBoard规则引擎配置为:
- 计算每个设备的临界温度更新数,并将此信息保存在警报详细信息中。
-
先决条件
我们假设你已完成以下指南并查看了以下文章:
入门指南。
- 规则引擎概述。
-
消息流
在本节中我们将解释本教程中每个节点的用途:
节点A:Create alarm。
- 如果发布的温度不在预期的时间范围内(过滤器脚本节点返回True)则创建或更新警报。
- 节点B:Clear alarm。
- 如果发布的温度在预期的时间范围内(脚本节点返回False)则清除警报(如果存在)。
- 节点C:Rule Chain。
- 将传入消息转发到指定的规则链Create & Clear Alarms with details。
配置规则链
在本教程中我们仅修改了Create & Clear Alarms规则链,即在节点中配置了“警报详细信息”功能,如上文消息流
另外,我们将此规则链重命名为Create & Clear Alarms with details。
以下屏幕截图显示了以上规则链的外观:
- Create & Clear Alarms详细信息:
- Root Rule Chain:
下载json文件以使用Create & Clear Alarms with details:规则链。 如上图所示,在根规则链中创建节点C,以将遥测转发到导入的规则链。
修改Create & Clear Alarms详细信息:
修改所需的节点
节点A: Create alarm
如果发布的温度不在预期的时间范围内(脚本节点返回True)我们想创建一个警报。 我们要在“警报详细信息”字段中添加当前的temperature。 另外,如果警报已经存在,我们想增“警报详细信息中的count字段,否则将计数设置为1。
我们将覆盖Details函数:
Details function:
var details = {};
details.temperature = msg.temperature;
if (metadata.prevAlarmDetails) {
var prevDetails = JSON.parse(metadata.prevAlarmDetails);
details.count = prevDetails.count + 1;
} else {
details.count = 1;
}
return details;
Details函数使用初始参数创建必需的Details对象然后,在if语句中我们确认是否存在新的警报或警报已经存在。 如果存在-取前一个count字段并递增。
如果在Create Alarm节点中创建了新警报,则该警报会通过关系Created传递到其他节点(如果存在)。
如果Alarm已更新-如果存在,则通过关系Updated将其传递到其他节点。
节点B: Clear Alarm
如果发布的温度在预期的时间范围内(脚本节点返回False),我们希望清除现有警报。
同样在清除过程中,我们想在现有的警报详细信息中添加最新的temperature。
覆盖Details函数:
Alarm Details函数:
var details = {};
if (metadata.prevAlarmDetails) {
details = JSON.parse(metadata.prevAlarmDetails);
}
details.clearedTemperature = msg.temperature;
return;
如果Clear Alarm节点找不到现有警报,则不进行任何更改,并将原始消息通过关系False传递给其他节点(如果存在)。 如果确实存在警报,则将其清除并通过Cleared关系传递给其他节点。
链配置已完成,我们需要 save it。
配置仪表板
下载本教程中指示的仪表板的附件json文件并将其导入。
- 转到Dashboards -> Add new Dashboard -> Import Dashboard 并删除下载的json文件。
你也可以从头开始创建仪表板,以下部分向你展示了如何执行此操作:
创建仪表板
我们将为所有Thermostat设备创建仪表板并在其上添加Alarm部件。创建新的仪表板:
按Edit仪表板,然后add alias,这将被解析为所有类型为Thermostat的设备:
将Alarm widget添加到仪表板(Add new widget -> Alarm widget bundle -> Alarms)。选择已配置的别名entity alarm source。 另外,添加其他alarm fields。
- details.temperature.
- details.count.
- details.clearedTemperature.
并按字段上的edit按钮重命名每个字段的标签:
- 从: -> 至:
- details.temperature -> Event Temperature.
- details.count -> Events count.
- details.clearedTemperature -> Clear Temperature.
进行遥测并验证
为了发布设备遥测,我们将使用Rest API(连接)。为此,我们将需要复制设备Thermostat Home的访问令牌
你需要将$ACCESS_TOKEN替换为实际的设备令牌
发布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"
你还可以查看如何:
- 定义用于警报处理的其他逻辑例如向Telegram App发送电子邮件或发送通知。
请参阅“另请参阅”部分下的链接,以了解如何执行此操作。