Doch, das geht schon. Allerdings wird das nur passieren, wenn das Item dusche bis dahin seinen Zustand nicht geändert hat, denn die Rule triggert jedes Mal, wenn dusche seinen Zustand ändert, und gleich das Erste, was Du in der Rule tust, ist, den Timer zu canceln. Aber nur, wenn dusche ON ist, wird der Timer dann neu angelegt. Da Du die Timervariable wiederverwendest, geht das also in die Hose, wenn dusche weniger als 16 Minuten ON ist.
Soll der Lüfter tatsächlich stur 15 Minuten nach Start abschalten? ist es nicht eher so, dass er 15 Minuten nach Abschalten von dusche auf Stufe 1 zurück schalten sollte?
Eine andere Sache: Bekommst Du eine Rückmeldung, welche Lüfterstufe gerade läuft? Das wäre eine sehr hilfreiche Größe. Die Steuerung des Lüfters über mehrere Items ist auch nicht so toll, der Lüfter kann ja nicht zeitgleich auf Stufe 1 und Stufe 3 laufen. Es wäre also sinnvoll, ein Number Item zu haben, welches von 0 - 3 geht (oder auch von 1-3, falls es keine Null-Stellung gibt)
Nehmen wir an, Du hast vier Switch Items lueftung0 bis lueftung3. Nehmen wir weiter an, Du hast ein Group Item gLueftung, die genau die vier Items enthält. Weiterhin ein Number Item lueftung. Dann reichen zwei Rules:
Code: Alles auswählen
var Timer tOnTime = null
rule "Lueftung Dusche 15min"
when
Item dusche changed
then
if(lueftungsautomatik.state == ON) {
tOnTime?.cancel
if(dusche.state == ON) {
if(lueftung.state != 3)
tOnTime = createTimer(now.plusMinutes(1), [|
lueftung.sendCommand(3)
])
} else {
if(lueftung.state != 1)
tOnTime = createTimer(now.plusMinutes(15), [|
lueftung.sendCommand(1)
])
}
}
end
rule "Luefter Stufe"
when
Item lueftung received command
then
gLueftung.members.filter[ i | i.name.contains(reveicedCommand) ].head.sendCommand(ON)
end
Die zweite Rule kümmert sich darum, den Befehl an das Number Item in einen von vier Befehlen umzusetzen. Der Witz ist, dass das sendCommand(ON) nur dann zum Zug kommt, wenn das empfangene Kommando passend ist, wird eine ungültige Zahl verwendet, so ist die Liste leer und es wird kein Kommando gesendet.
Die erste Rule erzeugt einen Timer, unter der Voraussetzung, dass dieser gebraucht wird (die aktive Lüfterstufe passt nicht zum Soll).
Der Code funktioniert natürlich nur dann sauber, wenn der Lüfter nicht auch noch anderweitig gesteuert wird.
Es gibt natürlich noch ein weiteres Aber, das ist die Eingrenzung auf die Zeit. Das Problem dabei sind die Grenzfälle beim Abschalten des Lüfters, denn wenn jemand um 18:58 dusche einschaltet und nach 19:00 Uhr ausschaltet, wird wiederum der Ausschalttimer nicht gestartet.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet