OH3 Rule: Gruppe Abfragen um Gruppe zu ändern

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
azzkikrboy
Beiträge: 50
Registriert: 18. Apr 2020 13:23
Answers: 1

OH3 Rule: Gruppe Abfragen um Gruppe zu ändern

Beitrag von azzkikrboy »

Hallo zusammen,

ich grüble schon seit einiger Zeit über einem Problem um eine elegante Lösung für folgendes Problem zu finden.

ich habe eine Gruppe A (Typ: Contact) mit 23 Items. Eine zweite Gruppe B (Typ: Number) mit den selben 23 Items.

Nun möchte ich bei jeder Änderung eines Items der Gruppe A (also z.B. Item A_Item1 -> OPEN) das entsprechende Item der Gruppe B (also B_Item1 -> 1) updaten.
  • analog: A_Item1 -> CLOSED wird zu B_Item1 -> 0
Klar kann ich 23 If / Else Abfragen machen, ich denke es gibt aber bestimmt eine elegante Lösung :?

So was wie ...

Code: Alles auswählen

rule "bla"
   when member of gA changed
then
   var trigger = triggeringItem.name.split("_").get(1) ( damit habe ich den Namen des Items)
   if (triggeringItem.state == OPEN) B_trigger.sendCommand(1)
   
nur das "B_trigger" was dann das zu ändernde Item "B_Item1" werden soll funktioniert nicht :-(

Hat jemand schon so eine Rule geschrieben?

Vielen Dank schon mal.

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

Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern

Beitrag von udo1toni »

Wenn die Namen geschickt gewählt sind, ist das keine große Sache. Aber vorher möchte ich fragen: Warum? (vor dem Hintergrund, dass es schon sein kann, dass die Arbeit unnötig komplex ist).

Grundsätzlich liefe die Rule wie folgt:

Code: Alles auswählen

rule "update contact"
when
    Member of gA changed
then
    val trigger = triggeringItem.name.split("_").get(1)  // der Name des Items
    gB.members.filter[i|i.name.contains(trigger)].head.sendCommand(if(newState == OPEN) 1 else 0)
end
Die Rule triggert auf jede Änderung eines Items, welches zur Group gA gehört.
Triggert die Rule, wird aus dem Namen des triggernden Items der Teil zwischen dem ersten und zweiten Unterstrich extrahiert und in der lokalen Konstanten trigger gespeichert.
Anschließend wird in der Group gB dasjenige Item herausgefiltert, dessen Name den Inhalt der lokalen Konstanten enthält. Diesem Item wird der Befehl 1 gesendet, falls der neue Status OPEN ist, ansonsten 0.

Voraussetzung ist, dass der Namensteil zwischen 1. und 2. Unterstrich in beiden Group Objekten jeweils einmalig ist und die beiden Items zueinander gehören. Alle "Input" Items gehören zur Group gA, alle "Output" Items gehören zur Group gB. Zu jedem Item in gA gibt es ein Pendant in gB.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

azzkikrboy
Beiträge: 50
Registriert: 18. Apr 2020 13:23
Answers: 1

Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern

Beitrag von azzkikrboy »

Hallo @udo1toni,

wie immer, du bist der Beste ;)

Die Rule funktioniert genau wie ich sie brauche. Gibt es irgendwo eine Doku wo man diese Syntax, und vielleicht noch andere coole, finden kann?

Zu dem Warum:
Ich benutzte diese Rule um meine KNX-Fenster Kontakte in die CCU3 über Homemantic Binding "zu spiegeln".

Vielen Dank aber für die schnelle Hilfe !!!

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

Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern

Beitrag von udo1toni »

Da wir von openHAB3 reden, kannst Du das ohne Rule erreichen. Die Rule ist relativ elegant, weil sie schön kurz ist. In openHAB2 wäre sie die beste Wahl gewesen. In openHAB3 gibt es aber einen grundsätzlichen Unterschied in der Rule Engine, dieser besteht darin, dass eine Rule nicht mehrfach gleichzeitig starten kann, das bedeutet, wenn mehrere Fensterkontakte "gleichzeitig" umschalten, wird das nicht ohne merkliche Verzögerung umgesetzt, es könnte theoretisch sogar sein, dass dann nur ein einziger Kontakt weitergegeben wird.
Es wäre also vermutlich besser, die Verknüpfung über Links vorzunehmen, das sollte ebenfalls funktionieren.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

azzkikrboy
Beiträge: 50
Registriert: 18. Apr 2020 13:23
Answers: 1

Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern

Beitrag von azzkikrboy »

Ja, da hast du mal wieder recht. Aber leider funktioniert das nicht, da die Items im KNX in HomeMatic unterschiedlich sind.

KNX: Type Contact -> Closed
HM : Type Number -> 0

Es sei denn, du zauberst wieder und kannst einen Link bauen der gleichzeitig den Type ändert :?:
Ich wüsste jetzt nicht auf Anhieb wie das gehen sollte. Oder stehe ich da jetzt auf dem berühmten Schlauch ?

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

Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern

Beitrag von udo1toni »

Aber sicher geht das, das Zauberwort heißt Profile und lässt sich im Link von Channel zu Item einbauen (nicht im Item selbst). Schau Dir die Konfiguration des Channel Links an, da kannst Du MAP auswählen und ein eintsprechendes Mapping hinterlegen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

azzkikrboy
Beiträge: 50
Registriert: 18. Apr 2020 13:23
Answers: 1

Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern

Beitrag von azzkikrboy »

OK, habe das mal probiert. Funktioniert aber nicht.

Wenn ich das ganze mit der Rule mache funktioniert es:

Code: Alles auswählen

2021-06-06 00:27:46.857 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Z_Fenster_Abi' changed from CLOSED to OPEN
2021-06-06 00:27:46.864 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HM_Fenster_Abi_SetState' changed from 0 to 1
2021-06-06 00:27:46.874 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HM_Fenster_Abi_SetState' received command 1
2021-06-06 00:27:46.877 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HM_Fenster_Abi_SetState' predicted to become 1
Mache ich das mit dem Channel Link und dem Transform Profil funktioniert es nicht. Es sieht so aus, als ob der Befehl nicht gesendet wird:

Code: Alles auswählen

2021-06-06 00:18:59.580 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Z_Fenster_Abi' changed from CLOSED to OPEN
2021-06-06 00:18:59.590 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HM_Fenster_Abi_SetState' changed from NULL to 1
2021-06-06 00:19:01.366 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Z_Fenster_Abi' changed from OPEN to CLOSED
2021-06-06 00:19:01.370 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HM_Fenster_Abi_SetState' changed from 1 to 0

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

Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern

Beitrag von udo1toni »

Vermutlich musst Du zusätzlich noch (diesmal im Item) das Profile follow setzen, damit das ccu-Item die Statusänderung als Befehl interpretiert.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten