Mit einem Langzeit-Timer können Ereignisse auf der CCU um mehr als 24 Stunden verzögert werden
![]()
Die CCU kann Ereignisse um maximal 24 Stunden verzögert auslösen. Mit Hilfe einer Systemvariablen und eines Scripts kann man die Begrenzung umgehen.
Statt eine direkte Verzögerung im Programm auszuwählen, wird eine Systemvariable auf die Stundenanzahl gesetzt, um die die folgenden Aktionen verzögert werden - also z. B. "48" für zwei Tage, "168" für eine Woche usw. Ein kleines Script zählt stündlich den Zähler herunter; ist er bei 0 angekommen, wird die gewünschte Aktion ausgelöst.
Als Beispiel verwende ich die Regenerkennung für meinen Rasenmäh-Roboter: Wenn es geregnet hat, soll er in den folgenden 12 Stunden nicht laufen.
Für 12 Stunden bräuchte es eigentlich keinen Langzeit-Timer - die eingebaute Verzögerungsfunktion der CCU täte es auch. Allerdings kann ich mit dem Langzeit-Timer anhand der Systemvariable ablesen, wie lang die Wartezeit noch ist. Bei der normalen Verzögerung der CCU gibt es keine Kontrolle.
Zunächst wird eine Systemvariable angelegt ("Einstellungen" / "Systemvariable" / "Neu" in der WebUI der CCU). Der Typ ist "Zahl", der Wertebereich ist von 0 bis zur maximalen Anzahl an Stunden, die verarbeitet werden sollen - oder man belässt es bei 65000, was für die meisten Anwendungsfälle ausreichen dürfte.

Das erste WebUI-Programm wird bei jeder Aktualisierung der Systemvariable ausgelöst, sofern sie größer als 0 ist. Nach der Auslösung wartet das Programm eine Stunde und verringert dann den Zähler um 1. Durch diese Aktualisierung löst es sich gleichzeitig wieder selbst aus, wartet eine Stunde usw.
Für meine Regenerkennung ist der Haken "Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivität beenden" wichtig: Die Systemvariable wird jedes Mal aktualisiert, wenn der Kombisensor Regen erkennt. Ohne den Haken würde das Script mehrmals parallel laufen und mehr als einmal pro Stunde den Zähler reduzieren.

Das Script ist äußerst kompakt:
object o_regen = dom.GetObject ("Rasenmaeher Regen");
if (o_regen.Value() > 0) {
o_regen.State (o_regen.Value() - 1);
}
Hier muss eigentlich nur "Rasenmaeher Regen" durch den Namen der Systemvariable ersetzt werden. Wer es schön haben will, der gibt "o_regen" auch noch einen passenden Namen.
Der Timer wird gestartet, indem der Zähler auf den gewünschten Wert gesetzt wird. In meinem Fall sind das 12 Stunden.

Im eigentlichen Programm werte ich am Ende einfach aus, ob der Zähler "0" erreicht hat oder nicht. Man kann natürlich auch Programme schreiben, die direkt getriggert werden, sobald die Variable auf "0" gesetzt wird.
