Licht-Aktoren prüfen

Kleines WebUI-Programm, mit dem die CCU regelmäßig den Status der Aktoren des Gewerkes „Licht“ prüft und bei Abwesenheit das Licht ausschaltet

Es kommt gelegentlich vor, dass ein Aktor seinen Status nicht korrekt an die CCU übermittelt, weil zum Beispiel an einem Schaltaktor direkt geschaltet wurde, als die CCU gerade nicht erreichbar war. Das bedeutet dann: Licht ist „aus“, aber in der WebUI steht noch „an“. Ärgerlich, wenn davon irgendwas abhängt, was dann nicht passiert.

Die Lösung: Die CCU geht in regelmäßigen Abständen sämtliche Aktoren durch und fragt ihren Status ab.

Nun ist es so, dass die CCU hängt, wenn sie gerade auf Antwort von Aktoren wartet. Wenn jetzt drei Dutzend Kanäle überprüft werden und womöglich ist einer gerade nicht erreichbar, dann ist das störend. Außerdem kommt es gerade bei „Massenabfragen“ eher zu Kommunikationsstörungen, als wenn man die Sache etwas entzerrt. Und wir wollen es auch nicht übertreiben: Eine Prüfung pro Aktor pro Stunde reicht dicke.

Daher hier mein Programm, das die Aktoren abfragt und den Status aktualisiert. Wenn „Anwesenheit“ auf „nicht anwesend“ gesetzt ist, wird nicht nur der Status geprüft, sondern der Aktor wird ausgeschaltet.

In der WebUI sieht es so aus:

Das Zeitmodul:

Die Ausführung „alle 59 Sekunden“ dient ebenfalls dazu, periodische Vorgänge zu entzerren, wenn viele Programme auf der CCU laufen. Wenn man „ordentliche“ Zeiten vorgibt – z. B. Programm a alle 60 Sekunden, Programm b alle 5 Minuten, Programm c alle 15 Sekunden usw. –, dann ist die CCU immer schlagartig mit allem voll ausgelastet, während sie zwischendurch vor sich hin dämmert. Mit 59 Sekunden, 287 Sekunden und 17 Sekunden dagegen laufen die einzelnen Programme immer mehr oder weniger versetzt, so dass das gesamte System flüssiger reagiert.

Um das folgende Script einzufügen, bitte komplett markieren, in der WebUI auf den den Button „Script“ klicken und den gesamten Text einfügen. Nachdem das Script eingefügt wurde, sieht man wie in meinem Screenshot oben den Anfang des Codes.

! HomeMatic-Script
! LICHT-AKTOREN PRüFEN
! http://www.christian-luetgens.de/homematic/hardware/funkstoerungen/lichtstatus/Lichtstatus.htm

var l_licht = dom.GetObject ("Licht");
integer i_pointer = system.Date("%M").ToInteger();
boolean b;

if (i_pointer < l_licht.Count()) {
   if (dom.GetObject("Anwesenheit").Value()) {
     b = l_licht.GetAt(i_pointer).State();
   } else {
     l_licht.GetAt(i_pointer).State(0);
   }
}

!  Ende des Scripts

Voraussetzung:

Navigation