Shelly Plug S mit Tasmota und Mqtt schaltet nicht ein/aus

Die alternative Firmware für ESP8266 based devices

Moderatoren: seppy, udo1toni

Antworten
FelixK
Beiträge: 85
Registriert: 16. Mai 2018 06:56

Shelly Plug S mit Tasmota und Mqtt schaltet nicht ein/aus

Beitrag von FelixK »

Hallo,

ich habe mir eine Shelly Plug S Steckdose zugelegt. Diese habe ich mit Tasmota geflashed und Mqtt aktiviert (das full topic habe ich auf "powerplug/%topic%" gesetzt, %topic% ist auf den Wert tasmota_12345 gesetzt). Mosquitto läuft bereits seit längerem für andere "Hausautomatisierungsaufgaben" bei mir. Meinem OpenHab-Mosquitto-Benutzer habe ich erstmal die Berechtigung gegeben, das Topic "#" schreiben und lesen zu dürfen, damit es nicht deshalb zu Fehlern kommt.

Mit Mqtt.fx fange ich die Topics ab und sehe, dass es für die Steckdose zum Ein- und Ausschalten zwei Topics zu geben scheint:

- powerplug/tasmota_12345/POWER mit dem Body ON|OFF
- powerplug/tasmota_12345/RESULT mit dem Body {"POWER":"ON"|"OFF"}

Ich bin jetzt davon ausgegangen, dass, wenn ich an das Topic powerplug/tasmota_12345/POWER den Body "ON" schicke, dass sich die Steckdose dann an bzw. bei "OFF" ausschaltet. Das war aber nicht der Fall. Dann habe ich versucht, powerplug/tasmota_12345/RESULT mit dem Body {"POWER":"ON"} geschickt, aber auch da keine Änderung, wobei ich unter RESULT den Status des Geräts erwartet hätte.

Laut der Tasmota-Doku müsste das auch so gehen (außer ich verstehe was falsch):
The relay can be controlled with cmnd/tasmota/POWER on, cmnd/tasmota/POWER off or cmnd/tasmota/POWER toggle. Tasmota will send a MQTT status message like stat/tasmota/POWER ON.
Habt ihr eine Idee, was ich falsch mache? Die manuell gepublishten Nachrichten über Mqtt.fx erscheinen auch in Mqtt.fx als empfangene Nachrichten.

Vielen Dank und viele Grüße

Felix
Viele Grüße

Felix

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Shelly Plug S mit Tasmota und Mqtt schaltet nicht ein/aus

Beitrag von udo1toni »

Du hast einen Fehler gemacht.

%prefix% ist nicht optional, dieser Anteil muss unbedingt im FullTopic vorhanden sein. Im Gegensatz dazu kannst Du %topic% durchaus weg lassen, auch wenn das Nachteile mit sich bringt. (Voraussetzung: Du schreibst statt %topic% exakt das hin, was dort eingetragen ist)

Du kannst gerne powerplug/%prefix%/%topic%/ als FullTopic setzen, oder auch powerplug/%topic%/%prefix%/.

Tasmota abonniert verschiedene Topics auf dem Broker und nutzt dabei das FullTopic. Dabei wird %prefix% durch cmnd ersetzt und %topic% wird einmal mit dem eigentlichen Wert von %topic% ersetzt, zum anderen aber auch mit %fallbacktopic% und mit %grouptopic%.

Tasmota hört also immer auf drei verschiedenen Topic Zweigen, die sich aber aus dem FullTopic ableiten und dabei zwingend das element %prefix% brauchen.

In der Folge kann man jedes Gerät über den gewählten Namen erreichen, aber ebenso auch über den Fallbacknamen sowie über den Gruppennamen. Letzterer kann dann dazu verwendet werden, den identischen Befehl an alle Gruppenmitglieder zu senden, z.B. um in allen Tasmotas gleichzeitig die WLAN Credentials zu tauschen (Stichwort Passphrase ändern)

%prefix% nimmt in der Kommunikation drei verschiedene Werte an, Tasmota abonniert wie gesagt alles, was anstelle von %prefix% cmnd stehen hat, es publisht aber auch selbst Daten und ersetzt dabei %prefix% mit stat bzw. tele.
%prefix% ist also essenziell für die Funktion von MQTT bei Tasmota.
%topic% ist essenziell, wenn man Fallback und Gruppen verwenden will, ansonsten kann man auch den Inhalt von %topic% direkt hinschreiben, andererseits: warum sollte man das tun?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

FelixK
Beiträge: 85
Registriert: 16. Mai 2018 06:56

Re: Shelly Plug S mit Tasmota und Mqtt schaltet nicht ein/aus

Beitrag von FelixK »

Vielen Dank für die ausführliche Antwort.

