产品定价 立即试用
云平台
北美地区
验证入库遥测
入门 文档 指南 API 常见问题
目录

验证入库遥测

本指南介绍如何在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

  1. 下载rule chain配置文件:
    validate_incoming_telemetry_rule_chain.json
  2. 进入 Rule chains 页面。
  3. 点击右上角 「+ Add rule chain」 按钮,选择 「Import rule chain」
  4. 上传 rule chain 配置文件 并点击 Import
  5. 点击 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。

  1. 进入 Entities Devices
  2. 点击右上角 「+ Add device」 按钮,选择 「Add new device」 并创建:
    • Device name: Thermometer
    • Device profile: thermostat
  3. thermostat 设备配置设置中,将导入的 Validate Incoming Telemetry rule chain设为此配置文件的默认rule chain。
  4. 保存更改。

此后,使用该配置文件的所有设备在上报遥测前都会经过验证。


测试配置

要验证验证逻辑是否按预期工作,请打开设备的 Latest telemetry 标签页实时查看传入的数据,然后发布测试遥测消息。
可使用 Check connectivity 功能,或执行以下命令*:

  1. 温度有效范围内(例如 25)。

    1
    
    curl -v -X POST https://thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{temperature:25}"
    
  2. 温度低于范围(例如 -50)。

    1
    
    curl -v -X POST https://thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{temperature:-50}"
    
  3. 温度高于范围(例如 100)。

    1
    
    curl -v -X POST https://thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{temperature:100}"
    
  4. 不含 temperature 字段的消息。

    1
    
    curl -v -X POST https://thingsboard.cloud/api/v1/$ACCESS_TOKEN/telemetry --header Content-Type:application/json --data "{humidity:46}"
    

* 请务必替换:

  • $ACCESS_TOKEN 为设备access token

仅通过验证的遥测消息会被持久化。无效的温度值会被丢弃。

后续步骤