了解如何使用RuleEngine在设备离线一段时间后创建警报。
用例
让我们假设以下用例:
- 你已将一个设备连接至ThingsBoard,并且该设备具有一个温度传感器以收集并推送遥测数据。
- 由于任何类型的故障,温度传感器可能会停止推送遥测数据。
因此在这种情况下你需要将ThingsBoard Rule Engine配置为:
- 如果设备在一段时间内保持非活动状态则创建警报。可以通过以下两种方式之一来定义此时间段:
- 第一种方法:通过更改非活动超时的全局配置参数。
此参数在thingsboard.yml(state.defaultInactivityTimeoutInSec)中定义默认情况下设置为10秒。 - 第二种方式:通过设置服务器端属性inactivityTimeout(毫秒为单位)来覆盖特定设备的此参数。
以下各节将介绍这种方式。
- 第一种方法:通过更改非活动超时的全局配置参数。
- 如果设备处于活动状态清除警报。
背景
ThingsBoard设备状态服务负责监视设备连接状态并触发推送到规则引擎的设备连接事件。
ThingsBoard支持四种类型的事件:
事件类型 | 描述 |
---|---|
连接(Connect) | 在设备连接到ThingsBoard时触发。 |
断开(Disconnect) | 当设备与ThingsBoard断开连接时触发。 |
活动(Activity) | 在设备推动遥测,属性更新或RPC命令时触发。 |
不活(Inactivity) | 在设备在一段时间内处于非活动状态时触发。 |
本教程将详细说明设备不活动事件,并将向你展示如何:
- 使用规则引擎创建不活动警报。
- 为非活动超时配置参数。
添加设备
- 在ThingsBoard中添加设备实体。
- 输入设备名称为Temperature device,并输入设备类型为Temperature sensor:
Configuring the Device
- 转到Devices -> Temperature device -> Attributes -> Server attributes 点击 Add 按钮;
- 例如将inactivityTimeout属性设置为等于60000毫秒的值。
配置规则链
以下屏幕截图显示了初始Root Rule Chain。请注意不相关的规则节点已从Root Rule Chain链中删除。
通过添加以下两个操作节点来修改默认规则链:
- Create alarm节点:以关系类型Inactivity Event连接到Message Type Switch节点;
- Clear alarm节点:连接到Message Type Switch节点,其关系类型为Activity Event。
以下屏幕截图显示了最终规则链的外观:
- 下载上述规则链json文件并将其导入。
- 不要忘记将新规则链标记为”root”。
另外你可以从头开始创建新的规则链。下一节将向你展示如何创建它。
创建新的规则链(Tutorial of Inactivity Event)
- 转到Rule Chains -> Add new Rule Chain
- 输入名称Tutorial of Inactivity Event 点击 ADD 按钮。
- 创建新的规则链。不要忘记将其标记为“root”。
添加所需的节点
Message Type Switch节点
添加Message Type Switch节点并将其连接到Input节点。
该节点将根据消息类型路由传入的消息,即:
- POST_TELEMETRY_REQUEST;
- POST_ATTRIBUTES_REQUEST;
- ACTIVITY_EVENT;
- INACTIVITY_EVENT.
输入名称Message Type Switch点击ADD按钮。
Save Timeseries节点
添加Save TimeSeries节点并将其连接到Message Type Switch节点其关系类型为Post telemetry。
该节点会将来自传入消息payload的TimeSeries数据存储到数据库中,并将其链接到消息发起方标识的设备。
输入名称Save Time Series。
Save Server Attributes节点
添加Save Attributes节点并将其连接到关系类型为Post attributes的Message Type Switch节点。
该节点会将来自传入消息payload的属性存储到数据库中,并将它们链接到消息发起者标识的实体。
输入名称Save Server Attributes。
Create Inactivity alarm节点
添加Create alarm节点,并将其连接到关系类型为Inactivity Event的Message Type Switch节点。
该节点尝试使用为消息发起者配置的警报类型加载最新的警报。如果存在未清除的警报则将更新此警报否则将创建一个新的警报。
- 输入名称Create Inactivity Alarm并在警报类型中输入Inactivity TimeOut。
Clear Inactivity alarm节点
添加Clear alarm节点并将其连接到关系类型为Activity Event的Message Type Switch节点。
该节点使用消息始发者配置的警报类型加载最新的警报并清除警报(如果存在)。
- 输入名称Clear Inactivity Alarm并在警报类型中输入Inactivity TimeOut。
现在此规则链已准备就绪你需要保存它。
如何验证Rule Chain和Post telemetry
- 使用Rest API 遥测上传API发布设备遥测。
请注意,你需要从设备Temperature device复制设备访问令牌,如以下屏幕截图所示。
发布temperature = 20应该在遥测发布一分钟后创建警报:
curl -v -X POST -d '{"temperature":20}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
***你需要将$ACCESS_TOKEN替换为实际的设备令牌**
另外你可以:
- 通过添加警报部件以可视化警报来配置仪表板。
- 定义用于警报处理的其他逻辑,例如发送电子邮件。
请参阅另请参阅部分下的前两个链接,以了解如何执行此操作。
另请参阅
- 创建和清除警报:配置信息中心 指南-了解如何添加仪表板的警报小部件。
- 发送邮件。
- 设备连接状态。