NEWS
Probleme mit mqtt client
-
Moin!
In meinem System läuft der mqtt-Server/Client Adapter als Client und greift auf den Mosquitto Broker zu. Funktioniert eigentlich einwandfrei, bis auf folgendes Problem: die Datenpunkte aktualisieren nicht, wenn die Nachricht unverändert, also mit derselben Payload, erneut abgesetzt wird.
Beispiel: Beliebiger Schalter sendet nach Betätigung "on". Über den MQTT-Explorer kann ich erkennen, dass diese Nachricht korrekt abgesetzt wird. Wenn im Datenpunkt des iob mqtt-Client ein identischer Wert steht, erfolgt kein Refresh. Sobald die Nachricht abgeändert ist (z.B. derselbe Schalter sendet "off") erfolgt eine sofortige Aktualisierung des Datenpunktes. Falls danach nochmal auf "off" gedrückt wird, passiert wieder kein Refresh (weil der Wert ja so im Datenpunkt steht). Wenn dann "on" gedrückt wird, wird sofort refreshed.
Welche Einstellung habe ich nicht korrekt vorgenommen?Mein System:
Raspberry Pi 4 Model B, 8 GB
Raspbian GNU / Linux 11 (bullseye)
SD Karte mit 29 GB, 24,4 GB laut IOBroker frei
js-controller: 4.0.24
Node.js: v16.19.1
NPM: 8.19.3
Conbee II -
@oelesen Du hast eventuell angehakt nur Änderungen publizieren. In der Regel sollte keine Option in dieser Konstellation angehakt sein.
-
@mickym
"Nur Änderungen publizieren" ist bei mir nicht angehakt, kann es also nicht sein (oder buggy??). Ist aber (glaub ich) auch nur für das Publizieren, nicht für die Subscription!? -
@oelesen Nein das schaut gut aus. Du müsstest beim erneuten Senden eines topics in jedem Fall eine Änderung des Zeitstempels sehen. Teste mal mit einem anderen mqtt-Client was zu publishen (z.Bsp. NodeRed).
-
@mickym
In einem Versuch mit NodeRed bekomme ich für jede Schalterbetätigung eine sofortige Nachricht.
Das Problem müsste ja demnach tatsächlich im Mqtt-Adapter des IoB liegen, oder? -
@oelesen Nein - mit NodeRed greifst Du ja direkt auf Dein mosquitto zu. Der gibt es wiederum an den iob Adapter weiter. Also müsste grundsätzlich Deine Kommunikation zwischen mosquitto und dem iob Adapter in Ordnung sein. Das heißt es gäbe wirklich ein Problem oder keinen Eingang in Deinem mosquitto. Das heißt Du musst wohl oder übel das mosquitto Log öffnen und schauen, ob Dein Schalter auch was schickt.
Ausser - und da gibts schon Probleme mit dem mqtt-Adapter - wenn Nachrichten mit besonderen Flags geschickt werden. Du hast ja geschrieben im MQTT-Explorer kommt es an und damit greifst Du ja auf Dein mosquitto zurück. Der Schalter muss es also irgendwie anders schicken, als wenn Du über NodeRed was publishst. Das gilt es herauszufinden. Ob man das beheben kann, ist eine andere Frage.
In manchen Situationen arbeitet der mqtt-Adapter wirklich nicht sauber (s. Retain Flags etc.). Dann würde ich aber mal schauen, ob Du den mqtt-Adapter umgehen kannst und mal über NodeRed Deinen Schalter subscriben und schauen, ob da jede Aktualisierung ankommt. Dann hättest Du auch den ultimativen Beweis.
Schau am Besten nochmal die beiden Logs (mqtt-Adapter und mosquitto Log an, ob da was erkennbar ist).
-
@mickym [gelöst]
Vielen Dank mickym für Deine Hilfe!
"Problem" ist gelöst: Jeder Schalterdruck löst eine Aktualisierung des Wertes im IoB aus. Sofern sich der Wert der Payload nicht ändert, bekommt man den Refresh jedoch nicht mit, weil weder der Wert grün aufblinkt, noch die Timestamps aktualisiert werden. Tatsächlich lässt sich der Refresh aber im Skript über den Trigger "Falls Objekt wurde aktualisiert" nachweisen und somit auch verwenden. Damit ist mein Problem gelöst..... -
@oelesen Na der timestamp sollte aber aktualisiert werden - aber vielleicht ist es Cashing Problem im Browser.