什么是规则引擎
规则引擎是一个易用的框架,用于构建基于事件驱动的工作流。有3个主要组成部分:
- Message - 任何传入的事件。它可以是来自设备、设备生命周期事件、
REST API
事件、RPC
请求等的传入数据。 - Rule Node - 对传入消息执行的函数。有许多不同的节点类型可以过滤、转换或对传入消息执行某些操作。
- Rule Chain - 节点之间通过关系相互连接,因此规则节点的出站消息被发送到下一个连接的规则节点。
典型用例
ThingsBoard 规则引擎是一个高度可定制的框架,用于复杂的事件处理。下面是一些常见的用例,可以通过 ThingsBoard 规则链进行配置:
- 在保存到数据库之前,对传入的遥测或属性进行数据校验和修改。
- 将设备的遥测数据或属性值复制到相关资产中,以便聚合遥测数据。例如,来自多个设备的数据可以聚合到相关资产中。
- 根据定义的条件来创建/更新/清楚警报。
- 基于设备的生命周期时间来出发动作。举个例子,当设备上线或离线是创建警报。
- 为处理进程加载其他的数据。举个例子,为设备加载定义在用户或租户属性中温度阈值。
- 触发对外部系统的REST API调用。
- 当复杂事件发生时发送电子邮件,并在电子邮件模板中使用其他实体的属性。
- 在事件处理期间考虑用户的偏好设置。
- 根据定义的条件实现RPC调用。
- 与Kafka、Spark、AWS服务等外部管道集成。
Hello-World-Example
我们假设您的设备使用 DHT22 传感器来收集温度并将其推送到 ThingsBoard 上。DHT22传感器可以测量 -40℃ 到 +80℃ 的温度。
在本教程中,我们将配置 ThingsBoard 的规则引擎来存储 -40℃ ~ +80℃ 范围内的所有温度,并将所有其他读数记录到系统日志中。
添加温度验证节点
在 Thingsboard 用户界面进入 Rule Chains
部分,打开 Root Rule Chain
。
将 Script Filter
规则节点拖放到链路上。会弹出节点配置窗口。我们将使用这个脚本进行数据验证:
return typeof msg.temperature === 'undefined'
|| (msg.temperature >= -40 && msg.temperature <= 80);
如果没有定义温度属性或温度有效—脚本将返回 True
,否则将返回 False
。如果脚本返回 True
,则传入消息将路由到与 True
关系连接的下一个节点。
现在,我们希望这个脚本验证所有 telemetry requests。我们需要删除现有的 Message Type Switch 节点与 Save Telemetry 节点之间的 Post Telemetry 关系:
用 Post Telemetry 关系将 Message Type Switch 节点与 Script Filter 节点连接起来:
接下来,我们需要使用 True
关系将 Script Filter
节点与 Save Telemetry
节点连接起来。因此,所有有效的遥测将被保存:
另外,我们还可以使用 False 关系将 Script Filter 节点连接到 Log Other 节点。这样所有无效的遥测数据都将被记录在系统日志中:
按Save按钮应用更改。
校验结果
为了验证结果,我们需要创建设备并将遥测提交到Thingsboard
。进入设备部分,创建新设备:
我们会使用 Rest API来实现设备遥测数据的发送。首先,我们需要从设备 Thermostat Home 中复制设备访问令牌。
将发送的温度设为99℃
。我们看到遥测数据没有出现在设备最新的遥测部分。
curl -v -X POST -d '{"temperature":99}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
** 你需要将$ACCESS_TOKEN
替换成当前设备的令牌
_
发送temperature = 24可以看见遥测数据保存成功
curl -v -X POST -d '{"temperature":24}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
相关文档
您可以使用以下链接来了解有关Thingsboard Rule Engine的更多信息:
- 规则引擎概述
- 规则引擎架构
- 调试节点执行
- 验证传入遥测
- 转换输入遥测
- 使用以前的记录转换遥测
- 创建和清除警报
- 发送警报电子邮件
- 设备离线时创建警报
- 检查实体之间的关系
- 到相关设备的RPC请求
- 添加和删除设备以动态分组
- 汇总传入数据流