Fenster-auf-Anzeige mit Homematic Zentrale

Die Homematic Zentrale hängt bei mir an prominenter Stelle im Flur, direkt neben der Wohnungstür. Schade, dass das 2-Zeilige Display immer nur „CCU Homematic“ anzeigt – viel praktischer wäre in meinem Fall eine Liste der offenen Fenster, damit ich nach Verlassen der Wohnung nicht versehentlich ungebetenen Besuchern Zutritt ermögliche.

Leider wird das Display seitens der Homematic Firmware nicht für eigene Ausgaben aus Scripten zur Verfügung gestellt, es dient lediglich zur Konfiguration der Zentrale über die am Gerät vorhandenen Knöpfe. Glücklicherweise hat aber ein findiger Bastler einen Weg gefunden, über das Plugin LCD_msg eine Schnittstelle zu implementieren, über die das Display recht flexibel auch für eigene Texte genutzt werden kann – großartig!

Der Aufruf des Plugins im Script erfolgt normalerweise über die system.exec-Funktion, die aber leider nicht gerade für Stabilität bekannt ist – früher oder später hängt sich die Zentrale komplett auf, wenn man häufig system.exec aufruft. Aber auch dafür gibt es eine Lösung: Der CUx-Daemon, ein weiteres Plugin, das eigentlich die Einbindung von FS20- und sonstiger Komponenten alternativer Automatisierungssysteme in Homematic ermöglicht, bietet auch eine Alternative zur system.exec-Funktion, die deutlich verlässlicher arbeitet und meine Homematic-Zentrale bislang noch nicht zum Absturz gebracht hat.

Wie bringt man nun den Status vieler Fenster auf ein Display mit gerade mal 2 Zeilen à 11 Zeichen? Ich habe dazu allen Fenstern und Türen meiner Wohnung ein Kürzel zugeordnet (Beispiele: „SF“ -> „Schlafzimmerfenster“, „WT“ -> „Wohnzimmertür“), um den Platz auf dem Display bestmöglich nutzen zu können. Zusätzlich ist mir wichtig, erkennen zu können, ob das jeweilige Fenster nur gekippt oder vollständig geöffnet ist – dazu schreibe ich das Kürzel entweder in Klein- oder Großbuchstaben auf das Display. Ist kein Fenster offen, verschwindet die „Fenster auf“-Anzeige komplett.

Ein Beispiel für die Displayanzeige, wenn das Schlafzimmerfenster gekippt und die Wohnzimmertür weit geöffnet ist:

Fenster auf
sf WT

Nun geht es ans Eingemachte: Nachdem beide Plugins auf regulärem Wege installiert sind, ist nun noch ein Dummy-Gerät für die alternative system.exec-Funktion anzulegen. Die Dokumentation zum CUx-Daemon erklärt dies recht gut, daher soll hier der Hinweis genügen, dass ein Gerät vom Typ „(28) System“ anzulegen ist. Der Name sollte leer bleiben und damit automatisch auf „CUX2801001“ festgesetzt werden – falls nicht, ist das Skript unten anzupassen.

Damit sind alle Vorbereitungen abgeschlossen. Ein Script kann nun die Drehgriffsensoren der Tür- und Fenstergriffe auslesen und den Status entsprechend auf dem Display der Zentrale anzeigen. Dazu wird zuerst ein neues Programm erstellt, das periodisch das Skript startet – denkbar wäre auch eine Auslösung auf Änderung der Drehgriffsensoren, aber das kann u.U. eine ziemlich lange Liste an Wenn-Bedingungen ergeben, wenn man entsprechend viele Fenster in der Wohnung hat… daher nutze ich folgendes Programm:

  • Bedingung: Wenn „Zeitsteuerung“ „Periodisch ganztätig beginnend am XXX (Zeitintervall: Alle 1 Minuten)“ „auslösen zu Zeitpunkten“
  • Aktivität: Dann… „(angekreuzt) Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).“ „Skript“ „(Skriptinhalt folgt unten)“ „sofort“

