Homematic: Systemvariablen erstellen und nutzen

Wir haben Euch schon sehr viel über die verschiedenen Sensoren und Aktoren für Homematic berichtet, heute haben wir ein Software-Thema. Vielleicht seid Ihr schon selbst über den Menüpunkt „Systemvariable“ gestolpert. Was diese sind und wofür man die Variablen gebrauchen kann, werde ich Euch in diesem Tutorial zeigen.

Homematic - Systemvaribalen

Systemvariablen dienen dazu, unterschiedliche Parameter, die Ihr global in Eurer Programmierung nutzen wollt, abzubilden. Das hört sich erstmal kompliziert an, ist es aber eigentlich nicht. An einem einfachen Beispiel wird dies schnell klar. Angenommen, wir wollen in unterschiedlichen Programmen überprüfen, ob alle Fenster geschlossen sind. Dann müssten wir normalerweise in jedem Programm jeden Fenstersensor separat auf dessen Zustand überprüfen. Das ist nicht nur sehr aufwändig, sonder verbracht auch viel Rechenleistung der CCU2. Außerdem ist es bei dieser Vorgehensweise sehr aufwändig, neue Fenstersensoren hinzuzufügen, da diese dann in jedem Programm hinzugefügt werden müssen.

Besser löst man dieses Problem mit einer Systemvariable. Wir bauen nur ein Programm, das den Zustand unserer Aufgabe in einer Systemvariable ablegt.

Sollte ein Fenster offen sein, wir die Variable auf „true“ gesetzt. Sollten alle Fenster geschlossen sein, wir die Variable vom Programm auf „false“ gesetzt. Die CCU2 bietet zudem die Möglichkeit „true“ und „false“ selbst zu benennen. Also verwenden wir an dieser Stelle „Fenster offen“ und „Fenster zu“.

Nun können wir in jedem Programm, indem wir den Status der Fenster abfragen wollen, auf diese Variable zurück greifen. Wir fragen also nur „wie ist der Status der Variable“.

So können wir auch komplexe Zusammenhänge sehr einfach abbilden. In diesem Tutorial zeige ich Euch, welche Möglichkeiten Ihr noch bei Systemvariablen habt.

Um Euch den Zusammenhang praktisch zu erklären, fangen wir mit einem kleinen Programm an, das bei mir Zuhause Anwendung findet. Mich interessiert der Zustand der Fenster im oberen und auch im unteren Geschoss, daher habe ich zwei Gruppen gebildet.

Anlegen einer Variablen:

Damit wir die Variablen später in einem Programm nutzen können, müssen wir diese zuerst anlegen. Dazu navigieren wir im Menü auf „Einstellungen“ –> „Systemvariable“.

Homematic - Systemvariable anlegen

Dort klicken wir auf die Schaltfläche „Neu“. Es öffnet sich ein neues Fenster. Hier kann der Name der Variable festgelegt werden. In unserem Beispiel benutze ich den Namen „Status Fenster oben“. Bei der Beschreibung könnt Ihr Euch Notizen machen, damit Ihr später noch nachvollziehen könnt, wofür die Variable angelegt worden ist. Bei Typ verwenden wir Logikwert.

Die anderen Datentypen benötigen wir aktuell noch nicht. Wir können nun noch die beiden Zustände benennen. Ich habe dafür „offen“ bei wahr und „geschlossen“ bei falsch eingetragen.

Homematic - Übersicht Variablen

In der Übersicht ist nun die neue Variable zu sehen. Diese kann ab jetzt in jedem Programm genutzt werden. Um die neue Variable mit leben zu füllen, wollen wir diese auch mit Werten beschreiben.

Dazu legen wir ein neues Programm an. Dazu navigieren wir zu „Programme und Verknüpfungen“ –> „Programme und Zentralenverknüpfung“. Über die Schaltfläche „Neu“ können wir ein neues Programm erzeugen.

Bei diesem Beispiel will ich alle Fenstersensoren, die sich in der oberen Etage befinden abfragen und den Status dann in die neue Variable schreiben.

Homematic - Programm Fenster offen

Ich habe 3 Fenstersensoren, die ich in der 1. Etage überprüfen will, da ich nur wissen will, ob einer dieser Sensoren offen ist, verknüpfe ich alle Abfragen mit einem „ODER“.

