Seite 1 von 1

paho.mqtt.client subscribe Frage

Verfasst: Mittwoch 6. Mai 2020, 10:18
von khz-tone
Hallo zusammen!

Ich bin noch ziemlich neu in Python und versuche gerade einen MQTT Client aufzubauen. Soweit klappt das auch ganz gut mit dem Verbinden zum Broker.
Meine Frage bezieht sich auf den Subscribe: Mehmen wir mal das Testbeispiel her das eigentlich in vielen Tutorials zu finden ist.

Code: Alles auswählen

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("StatusDisplay/LED/#")

def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))    

client = mqtt.Client("Test-Client")
client.on_connect = on_connect
client.on_message = on_message
client.connect("Broker-IP", 1883, 60)

client.loop_forever()
Nun habe ich hier im "on_connect" ein Topic abonniert das ich mir im Terminal ausgeben lasse. Funktioniert soweit.
Habe auf meinem Broker noch ein anderes Topic, das ich abonnieren kann, ändere ich die Zeile in,

Code: Alles auswählen

client.subscribe("StatusDisplay/ROW/#")
dann werden mir ab diesem Zeitpunkt beide Topics ausgegeben.

Warum ist das so? Wo liegt mein Fehler?

Bitte um Unterstützung!

Danke und LG
Philipp

Re: paho.mqtt.client subscribe Frage

Verfasst: Mittwoch 6. Mai 2020, 11:08
von sls
Ich kenne MQTT als Pub-Sub nicht, aber ich würde jetzt vermuten dass du das Topic mit "unsubscribe" nicht mehr abbonierst. Wenn dein Program einfach beendet wird kann es sein dass bei einem Neustart noch Nachrichten aus dem vorherigen Topic konsumiert werden.

Re: paho.mqtt.client subscribe Frage

Verfasst: Mittwoch 6. Mai 2020, 11:57
von khz-tone
hmm, wenn ich

Code: Alles auswählen

client.unsubscribe("StatusDisplay/Row")
client.unsubscribe("StatusDisplay/LED")
ausführe, dann startet mein Broker neu. Dadurch verliert auch mein ESP32-Client die Verbindung. Dieser aboniert die selben Topics.

Das sollte wohl nicht sein?

Re: paho.mqtt.client subscribe Frage

Verfasst: Mittwoch 6. Mai 2020, 13:33
von sls
So wie ich das in der Doku gelesen habe sollte demnach:client = mqtt.Client("Test-Client", clean_session=True) gesetzt werden, ansonsten wird bei einem Programmneustart das Topic erneut konsumiert. Das würde zumindest das Verhalten erklären.

Re: paho.mqtt.client subscribe Frage

Verfasst: Mittwoch 6. Mai 2020, 18:27
von khz-tone
Habe mir das jetzt mal angesehen und verschiedenes ausprobiert. Soweit ich das in der Doku sehe, ist der Wert "clean_session=True" standardmäßig in der Klasse gesetzt, braucht demnach ja nicht geschrieben werden.
Habe es trotzdem ausprobiert und kommt auch nichts anderes heraus. Auch "False" liefert mir immer wieder die abonierten Topics.

Habe es auch mit der Reinitialisierung des Clients ausprobiert.

Code: Alles auswählen

client = mqtt.Client("Test-Client", clean_session=True)
client.reinitialise("Test-Client", clean_session=True)
Leider auch ohne Erfolg!

Stehe ich am Schlauch....