Seite 1 von 1
MQTT wie Schalter einbinden?
Verfasst: 26. Jun 2022 16:25
von Acrobat88
Hallo liebe Community,
ich war shcon auf einigen Holzwegen und stecke nun fest.
Ich habe einen Schalter der per Zigbee2MQTT angebunden ist von HUE Phillips. Ich komme grad nicht dahinter wie ich diesem aber als trigger zum schalten verwenden kann.
Der Schalter gibt das über den Broker raus:
Code: Alles auswählen
{"action":"on_press_release","battery":100,"linkquality":94,"update":{"state":"available"}}
Json Translator ist installiert....ich komme leider nicht mehr weiter. Die Steckdose habe ich geschafft zu schalten da sie "nur" empfängt aber irgendwie hab ich keinen plan wie ich mit den Werten des schalters umgehen sollte. Ich hoffe einer von euch kann mir auf die Sprünge helfen
Beste
Karl
Re: MQTT wie Schalter einbinden?
Verfasst: 26. Jun 2022 18:18
von udo1toni
Die Frage ist, ob das Topic immer diesen Inhalt hat (natürlich mit abweichenden Werten, aber eben z.B. immer mit einem JSONPATH $.action).
Grundsätzlich kommen alle Payloads im jeweiligen Channel über das stateTopic an. Um im obigen JSON Objekt den Wert on_press_release geliefert zu bekommen, musst Du zusätzlich eine incomming value transformation definieren, in diesem Fall eben
JSONPATH:$.action.
Als Channel Typ musst Du string verwenden, oder noch weitere Werte in der Konfiguration setzen, wobei Du Dich dann aber einschränkst.
Im nächsten Schritt brauchst Du eine Rule, welche entweder einen Channel Trigger eingetragen hat, oder alternativ verlinkst Du den Channel mit einem String Item und triggerst auf eine Änderung dieses Items.
Innerhalb der Rule musst Du dann für alle Möglichkeiten, die in dem Channel empfangen werden entsprechendes Verhalten programmieren.
Z.B. Licht bei jedem Loslassen des Tasters umschalten (aus ON wird OFF und umgekehrt):
Code: Alles auswählen
rule "toggle Licht"
when
Item MeinHueSwitch changed // MeinHueSwitch ist ein String Item,
// welches mit dem passenden Channel verknüpft ist
then
if(MeinHueSwitch.state.toString == "on_press_release") // Wenn der Taster losgelassen wurde
Licht.sendCommand(if(Licht.state != ON) ON else OFF) // Falls Zustand ungleich ON, sende ON, sonst OFF
end
Viel Handarbeit, dafür ist man aber auch sehr flexibel, denkbar wäre z.B. Erkennung von Doppelklick/Trippelklick/Langer/Kurzer Tastendruck/Morsecode...
Re: MQTT wie Schalter einbinden?
Verfasst: 26. Jun 2022 18:28
von Acrobat88
Moin udo1toni,
vielen Dank für die Antwort! nur um das richtig zu verstehen:
In dem was ich geliefert bekomme ist praktisch nur text enthalten sowas wie "on_press" oder "100" oder "available" oder "on_press_release.
Es werden keine "On oder OFF" zustände von dem Schalter verschickt.
Aus dem Grund kann ich dann in meinem Generic thing einen Channel anlegen der entweder string (test ist das gleich oder?) oder trigger ist. bei der Incoming Value transformation gebe ich "JSONPATH:$.action" um nur den einen string "on_press" zu extrahieren und mit diesem dann eine regel zu erstellen. Habe ich das richtig verstanden?
Re: MQTT wie Schalter einbinden?
Verfasst: 26. Jun 2022 20:26
von udo1toni
Ja, so ungefähr.
Dein JSON Objekt sieht, etwas anders formatiert, so aus:
Code: Alles auswählen
{
"action": "on_press_release",
"battery": 100,
"linkquality": 94,
"update": {
"state": "available"
}
}
In dieser Form ist ganz gut zu sehen, wie das Ganze funktioniert, letztlich handelt es sich um Wertepaare, wobei die linke Seite in einer Baumstruktur organisiert ist und den Weg (Deshalb "path") zum einzelnen Wert markiert.
Dein "Schalter" ist mit hoher Wahrscheinlichkeit ja kein Schalter, sondern ein Taster. Deshalb ist es auch unüblich, ein ON oder OFF zu versenden (dann müsste der Taster selbst toggeln). Stattdessen werden eben Nachrichten für das Drücken und/oder Loslassen der Taste versendet.
Gewöhnlich wird dann der Aktor das Toggeln übernehmen, schon, damit der Aktor von beliebig vielen Tastern gesteuert werden kann.
Für openHAB bedeutet das allerdings, dass openHAB das Toggeln übernehmen muss, was dann halt über eine Rule passieren muss. Dafür hat man aber alle Freiheiten...
Re: MQTT wie Schalter einbinden?
Verfasst: 26. Jun 2022 20:46
von Acrobat88
Genau ist der Dimmer Taster von HUE Phillips. Der Sinn ist mir Schonkost mit Taster und rule - das ist alles sehr logisch, mir war/ist nur der trigger nicht ganz verständlich. Aber ich komme so langsam dahinter. Es gibt verschiedene Zustände. Nicht nur on oder Off, sondern auch hold, Release, Double, etc.
Deswegen gebe ich für jeden String der geschickt wird eine Aktion die ausgeführt werden soll und somit hab ich krasse Möglichkeiten in der Belegung des Tasters und der Ausführung der jeweiligen Aktion - wie alles Licht bei langgedrückt, nur bestimmte Lichter bei kurz gedrückt und eine Lichterspiele wenn ich sos als morsecode drücke.
Kann ich das irgendwie einfach debuggen was ich genau als json transform habe?
Re: MQTT wie Schalter einbinden?
Verfasst: 26. Jun 2022 21:32
von udo1toni
Wenn der Channel mit einem Item verlinkt ist, wird jedes Changed Ereignis des Channels in der events.log mitgeschrieben (... changed from ... to ...)
Da kannst Du also jederzeit nachschauen, was bei den verschiedenen Tastendrücken passiert.
Re: MQTT wie Schalter einbinden?
Verfasst: 17. Jul 2022 17:36
von Acrobat88
Super danke dir habe es letztendlich geschafft und war nur die falschen sachen in falschen Feldern!