Der Aufbau des Programms sieht wie folgt aus:

Wenn…

Das Badezimmerfesnter offen ist

ODER

Das Schlafzimmerfenster rechts offen ist

ODER

Das Schlafzimmerfenster links offen ist

DANN setze die Systemvariable sofort auf offen.

Es können natürlich auch andere Sensoren abgefragt werden. Wichtig ist auch der Punkt „bei Änderung auslösen“. Die CCU2 benötigt immer einen „Trigger“ also einen Auslöser um ein Programm zu starten. Daher ist es wichtig an dieser Stelle mit dem Parameter „bei Änderung auslösen“ zu arbeiten.

Wir benötigen nun ein weiteres Programm um die Variable wieder auf den Zustand „geschlossen“ zu setzen. Dieses vorgehen ist leider etwas komplizierter. Wir müssen zusätzlich abfangen, dass ja mehrere Fenster gleichzeitig geöffnet sind. Würden wir das gleiche Programm wie für den Zustand „offen“ verwenden, würde die Variabel beim Schließen eines Fenster direkt auf „geschlossen“ gesetzt werden, obwohl noch ein weiteres Fenster offen ist.

Homematic - Fenster geschlossen Programm

Aber auch das ist recht einfach zu erledigen. Wir überprüfen wieder wie oben jedes Fenster einzeln, zusätzlich wird aber auch noch überprüft, ob die anderen Fenster geschlossen sind. Das sehr Ihr im oberen Bild. Hier haben wir jeweils einen Trigger, dieser überprüft dann den Status der anderen Fenster.

Ein Beispiel: Wir das Badezimmerfenster geschlossen, muss natürlich noch überprüft werden, ob auch beide Schlafzimmerfenster geschlossen sind (nur prüfen). Sollte dies der Fall sein, wird die Variable auf „geschlossen“ gesetzt.

Schlägt die Überprüfung fehl, weil noch ein weiteres Fenster offen ist, bleibt die Variable auf dem Status „offen“ stehen. Diesen Trigger und die gleichzeitige Überprüfung der anderen Fenster habe ich für jeden Fall erstellt.

So könnt Ihr sicher sein, dass die Variabel nicht auf geschlossen gesetzt wird, wenn noch ein Fenster offen ist.

Falls Ihr eine elegantere Idee für diesen Fall habt, könnt Ihr mir diese sehr gerne mitteilen ;-)

Passende Beiträge


