如何从ThingsBoard获取客户所有关联设备的遥测数据
规则链 vs REST API:如何获取客户曾关联设备的遥测数据
关键前提
ThingsBoard默认不会自动留存客户与设备的历史关联记录,所以不管选哪种方案,第一步必须先搞定历史关联关系的存储——比如在设备关联/解除关联的事件触发时,用规则链把关联信息(客户ID、设备ID、关联/解除时间)存到客户的自定义属性里,或者外部数据库中。不然根本没法知道哪些设备是C1用过的。
1. REST API 方案(适合一次性/按需查询)
- 适用场景:需要手动查数据、导出报表,或者给外部系统做按需数据拉取的情况。
- 操作步骤:
- 先调用
GET /api/customer/{customerId}/attributes(或者你自定义存储的查询接口),拿到C1所有历史关联的设备ID列表(D1、D2)。 - 针对每个设备ID,调用
GET /api/plugins/telemetry/DEVICE/{deviceId}/values/timeseries接口批量拉取遥测数据,还能通过参数指定时间范围、要查的遥测键。
- 先调用
- 优点:实现简单,不用折腾规则链配置,灵活度高,适合偶尔查一次的需求。
- 缺点:如果要实时获取新产生的遥测数据,得定时轮询,效率不高。
2. 规则链方案(适合实时/持续数据采集)
- 适用场景:需要实时收集历史关联设备的新遥测数据,或者要对这些数据做实时处理(比如聚合、告警、转发到其他系统)的情况。
- 操作步骤:
- 先配置规则链捕获关联事件:用
Entity Created/Updated节点监听客户-设备的关联/解除操作,把关联历史记录存到客户属性或专门的关联表。 - 接着用
Entity Attributes节点读取C1的历史关联设备列表,再通过Telemetry节点订阅这些设备的遥测数据流。 - 最后可以加
Script节点处理数据,或者用Database/External RPC节点把数据存到指定地方。
- 先配置规则链捕获关联事件:用
- 优点:支持实时数据采集和处理,不用轮询,适合长期监控的场景。
- 缺点:配置相对复杂,得熟悉ThingsBoard规则链的节点逻辑,要是只是一次性查数据就有点小题大做了。
总结建议
- 如果是一次性查历史数据或者按需导出数据,直接用REST API,开发成本低,上手快。
- 如果需要实时获取历史关联设备的新数据并持续处理,选规则链方案更高效。
内容的提问来源于stack exchange,提问作者user20568221
相关产品推荐
相关产品推荐

