HomeMatic Tutorial

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

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.


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.

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

2. Die Lösung

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:

CCU im Reboot 08


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:

CCU im Reboot 02

Das Ergebnis sollte nun so aussehen:

CCU im Reboot 01


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:

CCU im Reboot 05

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:

CCU im Reboot 09

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

CCU im Reboot 10

Das war es auch schon, anschließend folgen noch einige optionale Möglichkeiten, über das Ende des Neustartzeitraumes informiert zu werden.

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.

CCU im Reboot 13
CCU im Reboot 12
CCU im Reboot 14

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.

CCU im Reboot 03

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:

CCU im Reboot 04

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");

CCU im Reboot 06

Zum korrespondierenden Beitrag im…
HomeMatic-Forum

 

Bitte beachten...

Die Verwendung meiner Hinweise, Anleitungen, Schaltungen und Software erfolgt auf eigenes Risiko. Ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung.
Creative Commons Lizenzvertrag
Copyright © Jens-Peter Stern | SMART WOHNEN by sTeRn AV | smart-wohnen.org
  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

Schreibe einen Kommentar

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

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich stimme zu.