Langzeit-Timer

Mit einem Langzeit-Timer können Ereignisse auf der CCU um mehr als 24 Stunden verzögert werden

2700 Zeichen
Score aktualisiert
100%
Code: b6156e3138634f1096a9c0ef38fd6d88
Token in Entwicklung nicht aktualisiert
img-Tag in Entwicklung deaktiviert

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.

Benennung von Systemvariablen

Prinzipiell kann man Systemvariablen – so wie allen Objekten in der CCU – beliebige Namen geben, also z. B. auch Umlaute und Sonderzeichen verwenden. Ich empfehle jedoch, sich auf reguläre Buchstaben (a-z, A-Z) zu beschränken: Bei Umlauten und Sonderzeichen besteht die Gefahr, dass Systemvariablen in Scripten nicht überall gefunden werden.

Systemvariable

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.

Countdown-Script

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:

! HomeMatic-Script
! LANGZEIT-TIMER
! http://www.christian-luetgens.de/homematic/programmierung/allgemein/langzeittimer/Langzeit-Timer.htm

object o_regen = dom.GetObject ("Rasenmaeher Regen");
if (o_regen.Value() > 0) {
  o_regen.State (o_regen.Value() - 1);
}

!  Ende des Scripts

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.

Timer starten

Der Timer wird gestartet, indem der Zähler auf den gewünschten Wert gesetzt wird. In meinem Fall sind das 12 Stunden.

Programm

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.

Navigation