Und hier nun der Inhalt des eigentlichen Skripts:

string strGewerk = "Verschluß";

string strChannelListe = "S Fenstergriff,A Fenstergriff,B Fenstergriff,K Fenstergriff,W Fenstergriff,W Türgriff";
string strLabelKippstellungListe = "sf,af,bf,kf,wf,wt";
string strLabelOffenListe = "SF,AF,BF,KF,WF,WT";

string strMessage = ""; 
string strChannel = "";
string strChannelID = "";
integer intIndex = 0;
string strChannelAusListe = "";

var objGewerk = dom.GetObject(strGewerk);

foreach(strChannelID, objGewerk.EnumUsedIDs())
{
  var objChannel = dom.GetObject(strChannelID);
  strChannel = objChannel.Name();
  if (objChannel.IsTypeOf(OT_CHANNEL))
  {
    intIndex = 0;
    foreach(strChannelAusListe, strChannelListe.Split(","))
    {
      WriteLine("strChannel=" + strChannel);
      WriteLine("strChannelAusListe=" + strChannelAusListe);
      if (strChannel == strChannelAusListe)
      {
        WriteLine("Kanal in der Liste!");
        if (objChannel.State() == 1)
        {
          WriteLine("gekippt!");
          strMessage = strMessage + strLabelKippstellungListe.StrValueByIndex(",", intIndex) + " ";
        }
        if (objChannel.State() == 2)
        {
          WriteLine("offen!");
          strMessage = strMessage + strLabelOffenListe.StrValueByIndex(",", intIndex) + " ";
        }
      }
      intIndex = intIndex + 1;
    }    
  }
}

if (strMessage)
{
  WriteLine("Nachricht: " + strMessage)
  dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("sh /etc/config/addons/lcd_msg/display_msg.sh '$gwindow iopen m2m$Fenster auf<br/>" + strMessage + "'");  
}
else
{
  WriteLine("Nachricht löschen")
  dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("sh /etc/config/addons/lcd_msg/delete_msg.sh -g window");  
}

Anzupassen sind die Variablen in den ersten 4 Zeilen:

  • strGewerk: Der Name des Gewerkes, in dem in der Homematic Zentrale die Drehgriffkontakte gelistet sind
  • strChannelListe: Die Namen der Kanäle, deren Status anzuzeigen ist, durch Kommata und OHNE Leerzeichen getrennt
  • strLabelKippstellungListe: Die Kürzel der Kanäle, wie sie bei gekipptem Fenster anzuzeigen sind. Die Reihenfolge muss der von strChannelListe entsprechen
  • strLabelOffenList:  Die Kürzel der Kanäle, wie sie bei weit geöffnetem Fenster anzuzeigen sind. Die Reihenfolge muss der von strChannelListe entsprechen

Die WriteLine Ausgaben haben keine Bedeutung, sie sind nur beim Debuggen hilfreich, wenn man das Script manuell startet.

Das sollte es schon gewesen sein – nach Öffnen oder Schließen eines Fensters sollte das CCU-Display nach spätestens einer Minute den Status entsprechend anzeigen.

2 Gedanken zu „Fenster-auf-Anzeige mit Homematic Zentrale

  1. Sehr guter Beitrag. Für die meisten meiner Kunden ist allerdings die ab Werk erhältliche Statusanzeige komfortabler. Wir installieren diese so, das sie am Wohnungs- oder Hausausgang in Sichthöhe ohne Kabel oder störende Leitungen über die Zustände der Aktoren informiert.

    • Alternativ bietet sich auch noch ein 65 EUR Android Tablet „aus der Bucht“ mit einer App wie HomeDroid, Jarvis oder Home24 an. Damit hat man größtmögliche Flexibilität, und das nötige 5V Netzteil zum Betrieb kann man durch eines für eine Unterputz-Schalterdose ersetzen.

Schreibe einen Kommentar

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