Paho订户on_消息/on_连接不工作 我安装了蚊子并在终端中使用,没有问题,也安装了PAHO C++,mosquitto和PHO都很好用。 然后通过pip安装了用于python的paho。现在我试图用这段代码来测试它,但是on_消息和on_connect函数从未被调用。我在做什么
Paho订户on_消息/on_连接不工作 我安装了蚊子并在终端中使用,没有问题,也安装了PAHO C++,mosquitto和PHO都很好用。 然后通过pip安装了用于python的paho。现在我试图用这段代码来测试它,但是on_消息和on_connect函数从未被调用。我在做什么,python,mqtt,mosquitto,paho,Python,Mqtt,Mosquitto,Paho,mosquitto\u pub-h localhost-t“test”-m“这是一条消息” 虽然python脚本运行,但它不工作。它永远不会到达打印“on_message!” 我做错了什么?以下内容对我来说很好 我已从回调中删除了self,并将循环替换为mqtt\u client.loop\u ever() 只有当您订阅了某个主题时,才会调用on_消息的回调。 为此,需要调用该方法。例如: print "Initializing subscriber" mqtt_client = mqtt.Cl
mosquitto\u pub-h localhost-t“test”-m“这是一条消息”
虽然python脚本运行,但它不工作。它永远不会到达打印“on_message!”
我做错了什么?以下内容对我来说很好 我已从回调中删除了
self
,并将循环替换为mqtt\u client.loop\u ever()
只有当您订阅了某个主题时,才会调用
on_消息的回调。
为此,需要调用该方法。例如:
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
回调,对我来说问题的原因是我调用了该方法,因为它是客户机的方法,但它不是。查看,我们看到它是直接在模块中定义的,不是类中的:
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\u pub
命令中省略-h localhost
部分,如下所示:
mosquitto_pub -t "test" -m "This is a message"
另外,注意连接上的回调接收的参数数量(4)。这是给阅读本文的其他人的建议 这是一个旧线程,但我遇到了一个类似的问题。我有:
def on_message (client, userdata,message):
print("received message", str(message.payload.decode("utf-8")
client.loop_start()
client.subscribe(topic)
client.on_message=on_message
time.sleep(30)
client.loop_stop()
如果我将时间从30更改为300,则不会执行on_消息。
去图?你是在用mosquitto_pub-h localhost-t“test”-m“这是一条消息”吗?因为它对我仍然不起作用。可能是我的系统中的一些东西。mosquitto_pub-t test-m foo
但是它足够近了(默认代理是localhost,不需要单字消息的引号)Ok!即使使用“mosquitto_pub-t test-m foo”,仍然不起作用。似乎是我的系统里的东西。非常感谢。对我来说,它是与self
回调一起工作的。然而,我的问题是,我没有调用任何循环*
函数。编辑:我错了,对于connect
方法,它使用self
对我有效,但是对于on_message
方法,使用self
的版本无效。实际上,它没有调用我的on_connect回调,因为它缺少1个参数。它在新安装中不起作用,尽管它在以前的安装中已经工作了2年!我很高兴我帮了忙:)谢谢你的评论!
mosquitto_pub -t "test" -m "This is a message"
def on_message (client, userdata,message):
print("received message", str(message.payload.decode("utf-8")
client.loop_start()
client.subscribe(topic)
client.on_message=on_message
time.sleep(30)
client.loop_stop()