Homematic Notification Service

Ganz heimlich, still und leise hatte ich hier an dieser Stelle zum vergangenen Weihnachtsfest ein Stückchen Software in die große, weite Welt entlassen und nicht viele Worte darüber verloren: den Benachrichtigungsdienst für die Homematic CCU2.

Wofür dieser Benachrichtigungsdienst gut ist, ist schnell erklärt. Wer ein Heimautomatisierungssystem aus der Produktion der eQ-3 AG sein Eigen nennt, hat oft mehr als nur zeitgesteuerte Beleuchtung oder Heizungsregelung im Sinn. Ist man nicht zu Hause, ist eine Alarmschaltung oder ein Monitoring der Rauchmelder nützlich. Leider ist die Einrichtung einer zeitgemäßen Benachrichtigung über Änderungen von Schaltzuständen, zum Beispiel beim Öffnen einer Tür oder Erkennung von Bewegung über einen Bewegungsmelder, mit Bordmitteln nicht ganz trivial zu realisieren und mündet gelegentlich in eine instabile oder hängengebliebene CCU2. Um hier Abhilfe zu schaffen, habe ich mir zum Thema ein paar Gedanken gemacht und eine einfache Dienstanwendung gebastelt.

Das eigentliche Highlight ist die Möglichkeit zu haben, sich bei wichtigen Ereignissen per Push-Message direkt auf das Handy benachrichtigen zu lassen – hier im Beispiel die App Pushalot unter Windows 10 sowie auf dem Handy unter Windows Phone 8.1:

Die Anwendung ist als Windows-Dienst implementiert, versendet Benachrichtigungen für Ereignisse der per Konfiguration angegebenen Homematic-Sensoren und protokolliert auftretende Fehler im Eventlog. Kurz gesagt: reine Backend-Logik. Um dennoch die Funktion der Anwendung sowie der erstellten Konfigurationsdatei testen zu können, gibt es zusätzlich eine Windows-Forms Applikation, die sowohl die aus der Konfiguration ausgelesenen Einstellungen und Benachrichtigungselemente darstellen kann, als auch auszuführende Benachrichtigungen versendet/simuliert und Fehler protokolliert.

HomeMaticNotification_TST

Die Basiskonfiguration (Pfad zur Konfigurationsdatei, Ausführungsintervalle, etc.) des Dienstes oder auch der Anwendung ist in der jeweiligen App-Config „SVC_HomeMaticNotification.exe.config“ zu finden. Die wesentlich wichtigere, inhaltliche Konfiguration wie Benachrichtigungsgruppen, Benachrichtigungsziele sowie die zu überwachenden Geräte sind in einer separaten XML-Konfigurationsdatei zu konfigurieren.

HMN_SampleConfig

Um nicht nur einen Empfänger von einer Dienst-Instanz zu benachrichtigen, können parallel mehrere Gruppen von Benachrichtigungen (notifyGroup) mit unterschiedlichem Umfang, Einstellungen und Empfänger hinterlegt werden. Pro Gruppe kann ein Benachrichtigungsziel (notifyBy) festgelegt werden, was entweder ein Key der Push-Dienste Pushalot (NotifyProvider=“Pushalot“) oder Pushover (NotifyProvider=“Pushover“) sein kann oder auch eine E-Mail-Adresse (NotifyProvider=“Email“).
Für ein Benachrichtigungselement (notifyItem), ein per Device-Serial adressiertes Gerät, können erweiterte Einstellungen konfiguriert werden, so dass beispielsweise zu festgelegten Tagen/Uhrzeiten (silenceTimes/silence) oder bei dem Zutreffen bestimmter Bedingungen (conditions), wie Schaltzuständen weiterer Geräte (devCondition) bzw. Systemvariablen der Homematic-Zentrale (varCondition), Benachrichtigungen nicht übermittelt werden dürfen.

Das Monitoring der Homematic-Komponenten erfolgt in der vorliegenden Version nicht wirklich ereignisgesteuert, sondern bedient sich einem design-technisch nicht allzu schönem Workaround, der dies lediglich so erscheinen lässt. Allem voran die in meinem letztjährigen Post zum Thema erwähnten Schwierigkeiten mit der Eventregistrierung über die native Schnittstelle der CCU2, XML-RPC, führten dazu, dass ich ein – in der Standardkonfiguration zwei-sekündlich – „pollendes“ Verfahren für die Überwachung der Komponenten verwende. Auch wenn ich inzwischen teilweise die ursprünglichen Probleme umgehen konnte, hatte ich dennoch mit erhöhtem Stromverbrauch der abgefragten Sensoren/Aktoren zu kämpfen. Hinzu kommt, dass ich zu Beginn der Entwicklungsarbeiten am Dienst auf die HomeMatic-XmlApi-Lib zurückgreifen musste, so dass ein Rückportieren auf XML-RPC aus heutiger Sicht nicht lohnenswert erscheint. Die sehr häufige Abfrage der XML-API (~40k Requests/Tag) scheint keine negative Auswirkung auf die CCU2 zu haben – der Service läuft bei mir ca. seit einem Jahr sehr stabil ohne auffällige Probleme oder Unzuverlässigkeit.

