Na ja, das Einfachste ist, dass Du das Licht Treppe_Licht3 mit einem anderen Namen versiehst, nämlich Treppe_LichtNacht (eben passend zum anderen Licht, was sich so verhalten soll) und dann werden die Rules alle so angepasst, dass das Verhalten sich auf beide Lampen auswirkt:
Code: Alles auswählen
var Timer tFlur = null
var Timer tTreppe = null
var Boolean bNacht = false
val Integer iZeit = 45
val Integer iNacht = 1
rule "Bewegung erkennen"
when
Member of gMelder received update ON
then
val licht = triggeringItem.name.split("_").get(0) // "Flur" oder "Treppe"
val Licht = gLichter.members.filter[i|i.name.contains(licht)].head // gLichtFlur oder gLichtTreppe
if(Licht.state != 100) { // Licht nicht in Dauerbetrieb
if(licht == "Treppe") { // falls Treppe, Treppentimer
gLichtTreppe.sendCommand(60) // entsprechendes Licht auf 60%
tTreppe?.cancel // Timer abbrechen
tTreppe = createTimer(now.plusSeconds(iZeit),[| // Timer anlegen
gLichtTreppe.members.forEach[i| // Für jedes Licht
i.sendCommand(if( // Sende Befehl
i.name.contains("Nacht") && // Falls der Name "1" enthält
bNacht // und Zeitbedingung erfüllt
)iNacht else 0) // 30, ansonsten 0
]
])
} else if(dunkel.state == ON) { // falls nicht Treppe und dunkel
gLichtFlur.sendCommand(60) // entsprechendes Licht auf 60%
tFlur?.cancel // Timer abbrechen
tFlur = createTimer(now.plusSeconds(iZeit),[| // Timer anlegen
gLichtFlur.members.forEach[i| // Für jedes Licht
i.sendCommand(if( // Sende Befehl
i.name.contains("Nacht") && // Falls der Name "1" enthält
bNacht // und Zeitbedingung erfüllt
)iNacht else 0) // 30, ansonsten 0
]
])
}
}
end
rule "Dauerbetrieb"
when
Member of gSwitches changed
then
val licht = triggeringItem.name.split("_")get(0)
val Licht = gLichter.members.filter[i|i.name.contains(licht)].head
if(licht == "Flur") tFlur?.cancel
if(licht == "Treppe") tTreppe?.cancel
Licht.sendCommand(if(triggeringItem.state == ON) 100 else 0)
if(bNacht && triggeringItem.state == OFF)
gLichter.allMembers.filter[i|i.name == licht + "_LichtNacht"].head.sendCommand(iNacht)
end
rule "Nachtlicht an"
when
Time cron "0 0 18 * * ?"
then
bNacht = true
gLichter.allMembers.filter[i|i.name.contains("LichtNacht")].forEach[j|
if(j.state == 0) j.sendCommand(iNacht)
]
end
rule "Nachtlicht an"
when
Time cron "0 0 1 * * ?"
then
bNacht = false
gLichter.allMembers.filter[i|i.name.contains("LichtNacht")].forEach[j|
if(j.state == iNacht) j.sendCommand(0)
]
end
Das sind die gleichen Rules, mit ein paar kleinen Änderungen.
Zum einen habe ich eine Variable bNacht eingeführt. Diese wird durch die Time cron Rules umgeschaltet, so dass nun an anderer Stelle nicht mehr mit den Zeiten gearbeitet werden muss.
Dann habe ich noch eine Konstante iNacht eingeführt, welche den gewünschten Level für das Nachtlicht vorgibt.
Und dann habe ich den Code so angepasst, dass nun alle Lampen, in deren Name "LichtNacht" vorkommt, entsprechend geschaltet werden. Zu beachten ist hier, dass ich die Gruppe mit allMembers anspreche, also auch die Kindeskinder mit einbeziehe.
Die Gruppen und deren Verwendung in der DSL sind extrem mächtig
