4. 告警规则条件表达式:使用 Key-Value 条件、关系运算符与逻辑运算符

告警规则的核心是条件表达式——它决定了何时触发告警。ThingsBoard 的条件表达式基于设备上报的遥测数据或属性值,通过 Key-Value 条件、关系运算符和逻辑运算符组合而成。掌握这三者的用法,是配置精准告警的基础。

💡 核心概念:条件表达式本质上是一个布尔判断——当表达式结果为 true 时,告警进入触发状态;为 false 时,告警保持清除或未触发状态。

4.1 Key-Value 条件:从数据中提取判断依据

Key-Value 条件是指将设备上报的某个数据键(Key)与一个预期值(Value)进行比较。Key 通常是遥测字段(如 temperature、humidity)或属性字段(如 firmwareVersion)。

Key 类型 示例 Key 说明
遥测 Key temperature 设备实时上报的温度值
遥测 Key humidity 设备实时上报的湿度值
属性 Key firmwareVersion 设备固件版本号(客户端或共享属性)
属性 Key deviceType 设备类型标签(服务端属性)
时间 Key ts 数据时间戳(毫秒)
📌 配置要点:在 ThingsBoard 告警规则的条件配置中,Key 必须与设备实际上报的遥测或属性名称完全一致(区分大小写)。Value 支持数字、字符串、布尔值三种类型,类型不匹配会导致条件永远不成立。

4.2 关系运算符:比较值与阈值

关系运算符用于将 Key 的值与设定的阈值进行比较。ThingsBoard 支持以下五种关系运算符:

运算符 含义 适用场景示例
> 大于 温度超过 60°C 时触发告警
< 小于 电池电量低于 20% 时触发告警
== 等于 设备状态码等于 0(离线)时触发告警
!= 不等于 固件版本不等于预期版本时触发告警
>= / <= 大于等于 / 小于等于 压力值 ≥ 100 PSI 或 ≤ 0 PSI 时触发告警

单个条件表达式示例:

temperature > 60.0
humidity < 30.0
deviceStatus == "offline"
firmwareVersion != "v2.1.0"

4.3 逻辑运算符:组合多个条件

实际场景中,告警往往需要多个条件同时满足或满足其一。逻辑运算符 AND、OR、NOT 用于将多个 Key-Value 条件组合成复合表达式。

逻辑运算符 语法 行为
AND 条件A AND 条件B 两个条件都为 true 时,结果为 true
OR 条件A OR 条件B 至少一个条件为 true 时,结果为 true
NOT NOT 条件 条件为 false 时,结果为 true(取反)

复合条件表达式示例:

// 高温且低湿:温度 > 50 AND 湿度 < 20
temperature > 50.0 AND humidity < 20.0

// 温度过高或设备离线:温度 > 70 OR 状态码 == 0
temperature > 70.0 OR deviceStatus == 0

// 非正常状态:NOT (deviceStatus == "normal")
NOT (deviceStatus == "normal")
⚠️ 优先级注意:ThingsBoard 条件表达式中,NOT 优先级最高,其次是 AND,最后是 OR。建议使用括号明确优先级,例如:(temperature > 50.0) AND (humidity < 20.0 OR deviceStatus == 0)。

4.4 条件表达式结构图

下图展示了条件表达式的完整结构,从 Key-Value 条件到逻辑组合的层级关系:

条件表达式结构图 条件表达式 简单条件(单个 Key-Value) 复合条件(逻辑组合) Key + 关系运算符 + Value 条件A AND/OR/NOT 条件B 示例: temperature > 60.0 示例: temperature > 50.0 AND humidity < 20.0 条件表达式由 Key-Value 条件作为原子单元,通过关系运算符比较,再经逻辑运算符组合 最终输出布尔值(true/false)决定告警是否触发

4.5 实际配置示例:温度与湿度联动告警

假设一个温室监控场景,需要满足以下告警逻辑:

  • 当温度超过 45°C 且 湿度低于 30% 时,触发“高温低湿”告警。
  • 当温度超过 60°C 或 湿度低于 15% 时,触发“极端环境”告警。
  • 当设备状态不是“online”时,触发“设备离线”告警。

对应的条件表达式:

// 告警规则1:高温低湿
temperature > 45.0 AND humidity < 30.0

// 告警规则2:极端环境
temperature > 60.0 OR humidity < 15.0

// 告警规则3:设备离线
NOT (deviceStatus == "online")
✅ 最佳实践:
  • 每个告警规则只配置一个条件表达式,保持逻辑清晰。
  • 复杂业务逻辑拆分为多个告警规则,而非在一个表达式内堆砌过多条件。
  • 使用括号明确优先级,避免歧义。
  • 测试阶段先用 == 或 != 验证 Key 名称是否正确。

4.6 条件表达式与告警类型的映射

条件表达式的结果直接映射到告警的两种基本状态:

条件表达式结果 告警状态 说明
true ACTIVE(活跃) 告警被触发,进入告警列表,可配置通知推送
false CLEARED(已清除) 告警条件不再满足,告警自动清除(需启用清除条件)

在 ThingsBoard 告警规则配置界面中,条件表达式位于“告警规则”选项卡下的“条件”部分。你可以为每个告警类型分别定义触发条件和清除条件,两者都使用相同的 Key-Value + 关系运算符 + 逻辑运算符语法。

🔧 调试技巧:如果告警未按预期触发,请检查:① Key 名称是否与设备遥测/属性完全一致;② Value 类型是否匹配(数字 vs 字符串);③ 逻辑运算符优先级是否被括号正确控制;④ 清除条件是否意外覆盖了触发条件。