本指南介绍如何在ThingsBoard中验证传入的遥测数据,并在存储前丢弃无效值。
以Thermometer温度传感器的温度读数为例,确保仅将支持范围内的值存入数据库。
本指南为入门级,重点演示平台核心能力,而非从零构建配置。
因此,在设置过程中将提供并导入预设的rule chain配置。
将上述配置导入ThingsBoard实例后,可查看其结构、逻辑和行为,并据此适配自己的使用场景。
使用场景
假设设备配备Thermometer温度传感器,定期向ThingsBoard发送遥测。
Thermometer传感器支持 -40 °C至 +80 °C的温度测量。
目标是:
- 仅在温度值处于有效范围内时,接受并存储温度读数
- 丢弃超出范围的遥测值
- 其他不含温度字段的遥测数据均原样放行
虽然示例简化,但展示了可应用于实际IoT部署的常见遥测验证模式。
前置条件
在继续前,请阅读 Rule Engine 文档,了解本示例中使用的消息路由与处理概念。
验证逻辑
传入的消息可能包含或未包含 temperature 字段。
遥测验证遵循以下规则:
- 若消息不包含 temperature,则视为有效
- 若存在 temperature 键,其值必须在 -40至80 范围内
仅满足上述条件的消息会存入数据库。
遥测验证通过 rule chain 实现,在保存前过滤传入的消息。Rule chain行为如下:
- 将使用该rule chain的设备发出的所有消息路由到带温度验证脚本的 filter node
- 将已验证的遥测转发至 save timeseries node,由该节点将数据存入数据库
该rule chain确保仅存储有效的温度读数,无效值在持久化前被过滤。
步骤1. 导入验证rule chain
- 下载rule chain配置文件:
validate_incoming_telemetry_rule_chain.json。 - 进入 Rule chains 页面。
- 点击右上角 「+ Add rule chain」 按钮,选择 「Import rule chain」。
- 上传 rule chain 配置文件 并点击 Import。
- 点击 Apply changes 完成导入。
本示例使用的脚本
1
return typeof msg.temperature === 'undefined' || (msg.temperature >= -40 && msg.temperature <= 80);
脚本逻辑说明
- typeof msg.temperature === ‘undefined’ ⇾ 允许不包含温度数据的消息原样通过。
- (msg.temperature >= -40 && msg.temperature <= 80) ⇾ 校验温度值在支持范围内。
步骤2. 添加演示设备
创建一台上报温度遥测的演示设备,并确保其使用刚导入的验证rule chain。
- 进入 Entities ⇾ Devices。
- 点击右上角 「+ Add device」 按钮,选择 「Add new device」 并创建:
- Device name: Thermometer
- Device profile: thermostat
- 在 thermostat 设备配置设置中,将导入的 Validate Incoming Telemetry rule chain设为此配置文件的默认rule chain。
- 保存更改。
此后,使用该配置文件的所有设备在上报遥测前都会经过验证。
测试配置
要验证验证逻辑是否按预期工作,请打开设备的 Latest telemetry 标签页实时查看传入的数据,然后发布测试遥测消息。
可使用 Check connectivity 功能,或执行以下命令*:
-
温度在有效范围内(例如 25)。
1
curl -v -X POST https://eu.thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{temperature:25}"
-
温度低于范围(例如 -50)。
1
curl -v -X POST https://eu.thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{temperature:-50}"
-
温度高于范围(例如 100)。
1
curl -v -X POST https://eu.thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{temperature:100}"
-
不含 temperature 字段的消息。
1
curl -v -X POST https://eu.thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{humidity:46}"
* 请务必替换:
- $ACCESS_TOKEN 为设备access token
仅通过验证的遥测消息会被持久化。无效的温度值会被丢弃。