Die Rule ist anders gedacht

Wenn es nur darum geht, ein einzelnes Licht aus einer Gruppe Lichter ein- und wieder auszuschalten, ist es das einfachste, dieses Licht einzuschalten und anschließend den Ausschalttimer zu starten, der einfach alle Lichter ausschaltet, die an sind. Wichtig ist dabei natürlich, dass der 2. Timer sicher beendet ist, bevor der nächste zufällige Licht-An-Timer läuft.
Du nutzt die Action sendCommand(Item,Value), was grundsätzlich ok ist. Allerdings kannst Du genauso gut die Methode Item.sendCommand(Value) verwenden, wie das im Rest der Rule der Fall ist. Der Unterschied zwischen beiden Varianten ist, dass die Methode Kenntnis vom benötigten Typ hat und diesen bei Bedarf konvertieren kann. Die Action erwartet immer Strings, was gerne mal schief geht (nicht im vorliegenden Fall).
Was das Ausschalten aller Lichter betrifft, so ist es im Übrigen sinnvoll, den Befehl nur an die Items zu schicken, welche gerade ON sind:
Code: Alles auswählen
zufall.allMembers.filter[i|i.getStateAs(OnOffType)!=OFF].forEach[j|j.sendCommand(OFF)]
Die Zeile ist natürlich wesentlich länger als ein
Aber zum einen schaltet nur "meine" Zeile wirklich alle Lichter aus, die in irgendeiner Form in der Gruppe zufall sind (auch solche, die in einer Untergruppe von zufall liegen), zum anderen erzeugt die einfache Zeile stumpf für jedes Item, welches direkter Memeber der Gruppe zufall ist, ein Item.sendCommand(OFF), gleich, ob dieses Item gerade ON ist oder nicht.
"Meine" Zeile sendet den OFF Befehl nur an solche Items, die nicht auf OFF stehen. Dabei berücksichtigt es auch Dimmer korrekt. Wenn also bis auf ein Item alle Items OFF melden, wird auch nur ein OFF Befehl gesendet.
openHAB5.2.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.2.10 - 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