Ich habe jetzt den %prefix% wieder ins full topic aufgenommen und nun sieht es bei mir wie folgt aus:

powerplug/%prefix%/%topic%/

Allerdings wird die Steckdose weder ein-, noch ausgeschalten, wenn ich per Mqtt.fx "ON"|"OFF" (alternativ auch in Kleinbuchstaben) an das Topic

powerplug/stat/tasmota_12345/POWER

schicke. Dann kommt auch kein Status-Update an das RESULT-Topic.
Dabei erscheint genau das Topic bei mir in Mqtt.fx, wenn ich sie über die Tasmota-Weboberfläche ein-/ausschalte.
Viele Grüße

Felix

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Shelly Plug S mit Tasmota und Mqtt schaltet nicht ein/aus

Beitrag von udo1toni »

stat ist der Status, der zurück kommt. Befehle sendest Du ausschließlich an cmnd.

Das Topic zum Steuern heißt also powerplug/cmnd/tasmota_12345/POWER

Als Befehle kannst Du ON, OFF, TOGGLE oder auch 0 oder 1 senden. Alles immer ohne Anführungszeichen und als Payload, nicht als Teil des Topic. Groß/Kleinschreibung ist Tasmota schnuppe, irgendwo im Code findet ein toLower oder toUpper statt, und zwar sowohl beim Topic als auch beim Payload. Nur beim Senden in Richtung Broker hält sich Tasmota an die exakte Schreibweise.

openHAB ist case sensitive, sowohl im Topic als auch im Payload, dort musst Du also genau aufpassen. Der MQTT Standard definiert übrigens beides als case sensitive, so gesehen ist das Verhalten von openHAB hier korrekt. Auf der anderen Seite sind alle Topics und Payloads in Tasmota jederzeit eindeutig, auch ohne Unterscheidung Groß/Klein, es tut also nicht weh.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

FelixK
Beiträge: 85
Registriert: 16. Mai 2018 06:56

Re: Shelly Plug S mit Tasmota und Mqtt schaltet nicht ein/aus

Beitrag von FelixK »

Vielen Dank für deine Antwort.

Oh man. "cmnd" habe ich in der Doku gelesen, bin dann aber davon ausgegangen, dass das nur als Abkürzung für Command verwendet wird, nicht aber selbst ein Schlüsselwort ist. Als Schlüsselwörter habe ich nur "stat" und "tele" gesehen. "tele" hatte ich ausprobiert, aber ohne Erfolg.

Mit cmnd im Topic kappt es über Mqtt.fx und ich mache mich direkt daran, es in OpenHab einzubauen - wo es dann sicher auch funktioniert.

Vielen Dank nochmals, auch für die vielen Erklärungen.

PS: Dass das Topic mit "stat" im Namen wirklich nur den Zustand wiedergibt erleichtert mir dann auch das Einfügen des Status-Mqtt-Topics in OpenHab, da ich, so wie ich es zuerst dachte, das RESULT gar nicht verwenden muss. Hätte ich das verwenden müssen, dann hätte ich daraus auch noch aus dem JSON den Status heraussuchen müssen, was bei einem Switch Mqtt Generic Channel nicht zu gehen scheint. ;)
Viele Grüße

Felix

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Shelly Plug S mit Tasmota und Mqtt schaltet nicht ein/aus

Beitrag von udo1toni »

tele -> Tasmota sendet in regelmäßigen Abständen Informationen
stat -> Tasmota sendet einen Status nach dem Empfang bzw. dem Ausführen eines Befehls
cmnd -> Tasmota empfängt ein Kommando
FelixK hat geschrieben: 9. Jun 2022 17:21 PS: Dass das Topic mit "stat" im Namen wirklich nur den Zustand wiedergibt erleichtert mir dann auch das Einfügen des Status-Mqtt-Topics in OpenHab, da ich, so wie ich es zuerst dachte, das RESULT gar nicht verwenden muss. Hätte ich das verwenden müssen, dann hätte ich daraus auch noch aus dem JSON den Status heraussuchen müssen, was bei einem Switch Mqtt Generic Channel nicht zu gehen scheint. ;)
Doch, das geht wunderbar. Es gibt aber Hürden, insbesondere, wenn ein Topic wie RESULT nicht exklusiv verwendet wird. Dann muss vor dem Anwenden des JSONPATH sichergestellt werden, dass im RESULT überhaupt der passende Teil enthalten ist.
RESULT kommt auch über stat zurück :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

FelixK
Beiträge: 85
Registriert: 16. Mai 2018 06:56

Re: Shelly Plug S mit Tasmota und Mqtt schaltet nicht ein/aus

Beitrag von FelixK »

Vielen Dank für die Erklärung.
Viele Grüße

Felix

Antworten