如何在Thingsboard CE中通过单个MQTT桥接设备接收多主题遥测?
解决方案:单个MQTT桥接设备接收多传感器主题遥测
核心思路
TB中单个MQTT桥接对应唯一设备(CID不可重复),无需创建第二个桥接设备,只需调整转发规则和TB内的数据路由逻辑,即可实现一个桥接接收两个传感器的遥测数据。
具体实现步骤
1. 调整RUT956的MQTT桥接主题映射
确保本地MQTT代理将两个ESP32的主题转发到TB桥接设备的指定路径,两种可选方式:
方式A(带实体标识的转发):
将ESP32_1的原始主题(如sensor/esp32_1/data)转发到TB的主题:v1/devices/me/telemetry?entityType=device&entityId=esp32_1ESP32_2的原始主题(如
sensor/esp32_2/data)转发到:v1/devices/me/telemetry?entityType=device&entityId=esp32_2此方式下,桥接设备会直接将数据投递到TB中对应的
esp32_1和esp32_2设备(需提前创建这两个虚拟设备)。方式B(数据内带设备标识):
如果无法修改ESP32代码,可在RUT956的桥接转发时,给每个传感器的遥测数据添加device_id字段(部分MQTT代理支持消息改写),或直接将两个主题都转发到桥接设备的默认遥测主题v1/devices/me/telemetry,确保ESP32发布的遥测数据自带设备区分标识(比如ESP32_1发布{"device": "esp32_1", "temp": 26})。
2. TB内配置数据路由(针对方式B)
- 在TB中创建两个虚拟设备
esp32_1和esp32_2,无需配置MQTT凭证(数据由桥接设备转发)。 - 打开桥接设备关联的规则链,添加脚本节点,编写解析逻辑提取
device字段:var deviceId = msg.device; metadata.entityId = { "entityType": "DEVICE", "id": deviceId }; return {msg: msg, metadata: metadata, msgType: "POST_TELEMETRY_REQUEST"}; - 添加实体存在检查节点,验证目标设备是否存在,然后连接到遥测节点完成数据投递。
关键注意事项
- 桥接设备的CID、用户名密码仅需配置一次,所有传感器的主题都通过该桥接的MQTT连接上传到TB。
- 确保RUT956的MQTT桥接配置中,转发的主题格式符合TB的MQTT API规范,避免数据丢失。
内容的提问来源于stack exchange,提问作者philMacU
相关产品推荐
相关产品推荐

