Skip to content

ThingsBoard 使用持久化 RPC 案例场景 ​

正文与配图来自原稿。设备 B 可能离线时,如何让其上线后仍收到 A 侧消息——用 持久化 RPC(Persistent RPC)。

1、概述 ​

场景:扫描枪 A 上报到 ThingsBoard,需要把数据发给设备 B。在线时给 B 下发一条 RPC 即可;难点是 B 可能离线——如何保证 B 上线后仍能收到 A 的消息。

有团队为此折腾很久。解决办法是 ThingsBoard 的持久化 RPC:RPC 会落库并带过期时间,设备在有效期内上线仍可取到。

官方说明:
https://thingsboard.io/docs/user-guide/rpc/

2、问题分析 ​

关键:B 上线后仍能收到 A→B 的消息。

要点:

  1. 用 RPC 下发
  2. A 与 B 建立关联,才能从 A 的消息切换发起者到 B
  3. RPC 配成持久化(写入数据库 + 过期时间);在过期前上线即可收到

持久化 RPC 相关说明

3、案例实操 ​

3.1、创建设备 ​

创建 deviceA、deviceB:

创建设备 A/B

3.2、绑定关系 ​

由 deviceA(上报方)创建到 deviceB 的关系:

A 创建与 B 的关系

3.3、编写规则链 ​

规则链核心已标注:

规则链整体

① script:组装下发给 deviceB 的参数,并开启持久化 RPC:

script 组装持久化 RPC

② change originator:按关系查询,把发起者切到 deviceB:

change originator 到 B

③ rpc call request:向 deviceB 发 RPC:

rpc call request

3.4、模拟测试 ​

连接 deviceA:

deviceA 连接配置

deviceA 已连接

deviceA 发送遥测:

deviceA 上报遥测

此时先不连 deviceB(B 离线)。再创建 / 连接 deviceB:

准备 deviceB

连接 deviceB

deviceB 订阅:

text
v1/devices/me/rpc/request/+

此前 A 已发过数据,看 B 上线后能否收到:

B 上线收到持久化 RPC

再验证「断开 B → A 再发 → 约 5 分钟内重连 B 仍能收到」:

断开 deviceB:

断开 B

deviceA 再次发送:

A 再次上报

重连 B,确认仍能订阅到:

重连后仍收到


补充(辅) ​

点说明
持久化RPC 存库;需在 script / API 中打开 persistent,并设合理 expiration
过期超过过期时间未上线则不再投递;案例按「约 5 分钟内」验证,以你配置为准
订阅B 必须订阅 v1/devices/me/rpc/request/+(或你自定义的 RPC Topic)
一对多多台 B 可配合 duplicate to related 再持久化 RPC

相关文章 ​