Homematic mit node-red über homegear

Inspiriert von Oliver Lorenz schreibe ich hier mal eine Alternative zum Anbinden von Homematic-Komponenten an node-red auf. Ich nutze für die Hardwareanbindung der Homematic-Komponenten homegear, da es mir die bidirektionale Kommunikation per mqtt erlaubt.

In Oliver’s Post musste ein Programm auf der CCU geschrieben werden, um die Zustände bei Auftreten (event) „zurück“ an node-red zu melden, oder sie müssten zyklisch abgefragt werden. Durch die Nutzung von homegear entfällt dieser Schritt, weil jedes event direkt per mqtt kommuniziert wird.

Hardware

Aus einem Vortrag beim @make_ldk von letztem Jahr habe ich noch folgende Folie, die die Struktur recht anschaulich zeigt:

Es bietet sich an, homegear auf einem Raspberry Pi zu betreiben, da man dort den direkten Zugang zu den eventuell benötigten Hardwareschnittstellen hat. Homegear kann mit einer Vielzahl von Geräten mit homematic (BidCOS) kommunizieren. Ich nutze hier ein CC1101-Funkmodul, das per SPI angebunden wird. Natürlich kann man auch das HM-MOD-RPI-PCB, das HM-LGW oder eine CUL benutzen. Weiteres dazu in der homegear-Dokumentation zu Homematic-BidCOS.

Auch wenn das CC1101-Modul der basteltechnisch größere Aufwand ist, so ist es doch die günstigste und auch technisch beste Lösung (Timing). Die Module lassen sich für unter 5,- € bei den üblichen chinesischen Versandhäusern bestellen. Pollin bietet zum Beispiel auch ein CC1101 Modul an, was sich ohne Probleme einsetzen lässt.

Der CC1101 kann mit 868MHz oder 433MHz funken, allerdings muss er für die entsprechende Frequenz die passenden Antennenkonfiguration vorweisen – 433er-Module funktionieren nicht mit Homematic, das in 868MHz funkt. Auf den Marktplätzen werden viele Module mit 433MHz als 868MHz verkauft. Am besten haltet ihr euch an die Vorschläge im Wiki von FHEM für den Selsbstbau-CUL, den ihr natürlich auch mit homegear nutzen könntet.

Homegear kann mehrere Protokolle/Hardware anbinden. Es kann also nicht nur mit Homematic, sondern auch mit MAX!, Sonos, Philips Hue, Intertechno uvm. auf dem hier gezeigten Weg kommuniziert werden.

Software

Ich nutze für dieses Beispiel hier nicht das fertige homegear-Raspbian, da es sich um ein für den Dauerbetrieb optimiertes read-only Image handelt. Stattdessen habe ich ein Raspbian mit node-red installiert und dort zusätzlich mosquitto (ein mqtt-broker) und homegear mit dem homematic-bidcos Paket installiert. Mosquitto lässt sich sehr einfach über das zur Verfügung gestellte Debian-Repository installieren. Danach nur noch den Dienst mit systemctl enable mosquitto.service aktivieren.
Für die Installation könnt ihr gerne openHABian nutzen oder euch an mein Anfängertutorial zur Installation eines RaspberryPi mit node-red halten. OpenHABian kann node-red wie auch homegear mit installieren.

Für die Grundlagen mag ich euch ein paar Links empfehlen:

Als Client, um die mqtt-Kommunikation zu überwachen, eignet sich mqtt-spy.

Aufbau/Konfiguration

Das CC1101 Modul wird direkt am SPI des Raspberry Pi betrieben, der Anschluss und die Konfiguration sind in der Dokumentation von homegear erklärt: Configure Texas Instruments CC1101 (SPI aktivieren mit raspi-config).

Nach Einrichtung des Betriebssystems sowie Verkabelung muss homegear und das Modul nur noch konfiguriert werden. Schaut dazu bitte in das Grundlagen-Tutorial unter dem Punkt „Konfiguration“ – wichtig auch der Absatz über AES (!) – oder in die Dokumentation von homegear.

Raspberry Pi 3 mit CC1101 SPI Modul

Update: Mittlerweile habe ich einen Adapter für das CC1101 Modul gebaut, damit man nicht immer so einen Kabelsalat veranstalten muss und eine externe Antenne anschließen kann. CC1101 SPI Adapter mit u.FL Antennenbuchse

Zum Test verwende ich einen HM-LC-Sw1-Pl-2. Nach dem Anlernen, wie unter First Steps beschrieben, meldet sich der Aktor mit seinen Datenpunkten per mqtt unter dem Topic homegear/<homegear-id>/plain/<device-id>/<channel>/<var-name>.
Die homegear-id und der Typ der Meldung wird in der mqtt.conf konfiguriert. Neben plain können auch noch json und jsonobj zurück gegeben werden. Achso, natürlich noch enabled = true setzen, um mqtt zu aktivieren.

Die in den Geräten vorhandenen Datenpunkte können in der offizielen Homematic Dokumentation nachgeschlagen werden.

In unserem Beispiel ist der Status des Aktors also unter homegear/1234-5678-9abc/plain/1/1/STATE zu finden (true/false). Um nun den Status zu „beschreiben“, tauschen wir plain im Topic einfach durch set aus: homegear/1234-5678-9abc/set/1/1/STATE. Dort können wir nun entweder true oder false hinterlegen (publish) – 1/0 würde genauso funktionieren, homegear verarbeitet die gelieferten Daten logisch.

In mqtt-spy kann man nun sehr gut die Zustandsänderungen unseres Status beobachten:

An „Last Received“ der Nachricht sieht man, dass Schaltbefehl senden (set) und Änderungen des Status (STATE) nur ca. 150ms auseinander liegen.