Im aktuellen Release (v1.1.9.3) sind inzwischen ein paar neue Funktionen enthalten sowie ein paar Bugs korrigiert. Für alle Interessierten steht die Software (inkl. Tester-Anwendung und Beispielkonfiguration) in meinem OneDrive zum Download bereit. Die jeweils neuste Version wird als Quellcode im dazugehörigen Repository auf Github zu finden sein.

HomeMaticNotification_TSTGitHub-Repo: github.com/roschinsky/HomeMatic-Notification-Service

MD5 Hash: ca29cbe561e53507db4feca121454af6


Feedback, Forks oder interessante Fragen – hier oder auf Github – sind stets willkommen.

Für die Zukunft ist geplant die Dienstanwendung auf den RaspberryPi zu portieren, so dass sie unter Windows 10 for IoT lauffähig ist.

Über Thomas Roschinsky
Software Engineer | .NET | SharePoint | Dynamics CRM | BI | C# | C/C++

8 Responses to Homematic Notification Service

  1. Bernd Bührer sagt:

    Hallo Herr Roschinsky,

    konnten Sie denn mittlerweile das Problem mit dem hohen Stromverbrauch der Sensoren/Aktoren lösen?
    Wird bei jeder Abfrage mit dem entsprechenden Sensor/Aktor kommuniziert?

    Ich bin auch .NET Entwickler und bin gerade am schauen, wie ich aktuelle Werte aus der CCU2 auslesen bzw. beschreiben kann.

    Gruß

  2. Hallo Herr Bührer,

    das Problem mit dem hohem Stromverbrauch, den unverhältnismäßig vielen STICKY_UNREACH-Meldungen und der damit vermutlich einhergehenden häufigen Kommunikation mit den HM-Devices konnte ich lediglich mit der Homematic-nativen XML-RPC-Schnittstelle reproduzieren.

    Mit dem Homematic Addon „XML-API“, welches sämtliche Statusmeldungen der CCU2 in XML-Strukturen bereitstellt, sowie dem .NET Wrapper „Homematic-XmlApi-Lib“ für dieses Addon konnte ich dieses Verhalten, auch bei kurzen Abrufintervallen, nicht feststellen. Hier wird vom Addon lediglich der Status der Geräte, den die CCU2 kennt, weitergegeben. Sobald einer der Aktoren/Sensoren seinen neuen Status an die Homematic-Zentrale weitergibt, wird dieser auch von einem Update() des Wrappers erkannt und in den internen Datenstrukturen des Wrappers gespiegelt.

    Dem Projekt liegt eine Test-Applikation mit Frontend bei, welche die Methoden des Wrappers aufrufen kann. Nach der Installation des Addons auf der CCU2 kann der Wrapper direkt über die URL der Homematic auf die XML-Daten zugreifen.

    Viel Erfolg beim Ausprobieren & schöne Grüße,
    Thomas

    • Bernd Bührer sagt:

      Hallo Herr Roschinsky,
      ich hätte mal wieder eine Frage:
      Wie schaffe ich es über die „Homematic-XmlApi-Lib“ auf die Systemvariable „svEnergyCounter_Seriennummer“ eines Funkschaltaktors mit Leistungsmessung zuzugreifen?

      Gruß Bernd Bührer

      • Hallo Herr Bührer,

        im Download-Package liegt der Bibliothek ein Tester bei (TST_HomeMaticXmlApi.exe). Wenn es die entsprechende Variable zum Device auf der Homematic gibt, sollte sie im Baumdiagramm unter „Variables“ auftauchen.

        Alternativ könnte es sich auch um einen Kanal des Funkschalters handeln – in dem Fall in der Anwendung nach dem Verbinden mit der Homematic noch die Update-Funktion (Schaltfläche „Update“ rechts) ausführen, damit die DataChannels unterhalb der Devices mit Daten angereichert werden – dort sollten sich dann auch die Counter für die Leistungsmessung finden (normale Schaltaktoren bringen meist nur einen DataChannel mit wohingegen die Funkschalter mit Leistungsmessung über 6 DataChannels verfügen.

        Um das Ganze selbst programmatisch nachzuvollziehen ggf. im Code unter GitHub nachschauen – dort ist ebenfalls der Tester zu finden.

        Viel Erfolg & schöne Grüße,
        Thomas

      • Bernd Bührer sagt:

        Hallo Herr Roschinsky,

        bei svEnergyCounter_Seriennummer handelt es sich um eine automatisch generierte Systemvariable, welche auf der CCU automatisch erzeugt wurde.
        Ich sehe diese Systemvariable auch über das WebUI, über die Homematic-XmlApi-Lib finde ich diese Variable jedoch nicht.

        Gruß Bernd Bührer

      • …leider fehlen bei meinem Schaltaktor die svEnergyCounter*-Variablen, so dass ich es nicht nachstellen kann. Ad-hoc fehlt mir hier ein Test-Case…😦

        Beste Grüße,
        Thomas

  3. Pingback: Push Notification via Telegram | Thomas Roschinsky

  4. Pingback: Benachrichtigung bei Änderung von Homematic-Systemvariablen | Thomas Roschinsky

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: