2016-06-24 308 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

謝謝!這實際上工作!也許我的經紀人試圖使用該協議。 –

相關問題