14 Comments

  • Mathias

    28. Juli 2017

    gähn……. Nun muß mich mein Handy rausholen, um zu sehen, dass ein Fenster offen ist. Welches, bleibt ein Geheimnis.
    dann bleibe ich doch lieber bei meinem IObroker und der Visualisierung auf meinem Wandtablet. Ein Blick reich aus, und ich sehe sogar, welches Fenster offen ist, die Temperaturen in allen Zimmern, welches Licht an ist, ob der interne Alarmkreis scharf ist usw, usw…………
    ach ja, ohne Werbung betreiben zu wollen, ich kann meinen Staubsauger-Roboter, meinen Wasser- und Stromverbrauch und Sprachsteuerung mit Alexa einbinden.

    Reply
    • Sebastian

      Sebastian

      28. Juli 2017

      Hey Mathias, hört sich alles klasse an. Bedenke aber bitte auch, dass nicht jeder so tief in das Thema einsteigen will/kann. Daher sind solche einfachen Lösungen für viele ausreichend.

      Reply
      • Mathias

        28. Juli 2017

        Hi Sebastian,
        da hast Du schon recht, aber wenn ich meinen selbstgebastelten „Einbruchmelder“ scharf schalten will, muß ich schon wissen, welches Fenster als offen angezeigt wird.
        Sonst schaltet die Anlage eben nicht scharf. Das heißt, ich muß jedes Fenster oder Türe öffnen und wieder schließen, weil das Fenster in Wahrheit zu, jedoch als offen angezeigt wird.
        Gruß,
        Mathias

        Reply
      • Dennis

        30. August 2017

        Sehe ich auch so.
        Ich teste gerade ob ich das Programm nutzen kann um den Rolldane bei offenen Fenster zu sperren

        Reply
  • Bartlos

    5. April 2017

    Ist ja alles toll, ich bin ein totaler Neuling! Wozu braucht man das? Was macht diese Systemvariable eigentlich, bzw. wo wird die angezeigt?

    Reply
  • Ben

    8. März 2017

    Hi Sebastian,

    danke für die Anleitung! Ich habe diese Anweisungen auch so umgesetzt aber dabei folgendes Problem: Obwohl der Türsensor von geschlossen auf offen and ei CCU signalisiert (Status in der Geräteliste wird auch als „offen“ von vorher „geschlossen“ angezeigt“) wird die Systemvariable nicht auf „offen“ gesetzt sondern bleibt unverändert bei „geschlossen“.
    Hast du eine Idee, was der Fehler sein könnte?

    Reply
    • Ben

      8. März 2017

      uhoh, nevermind…restarts bewirken Wunder :P

      Reply
      • Sebastian

        Sebastian

        8. März 2017

        …top ;-) das wäre auch mein 1. Tipp gewesen!

        Reply
  • Heiko Bernhörster

    23. Februar 2017

    Meine Lösung ist bis her sehr ähnlich, da ich habe ein Fenster und eine Tür abfrage, bin ich auf der Suche nach einer Verzögerung. D.h. nur wenn die Tür mind. 5 Minuten offen ist, soll diese als geöffnet gelten. Ich steuere darüber einen Heizungsthermostat und er soll ja nicht bei jedem Betreten des Raums (Badezimmer) kurz zufahren und sofort wieder aufgehen…

    Gibt es dafür auch eine Lösung?

    Heiko

    Reply
  • Thorsten

    9. November 2016

    Hallo Sebastian,

    kleiner Tipp, um die Anzahl Deiner Programme gering zu halten.
    Erweitere einfach das erste Programm um folgendes:

    sonst – Systemzustand – Fenster oben geschlossen.

    Sollte also keine der von Dir abgefragten Bedingungen zutreffen, wird damit die Variable automatisch auf „Fenster oben geschlossen“ gesetzt.

    Du ersparst Dir damit das zweite Programm.

    Außerdem könntest Du das Programm zusätzlich erweitern und als nächstes „sonst wenn“ auswählen und darunter Deine Fenster unten abfragen, die entsprechende Variable setzen und dann auch mit „sonst“ wieder auf geschlossen setzen, wenn alle Fenster geschlossen sind.

    Du hättest nur mehr 1, anstelle von 4 Programmen.

    Ich arbeite mit all meinem Variablen so, dass ich nur bestimmte Zustände überprüfe, um eine Variable auf einen Wert zu setzen. Sobald keine der geforderten Bedingungen zutrifft, werden sie automatisch wieder auf den anderen Wert gesetzt.

    Somit hab ich anstelle von rund 120 Programmen nur mehr etwa 35 und das erleichtert mir nicht nur das Management, sondern schont auch die Ressourcen meiner CCU.

    Liebe Grüße,
    Thorsten

    Reply
    • Sebastian

      Sebastian

      10. November 2016

      Hall Thorsten, vielen Dank für den konstruktiven Hinweis! Ich werde das mal bei mir im Programm ändern. Danke!

      Reply
      • Tobias

        5. Januar 2017

        Hallo Sebastian, wenn der Hinweis von Thorsten von dir geprüft und bei dir geändert wurde, wäre es schön, wenn du diesen Hinweis auch in den Artikel übernehmen bzw. einarbeiten würdest ;-)
        Danke :)

        Grüße

        Reply
  • Ronny Pöthe

    22. August 2016

    Sie schreiben Diesen Trigger und die gleichzeitige Überprüfung der anderen Fenster habe ich für jeden Fall erstellt. Was genau ist damit gemeint? Für jedes Fenster oder für jedes Programm? Für ihre Antwort danke ich im Voraus.

    Reply
    • Sebastian

      Sebastian

      22. August 2016

      Hallo,

      ich trigger in jedem Programm, wo ich den Status benötige auf eine Änderung. Wird nun ein Fenster geöffnet, überprüft das Programm, das auf den Status zugreifen will, welchen Wert die Systemvariable gerade hat.

      Reply

Schreibe einen Kommentar