gpt4 book ai didi

python - Paho 用户 on_message/on_connect 不工作

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

我已经安装了 Mosquitto 并在终端中使用没有问题,还为 c++ 安装了 paho,mosquitto 和 paho 都运行良好。然后通过 pip 安装 paho for python。现在我正在尝试使用此代码对其进行测试,但永远不会调用 on_message 和 on_connect 函数。我在做

mosquitto_pub -h localhost -t "test"-m "This is a message"

虽然 python 脚本运行但它不工作。它永远不会到达打印“on_message!”的那一行

import paho.mqtt.client as mqtt

def on_connect(self, mqtt_client, obj, flags, rc):
mqtt_client.subscribe("test")

def on_message(self, mqtt_client, obj, msg):
print "on_message()"


print "Initializing subscriber"
mqtt_client = mqtt.Client()
mqtt_client.on_connect = on_connect
mqtt_client.on_message = on_message
mqtt_client.connect("localhost",1883)
print "Listening"
while True:
mqtt_client.loop()

我做错了什么?

最佳答案

on_message 回调只有在您订阅 主题时才会被调用。为此,您需要调用 subscribe方法。例如:

print "Initializing subscriber"
mqtt_client = mqtt.Client()
mqtt_client.on_connect = on_connect
mqtt_client.on_message = on_message
mqtt_client.connect("localhost", 1883) # "localhost" or IP or
mqtt_client.subscribe("test") # topic name, same as the "-t" argument in mosquitto_pub
print "Listening"
mqtt_client.loop_forever()

至于 on_connect 回调,对我造成问题的是我调用了 connack_string方法,因为它是 Client 的方法,但它不是。看着 source code ,我们看到它是直接在模块中定义的,在类中:

def connack_string(connack_code):

所以,我替换了这个:

def connect_callback(client, userdata, flags, rc):
print("Connection attempt returned: " + client.connack_string(rc)) # client !!

用这个:

def connect_callback(client, userdata, flags, rc):
print("Connection attempt returned: " + mqtt.connack_string(rc)) # mqtt !!

您还可以尝试从 mosquitto_pub 命令中省略 -h localhost 部分,如下所示:

mosquitto_pub -t "test" -m "This is a message"

另外,注意 on_connect 回调收到的参数数量 (4)。这是对所有阅读这篇文章的人的建议。 :)

关于python - Paho 用户 on_message/on_connect 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37947164/

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