Also, je nachdem, wie das Problem der Steuerung genau aussieht, brauchst Du dennoch keine zwei Gruppen. Beispiel:
Code: Alles auswählen
gRoll.members.forEach[ r|
r.sendCommand(DOWN)
Thread::sleep(500)
]
fährt alle halbe Sekunde einen Rollladen nach unten, der in der Gruppe gRoll ist. Das sind also zwei Befehle pro Sekunde, das machen die meisten Bussysteme spielend. Sollen die Läden in einer bestimmten Reihenfolge fahren, so braucht man ein Sortierkriterium, welches dann entweder im Namen oder im Label untergebracht sein muss, in der Form, dass man die Liste .members alphabetisch sortieren lassen kann.
Es gibt natürlich auch noch andere Wege, es kommt ja nur darauf an, was man erreichen will
Unter Berücksichtigung der Gruppe und des einen Rollladens sähe die komplette Rule dann so aus:
Code: Alles auswählen
rule "Rolllaeden zu bei Dunkelheit"
when
Item SonnensensorsudTerrasse_Luminance changed // ein Number Item, welches die Helligkeit enthält
then
if(WohnzimmerFest_Control.state == 100) // Rule bereits aktiviert?
return;
if(now.getHour < 16) // zu früh?
return;
if(now.getHour > 18) // zu spät?
return;
if(!(newState instanceof Number)) // liefert Sensor keinen Messwert?
return;
if((newState as Number).intValue > 165) // oberer Grenzwert noch nicht unterschritten?
return;
if((newState as Number).intValue < 65) // unterer Grenzwert bereits unterschritten?
return;
// alle Bedingungen sind erfüllt!
Rolladen.members.forEach[ r | r.sendCommand(DOWN) Thread::sleep(500)] // alternativ auch 100 statt DOWN
end
Die Rule kann ebenso gut über die UI angelegt werden, hier kann man die ganzen Abbruchbedingungen prima als "but only if" einbauen.
So:
Code: Alles auswählen
configuration: {}
triggers:
- id: "1"
configuration:
itemName: SonnensensorsudTerrasse_Luminance
type: core.ItemStateChangeTrigger
conditions:
- id: "2"
configuration:
itemName: WohnzimmerFest_Control
operator: "<"
state: "100"
type: core.ItemStateCondition
- id: "3"
configuration:
startTime: 16:00
endTime: 19:00
type: core.TimeOfDayCondition
- id: "4"
configuration:
itemName: SonnensensorsudTerrasse_Luminance
operator: "<"
state: "150"
type: core.ItemStateCondition
- id: "5"
configuration:
itemName: SonnensensorsudTerrasse_Luminance
operator: ">"
state: "65"
type: core.ItemStateCondition
actions:
- inputs: {}
id: "6"
configuration:
type: application/vnd.openhab.dsl.rule
script: |-
Rolladen.members.forEach[r | r.sendCommand(DOWN) Thread::sleep(500)]
type: script.ScriptAction
Achtung! Der Code mag so funktionieren oder nicht, ich habe ihn nicht über die UI erstellt...

Da die Abbruchbedingung einer der Rollläden ist, braucht es noch nicht mal ein Reset, der Laden wird ja morgens automatisch geöffnet.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet