gpt4 book ai didi

Python 泛美卫生组织/MQTT : Detecting Connect error

转载 作者:太空宇宙 更新时间:2023-11-03 15:37:04 24 4
gpt4 key购买 nike

简而言之,我有一个工作正常的 Paho/MQTT 示例集,但我在检测错误时遇到了困难。具体来说,我没有收到 on_connect 回调,并且当给出无效的 UserID/Pswd 组合时,它会默默地失败。事实上,从各种迹象来看,一切都很好!

我做错了什么?

(snip)

def on_connect(client, userdata, flags, rc):
print("Connected with flags [%s] rtn code [%d]"% (flags, rc) )

def on_disconnect(client, userdata, rc):
print("disconnected with rtn code [%d]"% (rc) )

def on_publish(client, userdata, msgID):
print("Published with MsgID [%d]"% (msgID) )


mqttc = mqtt.Client()
mqttc.on_connect = on_connect
mqttc.on_disconnect = on_disconnect
mqttc.on_publish = on_publish

mqttc.username_pw_set(Q_USER, Q_PSWD)

rc=mqttc.connect(Q_BROKER, Q_PORT)
print "Return="+str(rc)

mqttc.loop_start()
rc=mqttc.publish(Q_TOPIC, "Hello, World!")
print "Return="+str(rc)

mqttc.disconnect()
mqttc.loop_stop()

当UserID或Pswd故意错误时输出:

Return=0
Published with MsgID [1]
Return=(0, 1)
disconnected with rtn code [0]

最佳答案

事实证明这是几个不同的问题。

  • 首先,Connect 返回时并未真正连接。添加带有 Sleep 的等待循环,直到收到 Connect 回调至关重要。只有回调告诉您连接成功或失败。
  • 其次,当我看到返回代码时,我发现我的返回代码因协议(protocol)版本不匹配而失败。我的 Pi 所使用的 Mosquitto 版本真的很旧。发现一篇文章将我的系统指向更新版本。解决了版本不匹配的问题。
  • 第三,在Connect之前添加“loop_start()”不起作用。直觉的地方并不是正确的地方。
  • 第四,需要在 Disconnect 之前添加 Sleep() 调用,否则您将看不到所有回调。

底线是,虽然文档展示了如何使用 API,但它们并没有展示如何编写用于生产的健壮程序。

我仍在寻找方法来了解所有正在进行的发布调用何时已清除,而不是使用盲目的 Sleep 调用,但我原来的问题已解决。

关于Python 泛美卫生组织/MQTT : Detecting Connect error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42451427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com