官网介绍
ThingsBoard规则引擎是用于复杂事件处理的高度可定制的框架。以下是一些可以通过ThingsBoard规则链配置的常见用例:
在保存到数据库之前,对传入遥测或属性进行数据验证和修改。
添加规则链 命名为数据验证和修改
温度转换节点脚本 [假设上传温度是215需要转换成21.5]
msg.temperature = msg.temperature / 10;
return {msg: msg, metadata: metadata, msgType: msgType};
温度验证筛选
return typeof msg.temperature === 'undefined'
|| (msg.temperature >= -40 && msg.temperature <= 80);
调试
- 添加设备配置,命名为
温度传感器配置
,应用之前创建的规则链(图1) - 添加新设备,命名为
温度传感器1
,设备配置选择之前创建的温度传感器配置(图2) - 拷贝访问令牌,作为username,使用MQTTBox发送测试遥测数据
{"temperature":125}
到主题v1/devices/me/telemetry
(图3)可以看到设备最新遥测数据中出现12.5(图4)
- 发送测试遥测数据
{"temperature":900}
最新遥测数据没有出现90,被筛选节点过滤掉了 - 调试过程中打开相关节点的调试功能(图1),发送遥测数据后,会在事件中看到调试信息(图2)[规则链调试结束后可以使用左下角的debug按钮清除所有节点的调试功能(图3)]
根据定义的条件创建/更新/清除警报。
主要用到规则链的过滤节点类型中的交换节点
交换节点js [返回三个输出链 ‘create’,’update’,’clear’。警告级别 <0 危险 <10 警告 >10 清除]
if(msg.temperature < 0){
return ["create"];
}
if(msg.temperature >= 0 && msg.temperature < 10){
return ["update"];
}
if(msg.temperature >= 10){
return ["clear"];
}
return [];
规则链配置到设备配置文件后,调试
- 向topic
v1/devices/me/telemetry
发送{"temperature":-9}
,调试信息(图1),设备警告信息危险(图2) - 向topic
v1/devices/me/telemetry
发送{"temperature":8}
,调试信息(图3),设备警告信息变为警告(图4) - 向topic
v1/devices/me/telemetry
发送{"temperature":12}
,调试信息(图5),设备警告信息状态变为消除未确认
(图6)
根据设备生命周期事件触发操作。例如,如果设备处于在线/离线状态,则创建警报。
主要用到规则链的过滤节点类型中的消息类型切换节点的Disconnect Event
和 Connect Event
使用MQTTBox测试设备上下线
在设备警告页查看结果
加载处理所需的其他数据。例如,在“设备的客户”或“租户”属性中定义的设备的负载温度阈值。
添加一个客户为其分配设备温度传感器1
,并为此客户添加俩个服务端属性 高温阈值 highTemperatureThreshold
40 低温阈值 lowTemperatureThreshold
0
新建规则链并应用到温度传感器1
的设备配置上
过滤温度节点脚本
return msg.temperature > metadata.low &&
msg.temperature < metadata.high;
调试 向v1/devices/me/telemetry
发送 {"temperature":12}
查看节点调试情况
设备最新遥测数据处显示,再发送 {"temperature":50}
则被过滤温度节点
过滤不显示。
触发对外部系统的REST API调用。
根据定义的条件进行RPC调用。
假设规则链功能为 温度低于18度->打开空调并设置目标温度23度;23~25关闭空调;高于30度打开空调并设置温度为18度.
构建rpc消息脚本内容
var newMsg = {}
var params = {}
if(msg.temperature < 18){
newMsg.method = "on";
params.value = "23";
}
if(msg.temperature >= 23 && msg.temperature < 25){
newMsg.method = "off";
}
if(msg.temperature > 30){
newMsg.method = "on";
params.value = "18";
}
newMsg.params = params;
return {msg: newMsg, metadata: metadata, msgType: msgType};
应用到设备配置后调试,设备订阅v1/devices/me/rpc/request/+
结果如下
与外部管道(如Kafka,Spark,AWS服务等)集成。
使用外部节点即可将消息流转到其他地方