4、遥测数据入门:遥测数据上传、数据存储、数据查询、数据可视化基础
遥测数据,说白了就是设备上报的那些「活数据」。温度、湿度、电压、转速……这些才是物联网平台的灵魂。没有遥测数据,你的设备就是个哑巴。
我记得刚接触 ThingsBoard 时,最困惑的就是:数据到底怎么进去的?存哪了?怎么查出来?今天咱们就把这条链路彻底打通。
4.1 遥测数据上传:设备怎么「说话」
设备要上报数据,无非两种方式:MQTT 或者 HTTP。我个人习惯用 MQTT,毕竟轻量、实时,适合物联网场景。
先看一个最简单的 MQTT 上传例子。假设你有一个温湿度传感器,要上报数据到 ThingsBoard:
mosquitto_pub -d -q 1 \
-h "你的服务器IP" \
-p 1883 \
-t "v1/devices/me/telemetry" \
-u "设备访问令牌" \
-m '{"temperature": 25.6, "humidity": 68.2}'
这里的关键点就两个:主题(topic) 和 消息格式。主题必须是 v1/devices/me/telemetry,消息必须是 JSON 格式。嗯,就这么简单。
http://你的服务器IP:8080/api/v1/设备令牌/telemetry,效果一样。但我还是推荐 MQTT,毕竟长连接省资源。
我在项目中遇到过一个问题:设备上报频率太高,每秒几十条,结果服务器压力山大。后来我加了限流策略,在规则链里做聚合处理。这个后面会细讲。
4.2 数据存储:数据到底存哪了?
数据上传后,ThingsBoard 默认存在 Cassandra 或 PostgreSQL 里。你可能会问:为什么有两个选项?
说白了,Cassandra 适合海量时序数据写入,但查询能力弱。PostgreSQL 查询强,但写入吞吐量有限。我个人建议:生产环境用 Cassandra + PostgreSQL 混合模式。时序数据进 Cassandra,元数据进 PostgreSQL。
来看看数据表结构。以 PostgreSQL 为例,遥测数据存在 ts_kv 和 ts_kv_latest 两张表里:
| 表名 | 作用 | 关键字段 |
|---|---|---|
| ts_kv | 存储历史遥测数据 | entity_id, key, ts, bool_v, str_v, long_v, dbl_v |
| ts_kv_latest | 存储最新一条遥测数据 | entity_id, key, ts, bool_v, str_v, long_v, dbl_v |
注意看,ts_kv 里同一个 key 会有多条记录,按时间戳排列。而 ts_kv_latest 只保留最新一条。为什么要分两张表?你想想看,查最新值如果去扫历史表,那效率得多低。
4.3 数据查询:怎么把数据「捞」出来
数据存进去了,怎么查?ThingsBoard 提供了两种方式:REST API 和 WebSocket。
先看 REST API。假设你要查某个设备最近一小时的温度数据:
GET /api/plugins/telemetry/DEVICE/{设备ID}/values/timeseries?keys=temperature&startTs=1680000000000&endTs=1680003600000
返回结果长这样:
{
"temperature": [
{"ts": 1680000001000, "value": "25.6"},
{"ts": 1680000002000, "value": "25.8"},
{"ts": 1680000003000, "value": "26.1"}
]
}
注意时间戳是毫秒级的。我刚开始用的时候,传了秒级时间戳,结果查出来全是空的。嗯,这个坑我踩过。
如果你需要实时推送,用 WebSocket:
ws://你的服务器IP:8080/api/ws/plugins/telemetry?token=设备令牌
连接成功后,订阅对应的设备 ID 和 key,数据就会实时推过来。这个在仪表盘上做实时曲线图特别有用。
4.4 数据可视化基础:让数据「说话」
数据查出来了,怎么展示?ThingsBoard 的仪表盘功能很强大。我个人最喜欢的是 时序折线图 和 数字显示 这两个组件。
创建一个简单的温度曲线图,步骤是这样的:
- 进入仪表盘,添加一个新别名(Alias),指向你的设备
- 添加时序折线图组件,数据源选择刚才的别名
- 在数据源配置里,key 填
temperature - 设置时间范围,比如「最近1小时」
就这么几步,一条温度曲线就出来了。你还可以叠加多条曲线,比如温度和湿度一起看。
还有一个实用技巧:阈值告警线。比如温度超过 30 度时,曲线变红。这个在仪表盘的「高级设置」里可以配,后面讲告警时会详细说。
4.5 实战:从零搭建一个遥测数据看板
光说不练假把式。咱们来做一个完整的实战:
- 创建一个模拟设备,用 MQTT 上传温湿度数据
- 在 ThingsBoard 里查看数据是否存储成功
- 创建一个仪表盘,展示温湿度曲线
- 添加一个数字显示组件,展示最新温度值
我建议你先用 mosquitto_pub 手动发几条数据,确认链路通了,再写自动化脚本。这样排查问题会快很多。
记得有一次,我帮客户排查问题,发现数据上传了但仪表盘不显示。查了半天,原来是仪表盘的时间范围设成了「最近15分钟」,而数据是1小时前的。嗯,这种低级错误,谁还没犯过呢?
好了,遥测数据的基础链路就这些。下一章咱们会深入规则链,看看怎么对数据做清洗、转换和告警。到时候你会发现,今天学的这些,都是地基。