Letzte Aktualisierung am 28. August 2023
Ich werde immer wieder mal gebeten zu erläutern, was es mit der Abfrage der Systemvariablen „CCU_im_Reboot“ in einigen meiner Programme auf sich hat.
Diese wird verwendet, um das Ausführen von Programmen bei einem Neustart der CCU zu verhindern. Nachfolgend eine kurze Zusammenfassung des Vorgehens.
Das Problem
Bei einem Neustart der CCU werden alle Programme einmal abgearbeitet, was dazu führt, dass bei Programmen ohne definierte „Wenn-Bedingung“ oder solchen, deren „Wenn-Bedingungen“ während des Neustarts zutreffen, automatisch alle „Dann-Aktivitäten“ ausgeführt werden. Dies ist nicht immer gewünscht und kann mit einem einfachen Trick unterbunden werden.
Die Lösung
Vorwegschicken möchte ich, dass die Idee ursprünglich von dem Benutzer „berTTi“ aus dem HomeMatic-Forum stammt, und im November 2012 von ihm in dem Beitrag Programme beim Start der CCU nicht ausführen beschrieben wurde. Ich selbst nutze dieses Verfahren seither erfolgreich mit den CCU 1 und 2 sowie der RaspberryMatic.
Normalerweise behalten Systemvariablen nach einem Neustart der CCU ihren vorherigen Zustand. Eine Ausnahme bildet hierbei jedoch die werksseitig vordefinierte Systemvariable „Anwesenheit“ (erkennbar daran, dass sie sich nicht löschen lässt), die nach einem CCU-Neustart immer den logischen Wert „wahr“ erhält, gleich welchen Zustand sie vorher hatte.
Diese Tatsache bildet die Grundlage für die nachfolgend beschriebene Lösung, die auf der simplen Idee basiert, Programme nur dann auszuführen, wenn eine Systemvariable mit dem Namen „CCU im Reboot“ den Zustand „falsch“ aufweist.
So geht es Schritt für Schritt:
Schritt 1: Anlegen einer neuen Systemvariable für die Anwesenheit
Da wir die originäre Systemvariable „Anwesenheit“ später zweckentfremden werden, sollte eine neue Systemvariable für die Anwesenheit z.B. wie folgt angelegt werden:
WICHTIG:
In der Folge müssen natürlich alle Programme und Skripte, die auf die Systemvariable „Anwesenheit“ zugreifen, auf die neue Systemvariable „Anwesenheit_neu“ abgeändert werden!
Schritt 2: Umbenennen der Systemvariable „Anwesenheit“
Nun wird die ursprüngliche Systemvariable „Anwesenheit“ umbenannt:
Das Ergebnis sollte so aussehen:
Die Systemvariable „CCU_im_Reboot“ ist nun diejenige, die sich nicht löschen lässt!
Schritt 3: Definieren eines Zeitraumes für den Neustart
Es soll verhindert werden, dass bestimmte Programme bei einem Neustart der CCU ausgeführt werden. Wenn der Neustart abgeschlossen ist, sollen sie aber natürlich wieder wie gewohnt laufen.
Wie erwähnt, erhält die Systemvariable „Anwesenheit“ (jetzt „CCU_im_Reboot“) bei einem Neustart der CCU immer den Status „wahr“. Nachdem alle Programme einmal abgearbeitet wurden, muss sie daher auf „falsch“ gesetzt werden. Dies geschieht mit dem folgenden Programm:
Da dieses Programm keine „Wenn-Bedingung“ hat, wird es bei einem Neustart der CCU ausgefürt und setzt die Systemvariable „CCU_im_Reboot“ nach einer Minute auf den Zustand „falsch“.
Dieser Zeitraum hat sich bei meiner CCU2 mit über 100 Programmen als ideal erwiesen. Wer deutlich weniger Programme hat, kann den Zeitraum ggf. verkürzen.
Das automatische Umschalten der Systemvariable „CCU_im_Reboot“ auf „falsch“ funktioniert auf „kleineren Installationen“ mit wenigen Geräten möglicherweise nicht korrekt, da die Programme beim Systemstart von der CCU zu schnell abgearbeitet werden. In diesem Fall muss sie manuell auf „falsch“ gesetzt werden, damit die Programme wieder laufen. Alternativ kann man auch einen Timer einbauen, der die Systemvariable nach einiger Zeit umschaltet…
Schritt 4: Einfügen einer neuen „Wenn-Bedingung“ in die Programme
Abschließend müssen alle Programme, die beim Neustart der CCU nicht ausgeführt werden sollen, wie folgt ergänzt werden:
Falls schon eine Bedingung vorliegt, ist die neue Abfrage mit einer UND-Verknüpfung zu ergänzen:
Das war es auch schon, anschließend folgen noch einige optionale Möglichkeiten, über das Ende des Neustartzeitraumes informiert zu werden.
Für in der Homematik-Programmlogik unerfahrenere Anwender sei an dieser Stelle aber noch darauf hingewiesen, dass der Programmteil SONST natürlich ausgeführt wird. Man sollte daher bei Anwendung dieser Methode dort nichts hinterlegen, sondern lieber mehrere einzelne Programme anlegen.
Optional: Anzeige über TrayMatic
Mittels TrayMatic lassen sich sehr einfach Zustände von Homematic Systemvariablen im Windows Benachrichtigungsfeld anzeigen.
So bekommt man sofort mit, wenn der Zustand der Systemvariable „CCU_im_Reboot“ von „undefiniert“ (hier „Fehler!“) auf „wahr“ (hier „CCU im Reboot“) und nach einer Minute auf „falsch“ (hier „CCU hochgefahren“) wechselt.
Optional: Push-Benachrichtigung über Pushover:
Man kann sich über den Verlauf des Neustarts natürlich auch Pushnachrichten senden lassen. Hier gezeigt am Beispiel von Pushover:
Da die Programme alle in der Reihenfolge des Abspeicherns in der Programmliste ausgeführt werden, kann man z.B. das folgende Programm mit dem zugehörigen Skript nutzen, um angezeigt zu bekommen, wann die Programme durchgelaufen sind. Das Programm sollte dazu als letztes (nochmal) gespeichert worden sein.
string nachricht = "CCU im Reboot, die Programme wurden getriggert";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -d token=TOKEN -d user=USER -d message='"#nachricht#"' -d sound=bike http://api.pushover.net/1/messages.json");
Dieses Programm eignet sich auch für einen temporären Test, wie lange es dauert, bis die Programme alle getriggert wurden.
Außerdem kann das in Schritt 3 erstellte Programm zum Umschalten der Systemvariable „CCU_im_Reboot“ wie folgt ergänzt werden, um über das Ende des Neustarts zu informieren:
string nachricht = "CCU Bootvorgang abgeschlossen";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -d token=TOKEN -d user=USER -d message='"#nachricht#"' -d sound=bike http://api.pushover.net/1/messages.json");
Zum korrespondierenden Beitrag im…
Tolle Erklärung und toller „Trick“. Es ist nämlich nicht so toll wenn nach einem Stromausfall die Garagentore aufgehen :)) Dazu eine kleine Frage noch: Muss die Variable auch in jede sonst wenn-Bedingung eingebaut werden oder reicht es sie in die erste Wenn-Bedingung einzubauen?
Hallo,
das ist eine gute Frage. Da müsste man nochmal genau in der Logik der CCU Programme nachlesen. Ich habe die Abfrage bei mir in allen Bedingungen eingebaut.
Liebe Grüße Jens
Hallo, genau danach habe ich gesucht! Vielen Dank!
Das ganze funktioniert wie erwartet, mit einer kleinen Ausnahme:
Wurde in der CCU Zusatzsoftware installiert, wird ja die CCU nach der Installation neu gestartet. Nach diesem Neustart (nach Zusatz Software Install) wird diese Systemvariable mit obigem Schema nicht mehr auf false gesetzt. Dies passiert aber nur, wenn zuvor neue Software installiert wurde. Bei normalen Neustarts oder Netzresets funktioniert es hervorragend. Evt. brauch die CCU nach einer Softwareinstallation mehr Zeit als 1 Minute…. keine Ahnung.
Ja gut, aber wenn man Software auf der CCU installiert ist man ja in der Regel „dabei“. Und es geschiet nicht unbeaufsichtig. Und wenn man es weiß dann muss man halt die durch die Programme ausgeführten Aktionen von Hand „zurück“ stellen. Ich denke denke das Hauptproblem ist mit der Lösung hier gelöst 🙂
Hallo Jens,
habe schon einige Deiner Tipps umgesetzt. Im Forum viel gelesen, aber erst bei Dir auf der Seite richtig verstanden. Da letztens meine Alarmanlage bei einem längeren Stromausfall, beim Neustart der CCU2 ausgelöst wurde, brauchte ich mal wieder eine fähige Anleitung. Leider kann ich den ersten Schritt schon nicht erfüllen, weil mir die Systemvariable „Anwesenheit“ fehlt, wie bei einigen anderen auch. Habe alles versucht, löschen geht ja nicht. Die Variablen, die ich habe, könnten alle gelöscht werden. Hast Du da einen Tipp?
DANKE und Gruß
Carsten
Hallo Carsten,
danke für dein Feedback. Ich habe eben erst davon gelesen, dass es dieses Problem überhaupt gibt, interessant. Da haben sich im Forum ja schon einige Fachleute bemüht und anscheinend auch eine Lösung gefunden. Hast du das schon probiert?
Liebe Grüße Jens
Moin Jens,
danke für die schnelle Antwort, werde ich ausprobieren.
Vielen Dank 🙂
Hey Jens,
habe die SystVar. Anwesenheit nach Deinem Tipp wiederherstellen können.
Nach Deiner tollen Anleitung hier kann ich jetzt einen unkontrollierten Programmstart verhindern.
Mach weiter so, Du hilfst vielen mit „gefährlichem Halbwissen“ 🙂
DANKE und Gruß
Carsten
Hallo Carsten,
danke für das nette Feedback und schön, dass du es hinbekommen hast. Viel Spaß und Erfolg weiterhin beim versmarten deines Heims.
Liebe Grüße Jens
Hallo Carsten,
habe versucht, Deinen Trick anzuwenden. Leider kann ich jetzt in der Weboberfläche der CCU2 keine Variablen mehr in Programmen auswählen. Es erscheinen keine zur Auswahl.
Ist dieser Fehler bekannt oder bei jemandem anders auch schon aufgetreten?
Ich kann auch keinen Zustand einer Variable mehr über das Webinterface ändern.
Hallo Oliver,
mir ist das nicht bekannt aber vielleicht kann Carsten ja etwas dazu sagen. Ansonsten würde ich vielleicht mal im Forum nachfragen.
Liebe Grüße Jens
Prima Anleitung. Funktioniert. Vielen Dank.
Eine Einschränkung habe ich jetzt allerdings doch bemerkt.
Alle Programme die ich jetzt mit der „Reboot“ ehem. „Anwesenheit“ Variable versehen habe, lassen sich jetzt nicht mehr mit der App Pocket Control HM ändern oder löschen.
Nicht Weltbewegend, nur zur Info.
Hallo René,
danke für dein Feedback und den Hinweis, der für Apple-Verwender bestimmt hilfreich ist,
Liebe Grüße Jens
Hi, wenn ich das Programm auf „inaktiv“ aber „bedienbar“ und sichtbar“ setze, dann sollte es doch eben nicht nach dem neustart der CCU automatisch ausgeführt werden?
Grüße
Jens
Hallo Jens,
soweit ich weiß, werden nur aktivierte Programme beim Systemstart getriggert, und zwar in der Reihenfolge, in der sie abgespeichert wurden.
Grüße Jens
Hallo, leider fehlt bei mir die Variable Anwesenheit. Was kann ich machen?
Hallo Florian,
hierfür kann es viele Gründe geben. Im HomeMatic-Forum gibt es dazu nicht wenige Beiträge und Lösungsansätze, z.B. hier oder auch wie oben im Kommentar vom 18. Dezember 2016 bereits verlinkt. Ich empfehle, mal dort anzusetzen und ggf. weiter nachzufragen. Ich selbst betreibe/betreue mehrere CCUs in unterschiedlichen Varianten, hatte dieses Phänomen selbst aber noch nie und daher keine Erfahrungswerte.
Viel Erfolg, liebe Grüße Jens
Danke, traumhaft !