2016-06-24 1308 views
4

我正在使用此python脚本来实现基本的Paho(MQTT)订阅者,但在某些情况下它不会调用on_connectPaho(MQTT)客户端无法连接

我尝试以下,都具有完全相同的代码:

  • 在Raspbery PI运行,在台式电脑(Ubuntu的)经纪人。 作品
  • 在Pc(Ubuntu)中运行,经纪人在同一台PC上。 不起作用
  • 在Pc(Ubuntu)中运行,在其他Pc(Ubuntu)上运行。 不起作用
  • 在Pc(Ubuntu)中运行,broker.hivemq.com作为代理运行。 作品
  • 在Pc(Ubuntu)中运行,broker.hivemq.com(它是IP)作为代理。 作品

我也通常会做:

  • mosquitto_sub /在终端酒馆前面所有的组合。 作品
  • 以前所有组合中的官方C++ paho包装。 作品

还试图在官方网站上列出的所有设置方法。所以python的paho库似乎没有与我的本地经纪人相处,除非我从我的覆盆子运行它。但是使用相同的代理可以很好地与C++的paho库以及从终端中使用MQTT配合使用。任何想法可以发生什么?

 import paho.mqtt.client as mqtt 

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

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

    mqtt_client = mqtt.Client() 
    mqtt_client.on_connect = on_connect 
    mqtt_client.on_message = on_message 
    mqtt_client.connect("127.0.0.1",1883) 
    mqtt_client.loop_forever() 
+0

只是检查,当你说完全一样的代码,你在'mqtt_client.connect'函数调用更改IP地址需要 – hardillb

+0

是我改变了它,当neccesary。它不应该是这样。 –

回答

6

我有同样的问题,改变MQTT协议的版本中Client's constructor解决它。

mqtt_client = mqtt.Client("", True, None, mqtt.MQTTv31) 

由于您没有指定协议,因此它使用默认值:MQTTv311。

+1

谢谢!这实际上工作!也许我的经纪人试图使用该协议。 –