Homematic CCU sendet MQTT-Nachrichten

Freunde des IoT (Internet of Things) wissen das MQTT-Protokoll für den Datenaustausch zwischen Geräten sehr zu schätzen.  MQTT ist sehr schlank und ressourcenschonend und hat sich mit seinen einfachen und dennoch flexiblen Fähigkeiten zur 1. Wahl für den Heimautomatisierungs-Bastler entwickelt.

Höchste Zeit also, um der Homematic-CCU das Versenden von MQTT-Nachrichten an andere Geräte beizubringen.
Als “Gesprächspartner” für die CCU kämen beispielsweise in Frage:

  • Raspberry PI
  • Arduino / Genuino
  • ESP8266 Microcontroller
  • PCs (Linux, Windows, MacOS)
  • Smartphones / Tablets mit entsprechenden Apps

Diese könnten den Zustand von Homematic-Geräten aufnehmen und weiterverarbeiten. Dies ist eine wichtige Grundlage auch für die Vernetzung von ganz unterschiedlichen Systemen wie z.B. der Homematic und einem Arduino: Eine Schnittstelle !

Umgesetzt

Die Umsetzung soll möglichst einfach sein, wenige Ressourcen auf der CCU beanspruchen und leicht zu warten sein. Hierzu gibt es mehrere Lösungen, ich habe mich für eine entschieden, die (außer CUxD) ohne Plugins oder Modifikationen der CCU auskommt und stattdessen einen ein RaspberryPi nutzt .

Wir brauchen:

  • eine Homematic CCU (ach was !)
  • CUxD Daemon zur Ausführung von Exec-Kommandos auf der CCU
  • einen RaspberryPi im Heimnetz
  • einen MQTT-Broker, z.B. Mosquitto (läuft auf dem RaspberryPi)
  • einen Webserver mit PHP-Unterstützung (ebenfalls RaspberryPi)

Der Plan

Die Homematic-CCU versendet die MQTT-Nachricht per HM-Script. Dadurch sind wir flexibel bei der Einbindung in unsere Programme. Das Script enthält einen WGET-Aufruf an unseren PHP Webserver auf dem RaspberryPi. Dort wird ein PHP-Script aufgerufen, welches per URL-Parameter die Meldungsdetails entgegennimmt und an den MQTT-Broker Mosquitto (ebenfalls auf dem RaspberryPi) weitergibt. Der Mosquitto-Server erstellt dann die entsprechenden Broadcasts an die Zielgeräte.

Vorbereitungen

Als Vorbereitung bitte die folgenden Schritte ausführen. Genaue Informationen sind zu Hauf im Internet zu finden:

  1. CUxD auf der CCU installieren
  2. RaspberryPi im Heimnetz in Betrieb nehmen (LAN oder WLAN)
  3. Webserver “Apache2” auf dem RaspberryPi installieren (incl. PHP Interpreter)
  4. Mosquitto-Broker auf dem RaspberryPi installieren
  5. Entsprechende MQTT-Clients auf euren Zielgeräten einrichten

 

Los gehts…

In das www-Verzeichnis des Apache Webservers auf unserem RaspberryPi packen wir nun das folgende Script und nennen es “mqtt_send.php”:

<?php 
  echo("<h1>Send MQTT-Message</h1>");
  $server  = escapeshellcmd($_REQUEST["p_server"]); 
  $topic   = escapeshellcmd($_REQUEST["p_topic"]); 
  $message = escapeshellcmd($_REQUEST["p_message"]); 

  echo("<BR>Server: ".$server);
  echo("<BR>Topic: ".$topic);
  echo("<BR>Message: ".$message);

  exec("mosquitto_pub -h ".$server." -t ".$topic." -m ".$message);

  echo("<BR>Fertig.");
?>

Dieses Script sendet eine MQTT-Message über den Mosquitto-Client auf dem RaspberryPi.

Dazu fragt es beim Aufruf die übergebenen Parameter ab:

  • p_server:   Server-Adresse unseres MQTT-Brokers (in unserem Fall identisch mit der IP-Adresse des RaspberryPi. (z.B. 192.168.178.123)
  • p_topic:  das Topic unserer Nachricht  (z.B. “hue_beleuchtung”)
  • p_message:  der Inhalt unserer “Nachricht”  (z.B. “gedimmt_fernsehen”)

Anschließend wird aus den Parametern der EXEC-Befehl generiert und an die Kommandozeile des Raspberrys zur Ausführung gegeben.

Somit brauchen wir nur noch ein Homematic-Script, welches das PHP-Script samt Parametern aufruft:

string stdout;
string stderr;
string url="";
string topic="hue";
string message="aus";

url="http://(IP-Adresse-des-Raspberrys)/mqtt_send.php?p_server=(IP-Adresse-des-MQTT-Brokers)&p_topic="#topic#"&p_message="#message#"";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -O /dev/null -q '"#url#"'");

Hier müsst Ihr noch die IP-Adressen und die Details der Nachricht in den Variablen “topic” und “message” sowie ggf. die CUxD-Objektbezeichnung anpassen.

Es kommt das CUxD-Tool auf der CCU zum Einsatz, um zuverlässige System-Executes ausführen zu können. Diese rufen den standardmässig installierten wget zum Absenden des HTTP-Requests an den Apache Server auf.

Fortan kann die Homematic-CCU also über diesen Weg per Script Nachrichten an den MQTT-Broker senden.

Und wozu das Ganze ?

Die Einsatzzwecke der CCU im Zusammenspiel mit dem IoT erweitern sich dadurch enorm. Folgende Funktionen werden möglich:

  • Datenaustausch mit einem Arduino, z.B. Schaltzustände an den GPIOs des Arduino aus der CCU setzen.
  • Kommunikation zwischen Homematic und Node-red, dadurch fast unendliche Möglichkeiten
  • Steuerung von externen Displays
  • Daten-Logging in verschiedenen Datenbanken
  • ….
  • ….

In einem der nächsten Beiträge berichte ich über konkrete Projekte, in denen die MQTT-Kommunikation zwischen Homematic und anderen Systemen zum Einsatz kommt.

Viel Spaß beim Basteln !

Kami

Schreibe einen Kommentar

Deine Email-Adresse wird nicht veröffentlicht.