本指南介绍如何在ThingsBoard中计算遥测值之间的差值(delta),并将该计算结果用于自动触发和清除告警。
本指南为入门级,重点演示平台核心能力,而非从零构建配置。
因此,在设置过程中将提供并导入预设的calculated fields和alarm rules配置。
将上述配置导入ThingsBoard实例后,可查看其结构、逻辑和行为,并据此适配自己的使用场景。
使用场景
假设设备配备温度传感器,定期向ThingsBoard发送遥测数据。
需要:
- 在固定时间窗口(例如15分钟)内监控温度变化。
- 当温度变化超过设定阈值(5°C)时触发告警。
- 当值恢复正常时自动清除告警。
该流程代表常见的实时监控与异常检测场景,并可扩展以支持更高级用例。
前置条件
在继续前,建议先阅读以下ThingsBoard文档:
- Calculated fields:了解如何基于传入的数据计算新的遥测值。
- 告警规则:了解如何定义告警触发条件,以快速响应异常状态。
以上概念对理解下述配置至关重要。
步骤1. 添加演示设备
先添加一台上报温度遥测的演示设备。
该设备作为calculated field和alarm rules使用的遥测数据来源。
操作
- 进入 Entities ⇾ Devices。
- 点击右上角 「+ Add device」 按钮,选择 「Add new device」 并创建:
• Device name: Thermometer
• Device profile: thermostat
设备将在ThingsBoard中注册,并可以上报遥测数据。
步骤2. 导入用于遥测delta的calculated field
所提供的配置在最近15分钟内计算温度delta,并将结果存储为新的遥测键:deltaTemperature。
操作
- 下载calculated field配置文件:
telemetry_delta_calculation_cf.json。 - 进入 Calculated fields 页面。
- 点击右上角 「+ Add calculated field」 按钮,选择 「Import calculated field」。
- 上传 calculated field 配置文件。
- 选择 thermostat device profile 作为目标实体,以便calculated field自动应用到所有相关设备。
- 点击 Add 完成导入。
计算逻辑
Calculated field脚本:
- 收集最近5分钟内的温度值
- 使用时间窗口内的首个和末个值
- 计算两者差值
- 将绝对值存储为遥测
本示例使用的脚本
function calculate(ctx, altitude, temperature) {
1
2
3
4
5
6
7
8
9
var delta = 0;
if (temperature.values.size() >= 2) {
delta = temperature.last - temperature.first;
}
return {
"deltaTemperature": Math.abs(toInt(delta))
}
}
要点
- 若可用值少于两个,delta设为 0
- 脚本可应对稀疏遥测
- 结果作为 time series telemetry 存储并自动更新
步骤3. 配置基于遥测delta的告警规则
配置对 deltaTemperature 键值变化做出响应的 alarm rule。
告警逻辑:
• 当 deltaTemperature ≥ 5 时触发告警
• 当 deltaTemperature < 5 时清除告警
操作
- 下载alarm rule配置文件:
temperature_deviation_alarm_rule.json。 - 进入 Alarms ⇾ Alarm rules。
- 上传 alarm rule 配置文件。
- 为 thermostat device profile 配置alarm rule,以确保其一致应用于使用该profile的所有设备。
- 点击 Add。
导入后,告警生命周期由ThingsBoard自动管理。
步骤4. 验证配置
为确认一切正常,请在15分钟内发布两个温度值。
验证步骤
- 发布初始温度值(例如25)。
最简单的方式是使用 check connectivity 功能。也可执行以下命令:请勿忘记替换:
•为您的ThingsBoard 主机名或IP地址。
•$ACCESS_TOKEN为设备的access token。1
curl -v -X POST https://eu.thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{temperature:25}"
- 打开设备的 Latest telemetry 标签页,实时监控传入的数据。
此时应能看到以下遥测键:- temperature = 25
- deltaTemperature = 0
-
在15分钟内发布第二个温度值(例如32)。
1
curl -v -X POST https://eu.thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{temperature:32}"
- 第二次更新后:
• deltaTemperature = 7。因超过阈值而触发告警 - 打开 Alarms 标签页验证告警状态。
一旦 deltaTemperature 键值小于 5,告警将自动清除。