Solved: Fehler bei MQTT publish

Hallo,

ich habe hier ein seltsames Verhalten, welches mir graue Haare kostet.
Ich habe folgenden Flow:
flow

Die Constant-Node sendet beim Starten den String “Test Message 1” per MQTT an das Topic “test/topic”. Anschließend empfängt die MQTT-Subscribe-Node die Nachricht und leitet diese an das Topic “test/anothertopic”.
Wenn ich im Broker lausche würde ich also folgende Nachrichten erwarten:

test/topic Test Message 1
test/anothertopic Test Message 1

So die Theorie. Jedoch kommen beim Broker kontinuierlich folgende Nachricht an (mehrere pro Sekunde):

test/topic Test Message 1
test/topic Test Message 1
test/topic Test Message 1
....

Wenn ich jedoch die Funktion “Workaround” zwischenschalte, funktioniert es wie erwartet (in diesem Fall kommt bei test/anothertopic “Test Message 2” an.

$msg=[];
$msg['payload']="Test Message 2";
return $msg;

Es scheint, dass die $message Einfluss auf MQTT-Sub-Node hat. Wenn ich zum Beispiel kein neues Struct erstelle, sondern $message wie in folgender Funktion weiterleite, bekomme ich fortlaufend “test/topic Test Message 3”.

$message['payload']="Test Message 3";
return $message;

Dies ist wahrscheinlich ein Fehler in der Node, da $message doch keinen Einfluss auf den Sender haben sollte…

Ich nutze homegear 0.7.30 unter Arch Linux.

Ich würde mich freuen, wenn jemand dieses falsche Verhalten reproduzieren kann.

Grüße
Sven

P.S.: Wie kann ich einen Flow exportieren, um ihn z.B. hier zu teilen?

Hallo @avanc,

das ist kein Fehler. Der Grund ist, dass sich über $message['topic'] das Topic setzen lässt. Das überschreibt die Einstellung in der Ausgabenode. Die MQTT-Eingangsnode setzt $message['topic'] auf test/topic und damit wird die Einstellung in der Ausgabenode ignoriert. Jede filternde und nicht weiterleitende Node entfernt $message['topic']. Ich könnte dafür auch eine strip-Node bauen (wäre in wenigen Minuten gemacht)?

Viele Grüße

Sathya

Ah, das erklärt auch das Dauerfeuer der Nachrichten…
Wäre das ein spezieller Strip-Node nur für MQTT um den Topic zu entfernen? Alternativ könnte man auch in der MQTT-Sende-Node ein Häkchen zum überschreiben hinzu fügen…

Aber als Goldene Regel habe ich schon mal mitgenommen, niemals MQTT-Nodes direkt zu verbinden!

Nee, für alle Nodes. Ich hab sie jetzt mal implementiert. Ist im nächsten Nightly.

Danke für die schnelle Lösung.