分享|五分钟学会使用 ThingsBoard 规则链
ThingsBoard 是一款强大的开源平台,提供了丰富的功能来管理和监控物联网设备。其中,规则链(Rule Chains)是 ThingsBoard 中一个关键的特性,它允许用户定义和执行自定义的业务规则,实现设备数据的处理、转换和触发特定动作。本篇博客将带你在短短五分钟内学会使用 ThingsBoard 规则链,让你更灵活地管理你的物联网应用。
规则链概述
规则链,即低代码的逻辑处理模块,简而言之,描述了服务器在接收数据后的处理流程
有 3 个主要组成部分:
-
消息: 任何传入事件。它可以是来自设备的传入数据、设备生命周期事件、REST API 事件、RPC 请求等。
-
规则节点: 对传入消息执行的函数。有许多不同的节点类型可以对传入消息进行过滤、转换或执行某些操作。
-
规则链: 节点通过关系相互连接,因此来自规则节点的出站消息被发送到下一个连接的规则节点。
创建规则链
规则链元素介绍
节点类型及其功能
在规则链中,有不同类型的节点,每个节点都有特定的功能。常见的节点类型包括:
- 过滤器节点: 用于筛选数据,只允许满足特定条件的数据通过。
- 属性集节点:用于更新传入消息的元数据
- 转换器节点: 用于将数据从一种格式或单位转换为另一种格式或单位。
- 动作节点: 用于触发特定的动作或通知。
- 外部节点:用于与外部系统进行交互,提供将消息及数据路由到外部。
应用案例
数据过滤和清理
考虑一个场景,设备传感器每秒钟发送一批数据,但我们只对特定阈值以上的数据感兴趣。通过使用规则链的过滤器节点,可以轻松地过滤掉那些不满足条件的数据,只保留我们关心的数据。
在本案例中,我们将配置 ThingsBoard 规则引擎来存储 -40 到 80°C 范围内的所有温度。
添加过滤节点
我们将使用此脚本进行数据验证:
return msg.temperature < -40 || msg.temperature > 80
如果温度在有效范围内,脚本将返回True,否则将返回False。如果脚本返回True,传入消息将被路由到以True关系连接的下一个节点。
现在我们使用Post Telemetry关系将Message Type Switch节点与Script Filter节点连接:
接下来,我们需要使用True关系将Script Filter节点与Save Telemetry节点连接起来。因此所有有效的遥测数据都将被保存:
上传telemetry温度为200,我们将看到设备最新遥测部分中未添加遥测:
{
"temperature": "200"
}
现在修改温度为24,再次发送请求
{
"temperature": "24"
}
我们将看到遥测数据已成功保存。
实时数据转换
假设设备传感器提供的数据是以摄氏度为单位,但我们更喜欢使用华氏度。通过规则链中的转换器节点,可以将摄氏度转换为华氏度,确保我们得到的数据在我们熟悉的单位中。
下面的案例中,通过配置 ThingsBoard 规则引擎区分设备A和设备B,同时根据设备属性值分别将遥测数据中的温度进行不同处理。
我们使用到属性集节点中的originator attributes
在消息元数据中添加消息发起者属性(client\shared\server)和最新的遥测值,通过isTempCalculate
属性区分设备A和设备B
我们会使用脚本来验证传入的温度是否在有效范围内,并返回Success或Failure。
我们将使用此脚本进行数据验证:
if (metadata.isTempCalculate && metadata.isTempCalculate === "true") {
if (typeof msg.temperature !== 'undefined') {
msg.temperature = precisionRound(msg.temperature / 10, 2);
}
}else{
}
function precisionRound(number, precision) {
var factor = Math.pow(10, precision);
return Math.round(number * factor) / factor;
}
return {msg: msg, metadata: metadata, msgType: msgType};
上传一个温度值,确保规则链正确地执行了转换脚本并将数据保存。
{
"temperature": "200"
}
设备B:
设备状态监控
在这个场景中,我们想要监控设备的状态,当设备状态发生变化时触发通知。通过规则链的动作节点,我们可以设置条件,例如设备断线或异常状态,以触发相应的通知或报警动作。
本节的案例,通过配置 ThingsBoard 规则引擎,当温度不在-40~80之间时发送设备告警,并向外部MQTT中发送原始数据信息
遥测数据上传成功后,通过script
脚本判断温度是否在正常范围内,并添加新增告警和清除告警节点
我们将使用此脚本进行新增告警的逻辑处理:
var details = {};
details.temperature = msg.temperature;
if (metadata.prevAlarmDetails) {
details = JSON.parse(metadata.prevAlarmDetails);
//remove prevAlarmDetails from metadata
delete metadata.prevAlarmDetails;
//now metadata is the same as it comes IN this rule node
details.count = details.count + 1;
}else {
details.count = 1;
}
return details;
可以将规则链配置为使用转换节点链,以将正确的有效负载发送到MQTT代理。在成功发布消息的情况下,原始消息将通过Success链传递到下一个节点,否则将使用Failure链。
配置MQTT节点:
向Device发送一条带有温度 = 200 的遥测请求,查看设备的告警页面
同时MQTT接收到规则链发送的JSON
{
"tenantId": {
"entityType": "TENANT",
"id": "4d22a670-a52a-11ee-a5a6-494c5c858852"
},
"customerId": {
"entityType": "CUSTOMER",
"id": "13814000-1dd2-11b2-8080-808080808080"
},
"type": "General Alarm",
"originator": {
"entityType": "DEVICE",
"id": "33441de0-a5e5-11ee-a3e5-494c5c858852"
},
"severity": "CRITICAL",
"status": "ACTIVE_UNACK",
"startTs": 1703837072025,
"endTs": 1703837072025,
"ackTs": 0,
"clearTs": 0,
"details": {
"temperature": 200,
"count": 1
},
"propagate": false,
"propagateToOwner": false,
"propagateToTenant": false,
"propagateRelationTypes": [],
"id": {
"entityType": "ALARM",
"id": "e5ea5cd0-a620-11ee-948b-d78826584bf8"
},
"createdTime": 1703837072157,
"name": "General Alarm"
}
总结与建议
总结与建议
通过这篇博客,你将能够快速上手使用ThingsBoard规则链,包括规则链的元素介绍、实际应用示例、总结和建议等,后续将会进一步深入介绍和展示如何在ThingsBoard中灵活使用规则链,使读者能够在短时间内掌握这一强大功能。
关于亿琪软件
亿琪软件
上海亿琪软件有限公司,全球开放边缘计算和物联网领域的领导者,全球领先的工业物联网软件开发商和解决方案提供商,助力企业和组织实现数字化转型。公司专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域,致力于物联网领域前沿技术的创新,为用户提供全方位、智能化和安全的物联网解决方案。
-
2023 年,公司发布“ YiFUSION |工业边缘智能融合网关 ”产品,为工业客户提供一整套的边缘计算+AI 能力:高性能数据采集、多类型数据融合、AI 算法集成、云端业务对接。在边缘网关的基础上,集成了 IoT 平台的边缘协同能力、本地 Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。
-
2022 年,公司推出 “ YiCLOUD |亿琪云 ”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域,公司软硬件产品和解决方案获得华为技术认证,得到中国移动 OCP 认证,公司还是边缘计算产业联盟 ECC 成员。
联系我们--商业服务
- 网站:http://yiqisoft.cn
- 邮件:support@yiqisoft.cn
- 电话:021-68863086
- 手机:186-1666-9123