【问题标题】:Python/paho MQTT - not receiving messagesPython/paho MQTT - 不接收消息
【发布时间】:2021-10-15 09:11:47
【问题描述】:

我是使用 MQTT 的新手,我想同时运行两个 Python 程序:一个将消息发布到主题,另一个在消息发布到主题时打印出消息。但是,打印消息的回调函数对我不起作用。

这是我拥有的两个程序:

发布消息:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected! Result code: " + str(rc))

client = mqtt.Client(client_id="clientID")
client.on_connect = on_connect
client.username_pw_set(username="username", password="password")
client.loop_start()
client.connect("node02.myqtthub.com", 1883)

while True:
    client.publish("my/topic", "test")

订阅并打印消息:

import paho.mqtt.client as mqtt

def on_message(client, userdata, msg):
    print(msg.payload.decode())

def on_connect(client, userdata, flags, rc):
    print("Connected! Result code: " + str(rc))
    client.subscribe("my/topic")

client = mqtt.Client(client_id="clientID")
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(username="username", password="password")
client.connect("node02.myqtthub.com", 1883)
client.loop_forever()

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 您能telnet node02.myqtthub.com 1883 看看您是否真的可以访问该服务?这是排除任何基本连接问题的良好第一步。
  • 我使用了他们的在线查看器,我可以看到那里显示的消息。另外,如果我使用node02.myqtthub.com 向同一主题发布消息,则第二个 Python 程序(“订阅并打印消息”)会成功显示该消息。

标签: python mqtt


【解决方案1】:

两个程序都使用client_id="clientID"mqtt spec 状态

如果 ClientId 代表一个已经连接到服务器的客户端,那么服务器必须断开现有的客户端 [MQTT-3.1.4-2]。

因此,无论哪个应用程序第二个连接,都会导致第一个应用程序断开连接。要解决此问题,请更改其中一个应用程序中的客户端 ID。

注意:这是对明显错误的评论。提问时,请说明您看到的情况(任何输出、错误、您尝试过的操作等),因为可能还有其他问题。

【讨论】:

  • 谢谢。尽管两个应用程序都成功连接;它只是不运行的 on_message 回调。有趣的是,似乎需要相同的 clientID 才能连接到我正在使用的代理 - 看看:node02.myqtthub.com
  • 添加一个on_disconnect 处理程序,我怀疑您会发现其中一个连接正在断开(这是一个常见问题)。如果未启用日志记录 (on_log) 并将信息添加到您的问题中。与该经纪人关联的网站看起来有些不完整(不妨试试test.mosquitto.org)。
  • 抱歉,我重新检查了 myqtthub.com 网站,这次正常。他们提供的说明涵盖this issue
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多