我已经安装了Mosquitto并在终端中使用没有问题,也为c ++安装了paho,mosquitto和paho都运行良好。 然后通过pip为python安装了paho。现在我正在尝试使用此代码测试它,但on_message和on_connect函数永远不会被调用。我在做
my_struct var;
var.a = 5;
var.p = &(var.a);
printf("%d\n",*(var.p)); //this will work
虽然python脚本运行但它不起作用。它永远不会到达打印“on_message!”的行
mosquitto_pub -h localhost -t "test" -m "This is a message"
我做错了什么?
答案 0 :(得分:1)
以下对我来说很好。
我从回调中删除了self
并将mqtt_client.loop_forever()
import paho.mqtt.client as mqtt
def on_connect(mqtt_client, obj, flags, rc):
mqtt_client.subscribe("test")
def on_message(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"
mqtt_client.loop_forever()
答案 1 :(得分:1)
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
回调,对我造成问题的是,我像Client
那样调用了connack_string
方法,但事实并非如此。查看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 !!
您还可以尝试从-h localhost
命令中省略mosquitto_pub
部分,如下所示:
mosquitto_pub -t "test" -m "This is a message"
此外,请注意on_connect
回调收到的参数数量( 4 )。这是给其他阅读这篇文章的人的建议。 :)
答案 2 :(得分:0)
这是一个旧线程,但我遇到了类似的问题。我有:
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_message将永远不会执行。 身材好吗?