Kann es sein, dass ich das mal in einem anderen Thread erläutert habe? Die Timer in dieser Form zu verwenden ist Mist.
Wenn Du mit zwei Timern arbeiten willst, ist das ok (obwohl unnötig), aber zumindest solltest Du die Kontrolle über die Timer behalten:
Code: Alles auswählen
var Timer tEins = null
var Timer tZwei = null
rule "Beregnung"
when
Time cron "0 0 21 * * ?"
then
logInfo("watering","Es ist 21 Uhr. Zeit für Bewässrung.")
if (beregnung.state != ON) {
logInfo("watering","Aber Beregnungsautomatik abgeschaltet.")
return;
}
if (LocalWeatherAndForecast_ForecastHours24_MaximaleTemperatur.state < 15 | °C ){
logInfo("watering","Aber zu kalt.")
return;
}
if (rainYesterday.state > 10 | mm){
logInfo("watering","Aber es hat ausreichend geregnet.")
return;
}
channel1.sendCommand(ON)
channel2.sendCommand(ON)
channel3.sendCommand(ON)
channel5.sendCommand(OFF)
teich.sendCommand(OFF)
tEins?.cancel
tEins = createTimer(now.plusMinutes(1), [|
channel1.sendCommand(OFF)
channel3.sendCommand(OFF)
tEins = null
])
tZwei?.cancel
tZwei = createTimer(now.plusMinutes(1), [|
channel2.sendCommand(OFF)
tZwei = null
])
end
Die Rule macht weitgehend das gleiche, nur ein wenig anders

Natürlich kannst Du alle Bedingungen in ein if-Statement schreiben, aber Du sieht hoffentlich den Vorteil des Codes, nämlich, dass es immer genau definierte Umstände gibt, warum die Rule etwas tut (oder nicht). Ob Du die logMeldungen ausgeben lässt, ist natürlich ebenso Geschmacksache. Durch den Abbruch mittels return; bleibst Du im Code aber in der ersten Ebene, was einfach übersichtlicher ist.
Die Schreibweise des Timers, so wie hier gezeigt, verdeutlicht, dass das Lambda (der Teil zwischen [ und ]) Teil der Funktion ist. Die andere Schreibweise funktioniert ohne Frage auch, aber der Zusammenhang kann verloren gehen.
Die Zuweisung des Timers zu einer Variablen hat nun den Vorteil, dass Du den Timer abbrechen kannst (habe ich hier jeweils vor dem Timer-Aufruf implementiert; falls der Timer existiert, wird er gecancelt)
Das Canceln kannst Du auch aus beliebigen anderen Rules heraus erledigen, vorausgesetzt, sie sind in der gleichen Datei gespeichert (wegen der globalen Definition der Variablen)
Genauso kannst Du einen Timer, der so definiert ist, auch erneut zur Ausführung bringen, um z.B. im ersten Durchlauf zwei Regner abzuschalten und den dritten Regner erst im zweiten Durchlauf. dazu braucht es dann aber einen Zähler

zum Abfragen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet