MQTT wie Schalter einbinden?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Acrobat88
Beiträge: 10
Registriert: 26. Jun 2022 14:02

MQTT wie Schalter einbinden?

Beitrag 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

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

Re: MQTT wie Schalter einbinden?

Beitrag 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...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Acrobat88
Beiträge: 10
Registriert: 26. Jun 2022 14:02

Re: MQTT wie Schalter einbinden?

Beitrag 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?

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

Re: MQTT wie Schalter einbinden?

Beitrag 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...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Acrobat88
Beiträge: 10
Registriert: 26. Jun 2022 14:02

Re: MQTT wie Schalter einbinden?

Beitrag 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?

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

Re: MQTT wie Schalter einbinden?

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Acrobat88
Beiträge: 10
Registriert: 26. Jun 2022 14:02

Re: MQTT wie Schalter einbinden?

Beitrag von Acrobat88 »

Super danke dir habe es letztendlich geschafft und war nur die falschen sachen in falschen Feldern!

Antworten