基于ThingsBoard与Node-RED的跨设备数据转发方案需求
实现ThingsBoard父设备按loggerId转发数据到子设备节点
场景说明
我们有多台基于Node-RED开发的数据记录仪,均向ThingsBoard平台传输数据。其中一台记录仪对接两台物理设备,这两台设备在ThingsBoard中各自拥有独立的设备节点。此前因Node-RED无法同时开启多个MQTT连接,我们通过在JSON消息中添加loggerId字段解决了连接问题,但导致所有数据统一归集到了ThingsBoard的单个设备节点下。现在需要搭建一个父设备作为统一数据接收入口,通过规则链读取JSON消息中的loggerId字段,将数据转发至对应子设备节点进行存储与处理。
实现步骤
1. 父设备配置
- 在ThingsBoard中创建一个父设备,作为所有Node-RED记录仪的统一数据入口。
- 配置所有Node-RED记录仪的MQTT连接,使用父设备的设备令牌进行认证,确保所有数据都发送到该父设备。
- 确保Node-RED发送的JSON消息中包含
loggerId字段,字段值需与目标子设备的设备ID完全匹配(设备ID具有唯一性,避免名称冲突)。
2. 规则链配置(核心转发逻辑)
进入ThingsBoard规则链管理页面,按以下步骤配置转发规则:
- 添加消息类型过滤节点:选择过滤类型为
POST_TELEMETRY_REQUEST,仅处理父设备上报的遥测数据。 - 添加脚本处理节点:编写JavaScript脚本提取
loggerId并构造转发消息,示例代码:// 提取loggerId和原始遥测数据 const targetDeviceId = msg.payload.loggerId; const telemetryData = {...msg.payload}; // 可选:移除loggerId字段,避免冗余存储 delete telemetryData.loggerId; return { msg: telemetryData, metadata: { targetDeviceId }, msgType: "POST_TELEMETRY_REQUEST" }; - 添加设备遥测转发节点:配置该节点使用
metadata.targetDeviceId作为目标设备ID,将处理后的遥测数据转发至对应子设备。 - 节点连接:按顺序连接「消息类型节点」→「脚本节点」→「设备遥测节点」,确保数据流路径正确。
- 激活规则链:将配置好的规则链关联到父设备所属租户,并启用规则链。
3. 验证测试
- 从Node-RED发送携带不同
loggerId的测试数据到父设备。 - 登录ThingsBoard查看对应子设备的遥测数据面板,确认数据已正确转发并存储。
数据转发流程图

内容的提问来源于stack exchange,提问作者Jack Marshall
相关产品推荐
相关产品推荐

