You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

订阅ThingsBoard MQTT主题时客户端断开、无法接收状态更新问题求助

问题原因
  • 订阅主题错误:ThingsBoard中v1/devices/me/attributes是设备向平台上报属性的上行主题,平台不会往这个主题推送任何消息,自然收不到状态变更通知。
  • 代码存在断连隐患:message回调中写了mqttClient.end(),后续就算收到消息也会主动断开连接,无法持续接收更新。
  • 可选排查:如果出现刚订阅就断开的情况,可新增错误日志监听排查是否存在令牌冲突问题:同一个设备访问令牌同时只能有一个MQTT连接,新连接会挤掉旧连接。
修复方案

1. 代码修复

修正要点:

  • 订阅接收属性变更的专用下行主题*v1/devices/me/attributes/updates*
  • 删除message回调中的主动断连逻辑
  • 新增错误事件监听方便排查问题

修正后代码:

const mqttEndpoint = 'MyLocalIpAddress:1883'
// 替换为属性更新订阅主题
const MQTT_TOPIC = 'v1/devices/me/attributes/updates'

const mqttClient = mqtt.connect(`mqtt://${mqttEndpoint}`, {
        username: '123456789asdf',
        rejectUnauthorized: false,
        // 可选:设置keepalive避免空闲被断连
        keepalive: 30
    })

    mqttClient.on('connect', function () {
        mqttClient.subscribe(MQTT_TOPIC, function (err) {
            if (!err) {
              console.log('subscribed')
            } else {
              console.error('订阅失败: ', err)
            }
        })
    })
      
    mqttClient.on('message',  (topic, message) => {
        console.log('topic', topic);
        console.log('message', message.toString());
        // 移除主动断连逻辑,保持连接持续接收后续更新
        // mqttClient.end()
    })

    mqttClient.on('close', () => {
        console.log('mqtt: connection closed');
    })

    // 新增错误监听
    mqttClient.on('error', (err) => {
        console.error('mqtt错误: ', err);
    })

如果需要首次连接时先拉取当前全量属性,再监听后续变更,可以在connect回调中新增以下逻辑:

// 订阅全量属性返回的主题
mqttClient.subscribe('v1/devices/me/attributes/response/+')
// 发起全量属性拉取请求
mqttClient.publish('v1/devices/me/attributes/request/1', '{}')

2. mosquitto测试命令修正

替换订阅主题为属性更新主题即可:

mosquitto_sub -d -h "localhost" -t "v1/devices/me/attributes/updates" -u "123456789asdf"

测试时到ThingsBoard后台修改对应设备的属性,即可收到推送的变更消息。

额外排查项

如果修改后仍然收不到消息,检查以下两点:

  • 确认用户名123456789asdf是对应设备的正确访问令牌,无拼写错误
  • 确认ThingsBoard后台该设备处于激活状态,未被禁用

内容的提问来源于stack exchange,提问作者JN_newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:24:03