【问题标题】:MQTT: unable to subscribe to own $ topicMQTT:无法订阅自己的 $ 主题
【发布时间】:2017-05-12 07:10:45
【问题描述】:

我目前正在运行多个 MQTT IOT 设备(mqtt 硬件:raspberry pi 2,mqtt 代理:Mosquitto,设备主要是 ESP8266)。作为固件,我正在运行 esp8266-homie 固件的自定义混合。这几个月都运行良好,但现在我遇到了关于使用 $ 主题的问题。

一个简单的例子,我的设备将他们的在线状态发布到一个主题:home/device/$online 并且当设备断开连接时,遗嘱消息将确保它变为 false。

运行此命令时,我可以看到该主题(以及其他主题):

mosquitto_sub -h <brokerIP> -u <username> -P <password>  -t home/device/# -v

输出:

home/device/$online true

所以主题在那里并且确实包含数据,太棒了!所以逻辑规定运行这个应该返回真值:

mosquitto_sub -h <brokerIP> -u <username> -P <password>  -t home/device/$online -v

输出: 什么都没有

但遗憾的是,这 2 天后没有返回任何内容。我能想到的唯一改变可能是我的树莓派更新。

【问题讨论】:

    标签: mqtt


    【解决方案1】:

    $ 是向 shell(很可能是 bash)表示环境变量的字符,因此它会在执行命令之前尝试使用存储在环境变量中的值来扩展 $online

    由于$online 很可能没有设置任何内容,这意味着实际执行的是:

    mosquitto_sub -h <brokerIP> -u <username> -P <password>  -t home/device/ -v
    

    您可以通过引用主题字符串来解决此问题,如下所示:

    mosquitto_sub -h <brokerIP> -u <username> -P <password>  -t 'home/device/$online' -v
    

    【讨论】:

      猜你喜欢
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2021-08-24
      相关资源
      最近更新 更多