Hallo,
ich habe Problem mit einer Regel mit Wartezeit.
Ich will bedingt wenn ein Dummy Schalter (Feuer) eingeschalte ist eine zuvor eingeschaltet Lampe (RFKey1) nach 1sec ausschalten und wieder nach 1 sec einschalten.
Damit schalte ich in der Außenlampe (RFKey1) die LED Leuchtmittel in den Feuermodus.
rule "Feuer"
when
Item RFKey1 changed from ON
then
if
(Feuer.state != ON) return; // wenn Schalter aus(nicht an) , keine Aktionen
else if
Thread::sleep(10000) //Warten 1 sec
sendCommand (RFKey1, OFF) //Außenlampe aus
Thread::sleep(10000) //Warten 1 sec
sendCommand (RFKey1, ON) //Außenlampe ein
end
im voraus Danke für eure Hilfe
Zuletzt geändert von leupy am 28. Okt 2019 18:16, insgesamt 1-mal geändert.
Saarländer
Raspberry Pi 3 & 4 openHAB3.2
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2
rule "Feuer"
when
Item RFKey1 changed from OFF to ON
then
if (Feuer.state == ON) // wenn Schalter aus , keine Aktionen
createTimer(now.plusSeconds(1)) [| sendCommand (RFKey1, OFF) ) ] //Warten 1 sec Außenlampe aus
createTimer(now.plusSeconds(1)) [| sendCommand (RFKey1, On) ) ] //Warten 1 sec Außenlampe ein
else
return
end
Saarländer
Raspberry Pi 3 & 4 openHAB3.2
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2
Kann so ja auch nicht funktionieren du erstellst 2 Timer mit jeweils 1 Sekunde .... die rule läuft komplett durch und hat dann 2 Timer die nach 1 Sekunde auslösen sollen.... heisst das nach einer Sekunde gleichzeitig ein OFF und ON kommt zusätzlich kommt das ON nicht durch ... weil du On und nicht ON geschrieben hast
rule "Feuer"
when
Item RFKey1 changed from OFF to ON
then
if (Feuer.state == ON) {
createTimer(now.plusSeconds(1)) [| RFKey1.sendCommand(OFF) ]
createTimer(now.plusSeconds(2)) [| RFKey1.sendCommand(ON) ]
}
end
var Timer tFeuer = null
rule "Feuer"
when
Item RFKey1 changed from OFF to ON
then
if(Feuer.state != ON || tFeuer !== null) return;
tFeuer = createTimer(now.plusSeconds(1), [|
if(RFKey1.state == ON) {
RFKey1.sendCommand(OFF)
tFeuer.reschedule(now.plusSeconds(1))
} else {
RFKey1.sendCommand(ON)
tFeuer = null
}
])
end
Der Timer wird nur angelegt, wenn der Schalter Feuer den Status ON hat und der Timer nicht läuft.
Der Timer wird nach einer Sekunde ausgeführt. Für den Fall, dass RFKey1 auf ON steht, schaltet es auf OFF und startet den Timer neu, sonst schaltet es auf ON und löscht den Zeiger auf den Timer.
Der vorliegende Code kann nicht aus Versehen mehrfach getriggert werden - im Gegensatz zur einfacheren Variante mit zwei unkontrollierten Timern.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet