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()