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 条件到逻辑组合的层级关系:
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 字符串);③ 逻辑运算符优先级是否被括号正确控制;④ 清除条件是否意外覆盖了触发条件。