Basierend auf meinem Artikel zur Installation von HomeBridge geht es in diesem Beitrag um das Erweitern der Installation um Plugins zum Schalten vorhandener Geräte und Auslesen von Sensoren sowie der Konfiguration des Setups. Dabei gehe ich vor allem auf die Steuerung der Funksteckdosen über Raspberry-Remote (Installation und Konfiguration siehe dieser Artikel, das Auslesen gespeicherter Sensordaten sowie mögliche Erweiterungen ein.
1. Plugin zum Steuern der Funksteckdosen
Um die Funksteckdosen zu Schalten (auch z.B. über den ESP8266), bietet sich das Plugin „homebridge-http“ an, das es erlaubt diese über das Webinterface von Raspberry-Remote zu schalten. Auch der aktuelle Status der Dosen kann damit ausgelesen werden (weiteres PHP-Skript erforderlich). Ihr installiert euch das Plugin ganz einfach über npm mit
1 | sudo npm install -g homebridge-http |
Der Befehl richtet euch das Plugin gleich ein, sodass ihr es sofort verwenden könnt. Bevor wir mit der Konfiguration von HomeBridge zur Nutzung des Plugins fortfahren, erstellen wir noch ein kleines PHP-Skript, um den Status in einer für das Plugin verständlichen Form auslesen zu können. Erstellt dazu eine Datei z.B. mit dem Namen „status.php“ unter dem Ordner, in dem auch euer Webinterface für Raspberry-Remote installiert wurde (z.B. „/var/www/remote/“ bzw. „/var/www/html/remote/“).
[Update 28.01.2017] Mit den neueren Versionen von raspberry-remote funktioniert das ursprünglich vorgestellte Script zum Auslesen des Status der Funksteckdosen nicht mehr. Torsten (Danke dafür!) hat in den Kommentaren aber eine wohl funktionstürchtige Modifikation für neuere Versionen gepostet, die ich hier in den Artikel übernommen habe (siehe „Neue Versionen von raspberry-remote“)
Alte Versionen von raspberry-remote
Der Inhalt des Skripts sollte folgender sein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php $source = $_SERVER['SERVER_ADDR']; $target = $_SERVER['SERVER_ADDR']; $port = 11337; $ig = '11010'; $is =$_GET["switch"]; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n"); socket_bind($socket, $source) or die("Could not bind to socket\n"); socket_connect($socket, $target, $port) or die("Could not connect to socket\n"); $output = $ig.$is."2"; socket_write($socket, $output, strlen ($output)) or die("Could not write output\n"); $state = socket_read($socket, 2048); $state = str_ireplace("\x0D", '', $state); echo $state; ?> |
In der Variable “$ig” müsst ihr den Wert noch mit eurem Hauscode aus der „config.php“ von Raspberry-Remote ersetzen. Die Verwendung des Skripts ist sehr einfach und kann auch im Browser getestet werden. Ruft eine URL im Format
1 | [IP]/remote/status.php?switch=01 |
auf, wobei die Zahl am Ende der Nummer der Steckdose aus der „config.php“ von Raspberry-Remote entspricht. Ist die Dose an laut Webinterface solltet ihr nun eine „1“ erhalten bzw. eine „0“, wenn die Dose aus ist.
Neue Versionen von raspberry-remote
Bei neueren Versionen von raspberry-remote könnt ihr folgendes PHP-Script benutzen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php $source = $_SERVER['SERVER_ADDR']; $target = $_SERVER['SERVER_ADDR']; $port = 11337; $iSys =$_GET["sys"]; $ig = '01010'; $is =$_GET["switch"]; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n"); socket_bind($socket, $source) or die("Could not bind to socket\n"); socket_connect($socket, $target, $port) or die("Could not connect to socket\n"); $output = $iSys.$ig.$is."2"; socket_write($socket, $output, strlen ($output)) or die("Could not write output\n"); $state = socket_read($socket, 2048); echo $state; ?> |
Die entsprechende URL zum Aufruf lautet dann:
1 | [IP]/remote/status.php?sys=1&group=01010&switch=04 |
Nun können wir mit der Konfiguration von HomeBridge weitermachen bzw. damit beginnen. Wechselt dazu auf dem Raspberry Pi in den Ordner „/home/pi/.homebridge“ über cd /home/pi/.homebridge. Dort ist eine Datei namens „config.json“, welche ihr nun bearbeitet. Nutzt dazu z.B. nano.
Exkurs: config.json
Wie die Dateiendung schon sagt, handelt es sich bei der Konfigurationsdatei um eine Datei im JSON-Format. Diese ist daher einfach zu bearbeiten und erweitern. Hier mal eine Beispielkonfiguration:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | { "bridge": { "name": "HomebridgePI", "username": "CD:22:3D:E3:CE:30", "port": 51826, "pin": "031-45-156" }, "description": "Your description.", "platforms": [], "accessories": [ { "accessory": "Http", "name": "Drucker", "switchHandling": "yes", "http_method": "GET", "on_url": "http://192.168.11.56/remote/?group=11010&switch=01&action=1&delay=0", "off_url": "http://192.168.11.56/remote/?group=11010&switch=01&action=0&delay=0", "status_url": "http://192.168.11.56/remote/status_homekit.php?switch=01", "service": "Switch", "brightnessHandling": "no", "brightness_url": "", "brightnesslvl_url": "", "sendimmediately": "", "username" : "", "password" : "" } ] } |
Nach „name“ könnt ihr einen beliebigen Namen für euren HomeKit-Server am Raspberry Pi auswählen, der „username“ kann auch geändert werden (bitte hier das Format mit den Hex-Werten beibehalten!), der „port“ sollte so gelassen werden und die „pin“ könnt ihr frei wählen (mit der Einschränkung, dass er im Format „xxx-xx-xxx“ sein muss und einfache Pins von iOS nicht akzeptiert werden [z.B. 012-34-567]). Die „description“ (Beschreibung) dürft ihr wieder frei wählen. Interessant an der JSON ist für die Konfiguration der eigenen Geräte das „accessories“-Array, indem ihr eure Geräte konfigurieren könnt.
1.1 Hinzufügen der Funksteckdosen zur HomeBridge-Konfiguration
Wie bereits erwähnt, nutze ich zum Schalten der Funksteckdosen das praktische und zuverlässige Plugin „homebridge-http“. Den Aufbau einer möglichen Konfiguration für eine Funksteckdose sehr ihr in der JSON-Datei oben. In der „accessory“-Variable wird festgelegt, dass für dieses Gerät das Plugin „homebridge-http“ genutzt werden soll, im „name“ kann ein Name für das Gerät vergeben werden (hier „Drucker“). Da es sich um ein einfaches Ein-/Aus-Gerät handelt, ist „switchHandling“ auf „yes“ gesetzt, als „http_method“ passt bei Raspberry-Remote-Geräten „GET“. Die „on_url“ und „off_url“ könnt ihr eurem Webinterface entnehmen, den generellen Aufbau sehr ihr in der JSON oben. Als „status_url“ nutzt ihr den Pfad zum PHP-Skript, welches ich weiter oben beschrieben habe, der Parameter „switch“ sollte mit dem aus „on_url“ bzw. „off_url“ übereinstimmen. Da es sich um eine Funksteckdose handelt, wird der „service“ sinnigerweise auf „Switch“ gesetzt, den Rest der Parameter könnt ihr aus der JSON oben übernehmen (hier kann noch ein Dimmer angesteuert werden und ein etwaiger Passwortschutz des Homepage-Verzeichnisses genutzt werden).
Weitere Funksteckdosen und andere Geräte werden ebenfalls in dieser JSON-Datei in das „accessories“-Array eingetragen (ein Komma zwischen den Einträgen nicht vergessen, sonst habt ihr einen Syntaxfehler, der HomeBridge hindert zu starten).
Für einen ersten Test der Konfiguration bietet es sich an, HomeBridge zu starten über homebridge.Ihr solltet nun einige Ausgaben erhalten, unter anderem auch den in der config.json angelegten Pin.
Ihr könnt nun euer iOS-Gerät zur Hand nehmen und HomeKit z.B. über die (kostenlose) App „Eve“ von Elgato einrichten. Wie das geht, habe ich bereits im Artikel zu RaZberry gezeigt, sodass ich die Bilderstrecke hier nochmals verwende:
Hinweis: Ich habe festgestellt, dass es Probleme mit HomeKit gibt, wenn der iCloud Schlüsselbund auf eurem Gerät deaktiviert ist. Aktiviert diesen also besser vor der Einrichtung.
Nach der Einrichtung könnt ihr eure Geräte auch per Siri schalten:
2. Plugin zum Anzeigen von Sensorwerten
Auch zur Verarbeitung von Sensorwerten gibt es entsprechende Plugins für HomeBridge. Ich nutze direkt am Raspberry einen DHT11, den ich regelmäßig auslese und die Werte in separate, einfache Textdateien speichere. Genau für diesen Anwendungsfall gibt es das Plugin „homebridge-temperature-file“ bzw. „homebridge-humidity-file“. Installiert werden sie wie das bereits vorgestellte http-Plugin via npm:
1 2 | sudo npm install -g homebridge-temperature-file sudo npm install -g homebridge-humidity-file |
Eure config.json muss natürlich auch erweitert werden, die Einträge dazu könnten so aussehen:
1 2 3 4 5 6 7 8 9 10 11 12 | { "accessory": "TemperatureFile", "name": "Temperatur Keller", "description": "Temperatur im Druckerraum", "file_path": "/var/www/5/current_temp.csv" }, { "accessory": "HumidityFile", "name": "Luftfeuchtigkeit Keller", "description": "Luftfeuchtigkeit im Druckerraum", "file_path": "/var/www/5/current_hyg.csv" } |
Die Variablen hier sollten selbsterklärend sein. In der eve-App sieht mein Keller-Raum dann so aus:Es gibt auch Plugins, um Sensoren auf andere Art (z.B. mittels HTTP-Requests) auszulesen – eines davon wäre „homebridge-httptemperaturehumidity“, das ein JSON-File mit Temperatur und Luftfeuchtigkeit erwartet. Leider machte dieses Plugin bei mir Probleme (Werte wurden nur teilweise oder gar nicht angezeigt), sodass ich es aktuell nicht einsetze.
3. Weitere Plugins
Es gibt natürlich noch zahlreiche weitere Plugins für HomeBridge, die sich auf gleiche Weise installieren und konfigurieren lassen. Für fast alle Szenarien gibt es fertige Bausteine, die nur noch in das eigene Setup integriert werden müssen. Werft einfach mal einen Blick auf die npm-Suche, momentan werden dort 120 Plugins gelistet – unter anderem für MQTT, OpenHAB, IFTTT und viele weitere.
Ihr habt damit HomeBridge vollständig konfiguriert und könnt es nun auch beim Booten starten lassen (siehe vorheriger Artikel). Falls ihr mehrere Familienmitglieder mit iOS-Geräten habt oder eure Freunde mit iOS-Geräten eure Geräte steuern lassen wollt, könnt ihr sie übrigens dazu einladen (siehe dazu auch die Apple-Website).
Hi,
ich habe seit es hier wieder kalt wird folgendes Problem: Negative Temperaturen werden von dem temperature-file plugin nicht akzeptiert.
In der Home App erhält man „Keine Antwort“
Ich hoffe jemand kennt die Lösung.
Viele Grüße
Hendrik
Hi,
ich habe eine konkrete Frage, ob du mir helfen kannst.
Mein setup:
Ich habe eine HomeKit steckdose, an der eine Lampe hängt (an/aus). Diese ist von meiner HomeKit steuerung (iPhone/Mac) aus steuerbar. Desweiteren habe ich einen Shelly Dimmer, der 2 switch eingänge hat. Einen der Switch Eingänge kann man mit einem URL Befehl versehen, also sendet einen URL Befehl bei „an“ oder „aus“. Ich möchte mit dieser Möglichkeit den oben erwähnten Schalter steuern können über meine HomeBridge.
Der Shelly erscheint auch in meinem HomeKit mit dem Shelly Plugin.
Ich sehe zwei Möglichkeiten:
Entweder ich kann über die Homebridge direkt den Schalter über eine (lokale) URL ansteuern oder mittels einem Virtuellen Schalter den Schalter ansteuern.
Kannst Du mir da helfen?
Ich denke dass das Plugin http-switch dafür geeignet ist, bin aber kein programmierer um das einzurichten.
Danke!