gpt4 book ai didi

python - Paho Python MQTT 客户端连接成功但未调用 on_connect 回调

转载 作者:行者123 更新时间:2023-12-02 08:33:11 32 4
gpt4 key购买 nike

我在 Raspberry Pi 上有一个简单的脚本,每 3 秒发布一条示例消息。我已经声明了 on_connect、on_publish 和 on_disconnect 回调。该客户端连接成功,但未调用 on_connect,发布并调用 on_publish,断开连接并调用 on_disconnect。

这是我的脚本

import paho.mqtt.client as mqtt
import time

def on_connect(mqttc, userdata, rc):
print("Connected with result code "+str(rc))
if rc!=0 :
mqttc.reconnect()

def on_publish(mqttc, userdata, mid):
print "Published"

def on_disconnect(mqttc, userdata, rc):
if rc != 0:
print("Unexpected disconnection. Reconnecting...")
mqttc.reconnect()
else :
print "Disconnected successfully"

# Setup MQTT
# broker='test.mosquitto.org'
broker = 'iot.eclipse.org'
broker_port=1883

# Create a client instance
mqttc=mqtt.Client(client_id="MyClient")
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.on_disconnect = on_disconnect

while 1:

mqttc.connect(broker, broker_port, 60)
# print "Connected." # I don't want this message.
# Why isn't the on_connect callback invoked?

try:
topic = "this/is/a/test/topic"
payload = "test_message"
print "Publishing " + payload + " to topic: " + topic + " ..."
mqttc.publish(topic, payload, 0)

except Exception as e:
print "exception"
log_file=open("log.txt","w")
log_file.write(str(time.time())+" "+e.__str__())
log_file.close()

mqttc.disconnect()
print ""
time.sleep(3)

虽然这个小“bug”并不影响消息发布,而这正是我想要实现的目标,但是为什么会发生这种情况以及如何解决它?

最佳答案

这不起作用的原因是您没有调用任何 loop*() 函数。它们处理网络流量。如果您不使用它,则无法保证您的传出消息将被发送,并且绝对不会处理传入消息。

loop_forever() 是一个处理网络循环的阻塞调用 - 可能不是您想要的。

loop_start() 启动一个线程来处理网络循环,然后立即返回。

我会这样做:

mqttc.connect(broker, broker_port, 60) # Don't forget to handle errors
mqttc.loop_start()

while 1:
try:
topic = "this/is/a/test/topic"
payload = "test_message"
print "Publishing " + payload + " to topic: " + topic + " ..."
mqttc.publish(topic, payload, 0)

except Exception as e:
print "exception"
log_file=open("log.txt","w")
log_file.write(str(time.time())+" "+e.__str__())
log_file.close()

print ""
time.sleep(3)

您仍然需要像 @Kiran 所说的那样修复 on_connect 回调。

无需每次都断开连接 - 事实上,当您断开连接时,并不能保证您的消息一定会发送出去。您应该使用 on_publish 回调来了解消息何时发送。

如果您想做一个简单的连接-发布-断开连接,那么可以使用 paho.mqtt.publish 帮助程序模块:

import paho.mqtt.publish as publish

while 1:
try:
topic = "this/is/a/test/topic"
payload = "test_message"
print "Publishing " + payload + " to topic: " + topic + " ..."
publish.single(topic, payload, 0, host=broker, port=broker_port)

except Exception as e:
print "exception"
log_file=open("log.txt","w")
log_file.write(str(time.time())+" "+e.__str__())
log_file.close()

print ""
time.sleep(3)

关于python - Paho Python MQTT 客户端连接成功但未调用 on_connect 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36422376/

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