2016-06-24 19 views
4

Ich verwende dieses Python-Skript, um einen Basis-Paho (MQTT) Teilnehmer zu implementieren, aber unter bestimmten Umständen ruft es on_connect nicht auf.Paho (MQTT) -Client kann keine Verbindung herstellen

Ich habe versucht, die folgenden, alle mit genau dem gleichen Code:

  • in einem pi Raspbery Rennen, Broker auf Desktop-PC (Ubuntu). Werke.
  • Laufen in einem PC (Ubuntu), Broker auf dem gleichen PC. Funktioniert nicht.
  • Laufen in einem PC (Ubuntu), Broker auf anderen PC (Ubuntu). Funktioniert nicht.
  • Laufen in einem PC (Ubuntu), broker.hivemq.com als Broker. Werke.
  • Laufen in einem PC (Ubuntu), broker.hivemq.com (es ist IP) als Broker. Werke.

ich auch in der Regel:

  • mosquitto_sub/pub in Terminal in allen bisherigen Kombinationen. Werke.
  • Offizielle C++ - Paho-Wrapper in allen vorherigen Kombinationen. Werke.

Probieren Sie auch alle Setup-Methoden auf der offiziellen Website aufgeführt. Pythons Paho-Bibliothek scheint also nicht mit meinem lokalen Broker zurecht zu kommen, es sei denn, ich lasse es von meiner Himbeere laufen. Aber die Verwendung desselben Brokers funktioniert gut mit der Poho-Bibliothek von C++ und wenn MQTT vom Terminal verwendet wird. Irgendwelche Ideen von was kann passieren?

 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

Einfach überprüfen, wenn Sie genau den gleichen Code sagen, ändern Sie die IP-Adresse in der 'mqtt_client.connect 'Funktionsaufruf nach Bedarf – hardillb

+0

Ja, ich ändere es bei Bedarf. Das sollte nicht so sein. –

Antwort

6

hatte ich das gleiche Problem und die Änderung der Version von MQTT Protokoll in Client's constructor es gelöst.

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

Da Sie das Protokoll nicht angeben, wird das Standardprotokoll verwendet: MQTTv311.

+1

Danke! Das hat wirklich funktioniert! Vielleicht hat mein Broker versucht, dieses Protokoll zu verwenden. –

Verwandte Themen