Code: Alles auswählen
var Timer tFlur_SICHERHEIT = null // Timervariable fuer SICHERHEIT Flur
vat Integer nStep = 0
rule "SICHERHEIT Flur_2 Licht_AUS"
when
Item Flur2_Power changed to ON // Wenn Flur_2 AN-geschaltet wurde
then
logInfo("flur","--- SICHERHEIT--Flur_2 wurde EIN-geschaltet ---")
tFlur_SICHERHEIT?.cancel() // Timer entfernen, falls vorhanden
nStep = 0
logInfo("flur","--- SICHERHEIT--Flur_1 Gedenksekunde für 5 sec gesetzt ---")
tFlur_SICHERHEIT = createTimer(now.plusSeconds(5), [| // Timer auf 5 sec anlegen
nStep = nStep + 1
if(nStep == 1 && Flur1_Power.state == OFF) { // wenn Flur_1 AUS
logInfo("flur","--- SICHERHEIT--Flur_1 ist AUS-geschaltet Timer auf 35 sec ---")
tFlur_SICHERHEIT.reschedule(now.plusSeconds(35)) // Timer auf 35 sec anlegen
} else if(nStep == 1 && Flur1_Power.state == ON) {
logInfo("flur","--- SICHERHEIT--Flur_1 ist AN-geschaltet Timer nicht gestartet ---")
} else if(nStep == 2 && Flur2_Power.state == ON) {
Flur2_Power.sendCommand(OFF) // wenn Flur_2 AN -> dann AUS
logInfo("flur","--- SICHERHEIT--Flur_2 wurde nach 35 sec AUS-geschaltet ---")
}
])
end

nStep hat hier nur zwei wichtige Zustände, 1 oder 2. Darüber kann der Timer erkennen, ob er nun zum ersten oder zu zweiten Mal aufgerufen wurde. Man könnte statt des && auch verschachtelte If-Statements verwenden, es erscheint mir so aber übersichtlicher.
Zum logInfo möchte ich noch ein Wort verlieren (ich hab das an anderer Stelle auch schon ausführlichst erläutert...) Der erste String ist der Logger Name, bzw. der letzte Teil des Logger Namens. Dieser Teil wird an den Hauptnamen angehängt (org.openhab.model.script.) Anhand des ersten (nicht änderbaren) Teils kann man auch ableiten, wie der Loggername ausgeführt werden sollte. Natürlich kann man Großbuchstaben und Unterstriche verwenden, und auch superkalifragilistixexpialigetisch als Logger Namen verwenden, kurz und prägnant ist aber sinnvoller.
Die aufgeführten Logzeilen sind eher logDebug()