Die Zeit zwischen Betätigung des Tasters am Aktor bis zur Meldung per mqtt ist leider etwas länger (ca. 2s). Das liegt allerdings am Aktor selbst und im weiteren Zusammenhang an der 1%-Regel bei 868MHz.

node-red

Beispielhaft verwende ich node-red-dashboard zum Schalten des Aktors.

Man abonniert (subscribe) also das Topic des Status des Aktors und gibt diese msg.payload in einen Dashboard-Switch-Node. Der Switch muss so konfiguriert werden, dass er true und false als String in der on- bzw. off-payload versteht.

Beim Schalten sendet der Switch die konfigurierte Payload an seinen Ausgang und wir senden diese an unser set-Topic (publish).

Wichtig ist, dass ankommende Nachrichten nicht direkt an den Ausgang durchgereicht werden,  da es durch die 150ms Verzögerung beim Schalten zu einer Race-Condition kommen würde. Zum Glück bietet uns der Switch-Node dafür schon eine passende Option:

Der Switch-Node ändert seinen Status durch das eingehende Topic und sendet bei Betätigung die Änderung an das ausgehende Topic.

Conclusion


(die USB-Kamera hat ein wenig Verzögerung)

Damit haben wir erfolgreich Homematic bzw. jedes von homegear zur Verfügung gestellte Gerät an node-red per mqtt angebunden. Wichtig hierbei ist, dass wir dadurch einen eventbasierten Rückweg haben, also auch Schaltaktionen am Aktor selbst oder durch andere gepairte Homematic-Geräte direkt wieder in node-red gemeldet bekommen.

Ein weiterer Weg wäre über das neu in homegear eingeführte node-blue nur bestimmte Variablen der Geräte in mqtt zu publishen. Dazu dann vielleicht mal mehr in einem anderen Artikel.

16 Kommentare

  1. Hallo Patrik!

    Ein sehr schöner Artikel! Schön, dass ich als kleine Inspiration dienen könnte. Ich würde gern meinen Artikel um einen Absatz ergänzen der diese Möglichkeit als Alternative erwähnt und hierauf verlinken. Hast du etwas dagegen?

    Viele Grüße
    Oliver

  2. hallo, ich will mir auch auf irgendeine weise einen homematic server aufbauen.
    Bin aber noch nicht sicher wie.

    Deine Lösung scheint eine bidirektionale Kommunikation zu bieten, was es bei homematic sonst eigentlich nicht gibt.
    Ich habe aber noch nicht ganz verstanden wie das funktioniert. Ich dachte homematic hat ein proprietäres Funktprotokoll. Kann dies einfach getauscht werden?

    1. Hey David,

      ich nutze hier Homegear (https://homegear.eu/) zu Andinung der Homematic Komponenten. Du brauchst natürlich ein Funkmodul um in 868MHz zu funken. Wichtig: Homematic ist nicht Homematic IP. Und Homematic hat im Gegensatz zu FS20 oder verschiedenen 433MHz Protokollen natürlich einen Rückkanal (bidirektional).

      Im Schaubild oben siehst du unten rechts das Funkmodul. Homegear unterstützt verschiedene Module, unter anderem auch das offizielle HM-MOD-RPI-PCB von eq3, dem Hersteller von Homematic.
      Schau mal hier: https://doc.homegear.eu/data/homegear-homematicbidcos/configuration.html#communication-modules

      Alternativ kannst du auch das von mir gebaute CC1101-Modul nehmen: https://allgeek.de/2017/09/23/cc1101-spi-adapter-mit-u-fl-antennenbuchse/

      Was Homegear ist, habe ich im Homegear-Forum vor Längerem mal in einem Starterguide zusammen gefasst: https://forum.homegear.eu/t/grundlagen-homegear-starter-guide/1143

      Bis dahin,
      Patrik

  3. Hallo Patrik, Super Artikel, habe trotzdem eine Frage.
    Ich habe Openhab mit openhabian auf RPI installiert, Mosquitto (funtionniert) und Node-Red auch.
    Mqtt wurde in Opengear „enabled“ jedoch sehe ich kein nachrichten vom Opengear im MQTT log.
    Hast Du mit Openhab + MQTT + Homegear Erfahrung ? Können alle module gleichzeitig aktivert werden ?

    1. Hey Rolf,

      danke! Wenn du openhab einsetzt brauchst du nicht zwingend mqtt, da das Homematic-Binding Homegear komplett unterstützt. Dadurch hast du dann auch eine automatische Things discovery und dergleichen. Wenn du zusätzlich auch noch node-red über mqtt nutzen willst, kannst du natürlich alle Kommunikationsprotokolle gleichzeitig nutzen.

      Für solche Fragen am besten das Homegear-Forum unter https://forum.homegear.eu/ nutzen.

  4. Hallo,
    vielen Dank für diesen inspirierenden Beitrag. Dieser lässt mich überlegen, von dem RaspberryMatic weg zu dieser Lösung zu gehen. Mir stellt sich allerdings die Frage, ob das System auch mit Homematic IP Geräten klar kommt. Ich selber habe als Heizkörperthermostat die „Homematic IP Heizkörperthermostat, 140280 “
    (https://www.amazon.de/Homematic-IP-140280A0-Heizk%C3%B6rperthermostat-140280/dp/B00ZQG6OTO).
    Als Funk-Modul setze ich das „HM-MOD-RPI-PCB“ ein.

    Können die Homematic IP Geräte auch angesprochen werden?

    Grüße Tim

  5. Have you ever considered creating an ebook or guest authoring on other websites? I have a blog based on the same information you discuss and would really like to have you share some stories/information. I know my subscribers would enjoy your work. If you are even remotely interested, feel free to shoot me an e mail.

Schreibe einen Kommentar

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