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.
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.9 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte