NEWS
MQTT Adapter: Alle Klienten reagieren
-
Hallo,
ich probiere gerade einen Wechsel vom Sonoff Adapter zum MQTT Adapter.
Ich bekomme alle Stati der einzelnen Teilnehmer (Ich habe mehrere Steckdosen mit Tasmota geflashed).
Wenn ich jetzt folgende Nachricht sende:
sendTo("mqtt.0",'sendMessage2Client',{ topic: "Staubsauger/POWER", message: true , retain: true });Reagieren alle anderen Steckdosen auch.
Ich habe bei den Steckdosen als Topic folgendes eingestellt:- Entfeuchter
- Staubsauger
- Waschmaschine
Ich habe tatsächlich keinen Ansatz, warum auf einmal alle reagieren. Ich dachte durch das Setzen des Topics
Staubsauger/POWERwürde nur der Staubsauger reagieren.Hat jemand von euch eine Idee, welchen Ansatz ich versuchen könnte?
Vielen Dank
Stefan -
Hallo,
ich probiere gerade einen Wechsel vom Sonoff Adapter zum MQTT Adapter.
Ich bekomme alle Stati der einzelnen Teilnehmer (Ich habe mehrere Steckdosen mit Tasmota geflashed).
Wenn ich jetzt folgende Nachricht sende:
sendTo("mqtt.0",'sendMessage2Client',{ topic: "Staubsauger/POWER", message: true , retain: true });Reagieren alle anderen Steckdosen auch.
Ich habe bei den Steckdosen als Topic folgendes eingestellt:- Entfeuchter
- Staubsauger
- Waschmaschine
Ich habe tatsächlich keinen Ansatz, warum auf einmal alle reagieren. Ich dachte durch das Setzen des Topics
Staubsauger/POWERwürde nur der Staubsauger reagieren.Hat jemand von euch eine Idee, welchen Ansatz ich versuchen könnte?
Vielen Dank
StefanSo 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?
-
Hallo,
ich probiere gerade einen Wechsel vom Sonoff Adapter zum MQTT Adapter.
Ich bekomme alle Stati der einzelnen Teilnehmer (Ich habe mehrere Steckdosen mit Tasmota geflashed).
Wenn ich jetzt folgende Nachricht sende:
sendTo("mqtt.0",'sendMessage2Client',{ topic: "Staubsauger/POWER", message: true , retain: true });Reagieren alle anderen Steckdosen auch.
Ich habe bei den Steckdosen als Topic folgendes eingestellt:- Entfeuchter
- Staubsauger
- Waschmaschine
Ich habe tatsächlich keinen Ansatz, warum auf einmal alle reagieren. Ich dachte durch das Setzen des Topics
Staubsauger/POWERwürde nur der Staubsauger reagieren.Hat jemand von euch eine Idee, welchen Ansatz ich versuchen könnte?
Vielen Dank
Stefan@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
cmndkann 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 inResultTasmota nutzt getrennte Pfade für Steuerung und Ergebnisse (
telegibt es auch noch für regelmäßige Statusmeldungen) -
@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
cmndkann 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 inResultTasmota nutzt getrennte Pfade für Steuerung und Ergebnisse (
telegibt 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.
-
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
sendTozu 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 :-)
-
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
sendTozu 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.
-
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
sendTozu 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 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.txtliegt ist eine völlig andere als eine Datei/dateien/stat/power.txtoder/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/POWERalle 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. -
@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.txtliegt ist eine völlig andere als eine Datei/dateien/stat/power.txtoder/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/POWERalle 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/POWERundcmnd/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
TollesTopic1undTollesTopic2getestet. Auch da habe ich das selbe Ergebnis erhalten
Bei 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 :-)
-
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/POWERundcmnd/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
TollesTopic1undTollesTopic2getestet. Auch da habe ich das selbe Ergebnis erhalten
Bei 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 :-)
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden