3. 遥测数据阈值告警

遥测数据阈值告警 学习卡片

任务说明

在 ThingsBoard 中,当设备上报的温度遥测值超过设定阈值时,自动生成告警。本案例通过规则链中的“脚本”节点判断温度值,再调用“创建告警”节点完成告警生成,全程在规则引擎中配置实现,无需编写后端代码。

实现路径

核心思路:设备上报遥测 → 规则链接收消息 → 脚本节点提取温度值并与阈值比较 → 超过阈值则路由到“创建告警”节点 → 告警保存至数据库并可在告警中心查看。

规则链配置

在 ThingsBoard 中新建规则链,命名为“温度阈值告警链”,并设为根规则链(或由设备关联)。规则链包含以下节点:

  1. 消息类型开关(Check Message Type):仅放行 POST_TELEMETRY 消息,避免处理属性更新等其他消息。
  2. 脚本节点(Script):编写判断逻辑,温度超过阈值时返回 true,否则返回 false。
  3. 创建告警节点(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},则不会触发告警。

验证方法与判定标准

  1. 在 ThingsBoard 中打开“规则链”页面,确认“温度阈值告警链”已设为根规则链,且节点连线正确。
  2. 使用 MQTT 客户端(如 MQTTX)连接 ThingsBoard,设备凭证使用设备的 Access 。
  3. 上报 {"temperature": 45},等待 2~3 秒。
  4. 进入“设备”页面 → 选择该设备 → 点击“最新遥测”,确认 temperature 值为 45。
  5. 进入“告警”页面,应看到一条类型为 TEMP_CRITICAL 的告警,状态为“未读”,详情中包含温度值 45。
  6. 再上报 {"temperature": 35},等待数秒,确认没有新增告警。

判定标准:温度超过阈值时生成告警,未超过时不生成,即视为案例通过。

关键注意事项

  • 脚本节点中字段名必须与设备上报的 JSON 键名完全一致,否则脚本无法提取温度值。
  • 若设备已绑定其他规则链,需将本规则链设为根规则链,或通过“设备配置文件”关联到该规则链。
  • 告警生成后可在“告警”中心统一查看,也可通过 REST API 查询。
温度阈值告警规则链 消息类型开关 POST_TELEMETRY? 脚本节点 温度 > 40? 创建告警 TEMP_CRITICAL 丢弃(不处理) True True False False 设备上报遥测 {"temperature": 45} 生成告警 TEMP_CRITICAL True 分支 False 分支