NEWS
MQTT Adapter: Alle Klienten reagieren
-
So heute noch mal ein paar Ergänzungen:
Ich habe beim MQTT Adapter einmal das Logging mit angemacht und haben folgendes gesehen
mqtt.0 2024-08-11 07:50:02.549 info Client [Staubsauger] publishOnSubscribe send all known states mqtt.0 2024-08-11 07:50:02.547 info Client [Staubsauger] publishOnSubscribe send all known states mqtt.0 2024-08-11 07:50:02.546 info Client [Staubsauger] publishOnSubscribe send all known states mqtt.0 2024-08-11 07:50:02.347 info Client [Staubsauger] subscribes on "cmnd/Staubsauger_fb/#" with regex /^mqtt\.0\.cmnd\.Staubsauger_fb\..*/ mqtt.0 2024-08-11 07:50:02.347 info Client [Staubsauger] subscribes on "cmnd/Staubsauger_fb/#" with regex /^cmnd\.Staubsauger_fb\..*/ mqtt.0 2024-08-11 07:50:02.346 info Client [Staubsauger] subscribes on "cmnd/tasmotas/#" with regex /^mqtt\.0\.cmnd\.tasmotas\..*/ mqtt.0 2024-08-11 07:50:02.346 info Client [Staubsauger] subscribes on "cmnd/tasmotas/#" with regex /^cmnd\.tasmotas\..*/ mqtt.0 2024-08-11 07:50:02.345 info Client [Staubsauger] subscribes on "cmnd/Staubsauger/#" with regex /^mqtt\.0\.cmnd\.Staubsauger\..*/ mqtt.0 2024-08-11 07:50:02.345 info Client [Staubsauger] subscribes on "cmnd/Staubsauger/#" with regex /^cmnd\.Staubsauger\..*/
Das sieht Ähnlich bei den anderen Klienten aus. Ich bin mir aber nicht sicher, ob das so richtig ist.
Zusätzlich sehen die Einstellung der Klienten für MQTT wie folgt aus:
Die Einstellungen für den MQTT Adapter sind folgende:
Was mache ich falsch?
-
@mickym Ist MQTT nicht eines Deiner „Spezialgebiete“?
Gruss, Jürgen
-
@sparli falsches Topic, es müsste
sendTo("mqtt.0",'sendMessage2Client',{ topic: "cmnd/Staubsauger/POWER", message: true , retain: true });
sein um Befehle zu senden (unterhalb von
cmnd
kann du jedes mögliche Tasmota-Command nutzen).Das Resultat steht dann unterhalb von
stat
, für Power als extra Datenpunkt, für alles andere dann inResult
Tasmota nutzt getrennte Pfade für Steuerung und Ergebnisse (
tele
gibt es auch noch für regelmäßige Statusmeldungen) -
Vielen Dank für die Antwort.
Ich habe das jetzt einmal probiert, jedoch ändert sich am verhalten nichts.Ich muss in den nächsten Tagen Mal eine erneute Testumgebung für den iobroker aufsetzen und nur das dort noch mal testen.
Gibt es noch einen weiteren Ort, wo ich nachschauen könnte?
Viele Grüße
Stefan -
Ich stimme @BananaJoe in allem zu, habe aber auch keine direkte Erklärung für das seltsame Verhalten. Allerdings kann auch das Fehlen des prefix schon zu diesem eigenartigen Verhalten führen.
Ausserdem wurde nicht geschrieben, ob der Adapter als Broker oder als Client betrieben wird. Als Broker/Server hat dieser Adapter etwas merkwürdiges Verhalten und ich habe auch schon festgestellt, dass das mit dem Retain Flag nicht immer sauber arbeitet, wobei ich das Retain Flag generell nicht nutzen würde. Im Prinzip werden dann bei jedem Connect die Kommandos halt nochmals geschickt.
Ich empfehle generell dieses Adapter als Client an mosquitto zu betrieben.Evtl. hat das reagieren der anderen Steckdosen gar nichts mit dem Kommando zu tun, sondern dass die alle zuletzt eingeschaltet wurden und sich wiederverbunden haben. Ist aber Spekulation.
Generell würde ich auch bei den Einstellungen das "Nur bei Änderungen" Haken wegmachen, der ist eigentlich nur sinnvoll, wenn man Zustände schickt. Ausserdem widerspricht es dem normalen mqtt-Verhalten.
Ich würde halt in jedem Fall, wenn ich was über mqtt schicke - gleichzeitig die Konsole in Tasmota öffnen - auch die der anderen Geräte, um zu sehen, ob da was ankommt.
Bei mir schaut das nur etwas anders aus, da ich eine andere Struktur bevorzuge und die Prefixe lieber unter den Geräten habe, als die Standardkonfiguration, wo die Geräte an 3 unterschiedlichen Orten im Prefix auftauchen.
Aber wie @BananaJoe sagte
dein Befehl lautet:
sendTo("mqtt.0",'sendMessage2Client',{ topic: "cmnd/Staubsauger/POWER", message: true , retain: true });
ggf. weil es tasmota eh übersetzt kannst Du auch "on"/"off" verwenden und das retain Flag mal auf false setzen. Um das retain Flag wieder zu löschen musst Du retain:true lassen und eine leere Nachricht schicken. Aber wie gesagt, ich weiß nicht ob der Adapter damit richtig umgeht.
Im Übrigen halt auch schauen, dass keine Skripte irgendwas schalten.
Am Besten halt auch nochmal alle Datenpunkte löschen bzw. die Instanz neu installieren. Die Datenpunkte kommen ja automatisch durch das Gerät oder durch das Publishen.
-
Auch dir vielen Dank.
Ich habe zwar mein Problem mit dem sendTo nicht gelöst, aber ein workaround gefunden.
Hintergrund: Ich habe auf einem anderen Rechner iobroker komplett neu aufgesetzt und nur zwei Steckdosen mit rein genommen. Anschließend habe ich ein Skript geschrieben, was nichts anderes macht, als
sendTo
zu nutzen. Es ist das selbe Verhalten. Alles geht an oder aus. Dabei ist es egal, welches Topic ich verwende.Durch die Erklärung von @BananaJoe habe ich jetzt das mit den cmnd/stat/tele verstanden und ganz doof probiert unter cmnd das Power auf 1 zu setzen. über diesen Weg klappt die Kommunikation einwandfrei.
Ich weiß zwar nicht, warum es einen Unterschied macht, aber ich stecke auch nicht so tief in dem Adapter drin.
@mickym: Ich habe den Adapter als Broker laufen und stimme dir zu, dass er sich irgendwie komisch verhält. Ich kann aber noch nicht genau mit dem Finger drauf zeigen. Rein aus Interresse. Nutzt du auch diesen Adapter oder lässt du parallel einen Broker laufen und subscribest dich mit iobroker auf diesen?
Noch mal vielen Dank euch
-
@sparli Ich nutze den Adapter als Client und als Broker mosquitto und subscribe alles was im mosquitto ankommt.
SUBSCRIBE:
Ansonsten alle Haken in den mqtt-Einstellungen entfernen!
PUBLISH:Ich habe alle Haken weggemacht und nutze grundsätzlich für alle was mqtt spricht KEINEN Adapter (tasmota, shelly, zigbee , owntracks usw. )
Ansonsten habe ich wie gesagt, die prefixe unter das topic gestellt, um gerade auch eine saubere Trennung von den Geräten an einer Stelle zu haben.
Über das topic kannst Dir ja auch noch eine eigene logische Struktur aufbauen.
-
@sparli sagte in MQTT Adapter: Alle Klienten reagieren:
Durch die Erklärung von @BananaJoe habe ich jetzt das mit den cmnd/stat/tele verstanden und ganz doof probiert unter cmnd das Power auf 1 zu setzen. über diesen Weg klappt die Kommunikation einwandfrei.
Ich weiß zwar nicht, warum es einen Unterschied macht, aber ich stecke auch nicht so tief in dem Adapter drin.Hast du es nun verstanden? Dann weist du doch jetzt warum es einen Unterschied macht ... es sind völlig verschiedene Topics, wie Pfade unter Windows/Linux. Eine Datei unter
/dateien/cmnd/power.txt
liegt ist eine völlig andere als eine Datei/dateien/stat/power.txt
oder/dateien/power.txt
. Wenn du in eines der Datein etwas schreibst, taucht das doch nicht in einer der anderen Dateien auf.Was wirklich merkwürdig ist, das
Staubsauger/POWER
alle Geräte schaltet. Das hätte nicht passierten sollen, ich kenne den Rest der Umgebung nicht und was "alle Geräte" bei dir bedeutet.und @mickym schreibt da einen guten Punkt den ich erst übersehen habe:
sendTo("mqtt.0",'sendMessage2Client',{ topic: "cmnd/Staubsauger/POWER", message: "ON" }); sendTo("mqtt.0",'sendMessage2Client',{ topic: "cmnd/Staubsauger/POWER", message: "OFF" });
müsste es heißen. Retain würde ich gar nicht setzen, sonst passiert ggf. wieder etwas
komischesvon dir unerwartetes. -
Ja, das habe ich verstanden.
Ich habe eine komplett neue Umgebung aufgesetzt (inkl. neuem Netzwerk) und habe das noch einmal ausprobiert.
Dabei hatte ich wirklich nur die beiden Steckdosen (ohne eine Änderung vom MQTT, nur die Netzwerkeinstellungen sind geändert).
Es existiert genau ein Skript mit der Zeile von @mickym.Ich habe mir ebenfalls angeschaut, was bei den einzelnen Steckdosen in der Konsole ankommt und es wurde genau das empfangen, was ich bei einem direkten "Befehl" erwartet hätte.
alsocmnd/Staubsauger/POWER
undcmnd/Luftentfeuchter/POWER
. Warum aber durch das sendTo beide angesprochen wurden, bleibt mir ein Rätsel.Ich habe auch zusätzlich noch verschiedene Varianten der Kommandos ausprobiert
- "/cmnd/Staubsauger/POWER", message: 1
- "cmnd/Staubsauger/POWER", message: 1
- "/cmnd/Staubsauger/POWER", message: "ON"
- "cmnd/Staubsauger/POWER", message: "ON"
Es lief immer auf das selbe Ergebnis hinaus. Es wurde alles ein und ausgeschaltet.
Zusätzlich habe ich im Anschluss die Steckdosen noch einmal komplett zurück gesetzt und das ganze mit den tollen Topics
TollesTopic1
undTollesTopic2
getestet. Auch da habe ich das selbe Ergebnis erhaltenBei den ganzen Tests habe ich das Retain-Flag nicht mehr gesetzt und auch vorher durch leere Nachrichten zurück gesetzt.
Da @mickym meinte, dass der Adapter als Broker sich etwas seltsam verhält, habe ich das jetzt auf dieses Verhalten geschoben.
Gerne kann ich noch andere Sachen testen, wenn euch noch etwas einfällt
-
@sparli
So, ich habe jetzt alles noch mal als Testumgebung aufgebaut und diesmal Mosquitto als Broker genutzt.
Und siehe da, jetzt verhält sich das ganze auch wie gedacht.Noch einmal vielen Dank für die Hilfe und die Rückmeldungen
-