Blog Tutorial

Homematic – Ausführen von Programmen bei einem Neustart der CCU unterbinden

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:

Kein Ausführen von Programmen bei Homematic CCU Reboot

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:

Kein Ausführen von Programmen bei Homematic CCU Reboot

Das Ergebnis sollte so aussehen:

Kein Ausführen von Programmen bei Homematic CCU Reboot

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:

Kein Ausführen von Programmen bei Homematic CCU Reboot

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…

mit Timer

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:

Kein Ausführen von Programmen bei Homematic CCU Reboot

Falls schon eine Bedingung vorliegt, ist die neue Abfrage mit einer UND-Verknüpfung zu ergänzen:

Kein Ausführen von Programmen bei Homematic CCU Reboot

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.

TrayMatic
TrayMatic
TrayMatic

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.

Pushover
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:

Pushover
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");
Pushover
HomeMatic-Forum

Zum korrespondierenden Beitrag im…

Bitte beachten…

SMART WOHNEN in Stern’s Haus ist ein rein privates, nicht kommerzielles Projekt. Meine Hinweise, Anleitungen, Schaltungen und Software werden so angeboten, „wie sie sind“, Support kann ich nur im Rahmen meiner begrenzten Freizeit leisten, hierfür bitte ich um Verständnis.
Die Verwendung meiner Hinweise, Anleitungen, Schaltungen und Software erfolgt auf eigenes Risiko. Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung! Für die Einhaltung der einschlägigen technischen Vorschriften ist jeder Anwender selbst verantwortlich!
Creative Commons Lizenzvertrag
Copyright © Jens-Peter Stern | SMART WOHNEN in Stern’s Haus | sternshaus.de
  1. 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

  2. Jürgen Wagner

    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.

    • Lukas Helduser

      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 🙂

  3. 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

  4. 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

  5. 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

  6. 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

  7. Florian Eckhardt

    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

  8. Danke, traumhaft !

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

WordPress Cookie Plugin von Real Cookie Banner