Seite 1 von 1
OH3 Rule: Gruppe Abfragen um Gruppe zu ändern
Verfasst: 26. Mai 2021 21:02
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.
Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern
Verfasst: 27. Mai 2021 01:16
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.
Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern
Verfasst: 30. Mai 2021 13:44
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 !!!
Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern
Verfasst: 30. Mai 2021 22:42
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.
Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern
Verfasst: 3. Jun 2021 19:19
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 ?
Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern
Verfasst: 3. Jun 2021 21:27
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.
Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern
Verfasst: 6. Jun 2021 00:43
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
Re: OH3 Rule: Gruppe Abfragen um Gruppe zu ändern
Verfasst: 6. Jun 2021 11:39
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.