Na ja, mit einer Rule in Form von Code.
Code: Alles auswählen
// Globale Variablen zu Beginn der Datei definieren
var Timer tPoolhaus = null // Timer für Licht ausschalten
rule "Licht aus"
when
Item BewegungssensorPoolhaus_Bewegung changed
then
if(BewegungssensorPoolhaus_Bewegung.state == ON) { // Bewegung erkannt
tPoolhaus?.cancel // Timer abbrechen, falls vorhanden
return; // Rule abbrechen
}
// Ab hier keine Bewegung
if(now.getHour <>6 && now.getHour < 17) // falls zwischen 7 Uhr und 17 Uhr
return; // Rule abbrechen
tPoolhaus = createTimer(now.plusMinutes(5),[| // lege Timer an, der nach 5 Minuten auslöst
// Licht ausschalten, so:
if(MyLight.state != OFF) // Falls Licht an
MyLight.sendCommand(OFF) // Licht ausschalten
])
end
Die Rule muss in dieser Form (d.h. mit einer globalen Timer variablen, die ist zwingend) über eine Textdatei definiert werden, die mit dem Namen
meine.rules im Verzeichnis
$OPENHAB_CONF/rules/ abgespeichert wird (wobei der Name der Datei natürlich auch anders lauten kann, die Endung muss aber
.rules lauten)
Die Rule wird jedes Mal ausgelöst, wenn sich der Zustand des Items ändert (Item ... changed)
Ist der Zustand ON, so muss ein eventuell laufender Timer abgebrochen werden (tPoolhaus?.cancel) Danach wird die Rule verlassen (return;)
Läuft die Rule noch weiter, so ist der Status nicht ON, also ist der Status OFF

Nun muss geprüft werden, ob der Zeitraum stimmt. .getHour() liefert die Stunde als Integerwert (entspricht exakt der Stunde auf einer Digitaluhr). Ist die Stunde also größer als 6 und kleiner als 17, so wird die Rule beendet.
Läuft die Rule noch, so muss nun ein Timer angelegt werden (createTimer), der nach fünf Minuten ausgelöst wird (now.plusMinutes(5)). createTimer bekommt als zweiten Parameter den gesamten auszuführenden Code übergeben, das ist alles zwischen [ und ].
Damit ist die Rule beendet.
Wurde der Timer angelegt, so wird ein Zeiger auf diesen Timer in der globalen Variablen tPoolhaus gespeichert. Deshalb ist es überhaupt möglich, den Timer abzubrechen.
Wird der Timer nicht abgebrochen, so startet der Scheduler zum geforderten Zeitpunkt die Ausführung des übergebenen Codes. Der Code prüft, ob das Item MyLight den Status OFF hat. Ist das nicht der Fall, so sendet er den Befehl OFF an das Item.
Kommentare können entfernt werden, ebenso wie Leerzeilen oder Einrückungen. Ich bemühe mich aber immer, die Rules so zu formatieren, dass man eine Chance hat, zu erkennen, was wo passiert
