3. 遥测数据阈值告警
任务说明
在 ThingsBoard 中,当设备上报的温度遥测值超过设定阈值时,自动生成告警。本案例通过规则链中的“脚本”节点判断温度值,再调用“创建告警”节点完成告警生成,全程在规则引擎中配置实现,无需编写后端代码。
实现路径
核心思路:设备上报遥测 → 规则链接收消息 → 脚本节点提取温度值并与阈值比较 → 超过阈值则路由到“创建告警”节点 → 告警保存至数据库并可在告警中心查看。
规则链配置
在 ThingsBoard 中新建规则链,命名为“温度阈值告警链”,并设为根规则链(或由设备关联)。规则链包含以下节点:
- 消息类型开关(Check Message Type):仅放行
POST_TELEMETRY消息,避免处理属性更新等其他消息。 - 脚本节点(Script):编写判断逻辑,温度超过阈值时返回
true,否则返回false。 - 创建告警节点(Create Alarm):当脚本返回
true时触发,生成类型为TEMP_CRITICAL的告警。
脚本节点代码
// 从消息中解析温度值
var temperature = msg.temperature;
// 设定阈值,可根据需要修改
var threshold = 40;
// 如果温度超过阈值,返回 true 进入告警分支
if (typeof temperature !== 'undefined' && temperature > threshold) {
return { msg: msg, metadata: metadata, msgType: msgType };
} else {
return null;
}
脚本中 msg.temperature 对应设备上报的遥测字段名,若设备使用其他字段名(如 temp),需同步修改。阈值 40 可根据业务需求调整。
创建告警节点配置
| 配置项 | 值 |
|---|---|
| 告警类型 | TEMP_CRITICAL |
| 告警严重级别 | CRITICAL(或按需选择) |
| 告警详情 | 可填写 温度超过阈值,当前值:${temperature},其中 ${temperature} 会替换为实际温度值 |
| 是否清除告警 | 否(本案例仅生成告警,不处理恢复) |
规则链连接关系
消息类型开关 --True--> 脚本节点 --True--> 创建告警节点
消息类型开关 --False--> 丢弃(不处理)
脚本节点 --False--> 丢弃(温度未超阈值)
设备端模拟上报
使用 MQTT 客户端模拟设备上报温度数据,Topic 格式为:
v1/devices/me/telemetry
上报 JSON 数据示例(温度 45,超过阈值 40):
{"temperature": 45}
若温度未超阈值,如 {"temperature": 35},则不会触发告警。
验证方法与判定标准
- 在 ThingsBoard 中打开“规则链”页面,确认“温度阈值告警链”已设为根规则链,且节点连线正确。
- 使用 MQTT 客户端(如 MQTTX)连接 ThingsBoard,设备凭证使用设备的 Access 。
- 上报
{"temperature": 45},等待 2~3 秒。 - 进入“设备”页面 → 选择该设备 → 点击“最新遥测”,确认
temperature值为 45。 - 进入“告警”页面,应看到一条类型为
TEMP_CRITICAL的告警,状态为“未读”,详情中包含温度值 45。 - 再上报
{"temperature": 35},等待数秒,确认没有新增告警。
判定标准:温度超过阈值时生成告警,未超过时不生成,即视为案例通过。
关键注意事项
- 脚本节点中字段名必须与设备上报的 JSON 键名完全一致,否则脚本无法提取温度值。
- 若设备已绑定其他规则链,需将本规则链设为根规则链,或通过“设备配置文件”关联到该规则链。
- 告警生成后可在“告警”中心统一查看,也可通过 REST API 查询。