Kennt ihr das? Aus der Not heraus, weil ein Dritter irgendwelchen Mist verzapft, entsteht eine großartige Idee, die dann auch noch gut umgesetzt wird?
In meinen Fall war der Dritte Devolo, Devolo hat vor ein paar Wochen ihre Home Control iOS-App auf 1.1 geupdatet. Diese hatte ein tolles neues Feature: „iPad-Ansicht: optimierte Darstellung für iPads (Querformat)“
Geil Freunde, nur leider wird dieses Querformat erzwungen, eine Nutzung am iPad im Hochformat ist nicht mehr möglich. Prima, wenn das iPad mini zur Haussteuerung im Hochformat an der Wand hängt. (Sarkasmus-Schild)
➡ Auch die Version 1.2 die vor ein paar Tagen erschienen ist, hat das „Problem“ nicht behoben – obwohl ich mich mehrfach beschwert habe. UPDATE_20170407: Das ersehnte Update soll voraussichtlich Ende April / Anfang Mai kommen.
Naja, jedenfalls war ich ziemlich sauer, bin oft im Kopf durchgegangen:
- wieder zurück zu Homee?
- andere Alternativen?
- gedulden bis das Problem behoben ist?
Zwische durch hat Amazon Echo mit Alexa die Blogs bestimmt – Skills, Devolo Skill, IFTTT, HA Bridge, Homebridge. Und irgendwie im Gespräch mit meinem Arbeitskollegen Kevin, den einige von euch bereits von unserem Projekt bidvoy kennen, kam die Idee, da er auch gerade auf das Devolo HomeControl umgestiegen ist, dass eine Steuerung in Apples Home App (HomeKit) eine wirklich feine Sache wäre.
Stichwort Homebridge: Homebridge ist eine Schnittstelle, die offiziell nicht HomeKit kompatible Geräte, teilweise HomeKit kompatibel werden lässt. Dazu benötigt man, wie sollte es anders sein, im besten Fall einen Linux-Server oder Raspberry Pi.
Nun ja, für Homebridge gibt es dann jede Menge Plugins, die oftmals nicht vom Homebridge-Entwickler selber stammen, sondern von der Community rundherum.
Ich persönlich nutze aktuell homebridge-cmdswitch2, homebridge-dash, homebridge-devolo, homebridge-fritz, homebridge-harmonyhub, homebridge-http, homebridge-hue, homebridge-netatmo, homebridge-samsungtv-control, homebridge-server, homebridge-sonos und homebridge-wunderground.
Nur leider gab es zu diesem Zeitpunkt noch kein Homebridge-Plugin für Devolo Geräte die mit dem Devolo HomeControl verbunden sind – aufgrund der fehlenden offiziellen API auch so gut wie nicht machbar.
Aber nach etlichen Stunden Reverse Engineering der iOS- & Android-Apps hatten wir alles zusammen, was man für ein funktionierendes Plugin benötigt. (… wir kleinen Blackhats!)
Kevin machte sich an die Arbeit und ein paar Tage später, nachdem wir mit Devolo die rechtliche Seite geklärt hatten, haben wir alles auf GitHub hochgeladen, wo es nun jeder SmartHome-Liebhaber mit Homebridge benutzen kann. Nach und nach werden sicher noch ein paar Features dazukommen.
Homebridge
Vorbereitung
Um Homebridge installieren zu können, benötigt man noch ein paar weitere Debian Pakete, welche wir mit apt-get
nachinstallieren.
apt-get install curl git build-essential libssl-dev libavahi-compat-libdnssd-dev
Da Homebridge für Node.js geschrieben ist, müssen wir natürlich auch Node installieren.
#curl -sL https://deb.nodesource.com/setup_8.x | bash - curl -sL https://deb.nodesource.com/setup_10.x | bash - apt-get install nodejs
Installation
Homebridge installieren
Jetzt sind alle Vorbereitungen abgeschlossen und Homebridge kann installiert werden.
npm install -g --unsafe-perm homebridge
Sollte die Installation von Homebridge mit der Fehlermeldung …
ImportError: No module named compiler.ast
… abbrechen, sollte folgende Befehl helfen – natürlich muss danach Homebridge noch erfolgreich installiert werden.
apt install python-dev npm install -g --unsafe-perm homebridge
Homebridge Dienste erstellen
Damit Homebridge ordentlich, wie es auf Linux-Systemen üblich ist, als Dienst (systemd
) laufen kann, werden zwei Dateien benötigt. Eine zur Konfiguration …
vi /etc/default/homebridge
# Defaults / Configuration options for homebridge # The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others) HOMEBRIDGE_OPTS=-U /var/lib/homebridge # If you uncomment the following line, homebridge will log more # You can display this via systemd's journalctl: journalctl -f -u homebridge # DEBUG=*
… und eine für den Dienst selber.
vi /etc/systemd/system/homebridge.service
[Unit] Description=Node.js HomeKit Server After=syslog.target network-online.target [Service] Type=simple User=homebridge #User=root EnvironmentFile=/etc/default/homebridge # Adapt this to your specific setup (could be /usr/bin/homebridge) # See comments below for more information #ExecStart= /usr/bin/sudo /usr/local/bin/homebridge $HOMEBRIDGE_OPTS ExecStart=/usr/bin/homebridge $HOMEBRIDGE_OPTS Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target
Im Verzeichnis /var/lib/homebridge
wird die config.json
angelegt, die für die gesamte Konfiguration für Homebridge zuständig ist – diese Datei ist für Homebridge das Herzstück! Erstmal muss allerdings das Verzeichnis angelegt werden.
mkdir /var/lib/homebridge
Des Weiteren soll der Dienst nicht unter „root“ laufen, sondern unter dem neuen, unprivilegierten User „homebridge“ – daher muss dieser angelegt werden.
useradd --system homebridge -m -s /bin/bash mkdir /home/homebridge/.homebridge/ chown -R homebridge:homebridge /home/homebridge chown -R homebridge:homebridge /var/lib/homebridge
Um Die Installation abzuschließen, sollten noch die Dienste neugeladen werden und der Homebridge-Dienst aktiviert werden, damit dieser beim (Neu)Start des Betriebsystems automatisch gestartet wird.
systemctl daemon-reload systemctl enable homebridge
Konfiguration
Kommen wir nun zur Konfiguration des, vor ein paar Zeilen erwähnten, Herzstückes von Homebridge. In der nachfolgenden Standardkonfiguration des „nackten“ Homebridges könnt ihr ggf. den Pin
anpassen, welchen ihr erst am Ende des Artikels benötigt.
vi /var/lib/homebridge/config.json
{ "bridge": { "name": "Homebridge", "username": "CC:22:3D:E3:CE:30", "port": 51826, "pin": "133-77-331" }, "platforms": [ ], "accessories": [ ] }
Jetzt starten wir den Dienst „Homebridge“ und prüfen ob dieser erfolgreich war.
service homebridge start # ein paar Sekunden warten journalctl -u homebridge --no-pager
Wichtig wäre, dass am Ende der Logdatei „Homebridge is running on port 51826
“ erscheint.
systemd[1]: Starting Node.js HomeKit Server... systemd[1]: Started Node.js HomeKit Server. homebridge[]: No plugins found. See the README for information on installing plugins. homebridge[]: Loaded config.json with 0 accessories and 0 platforms. homebridge[]: --- homebridge[]: Loading 0 platforms... homebridge[]: Loading 0 accessories... homebridge[]: Scan this code with your HomeKit App on your iOS device to pair with Homebridge: homebridge[]: ┌────────────┐ homebridge[]: │ 133-77-331 │ homebridge[]: └────────────┘ homebridge[]: Homebridge is running on port 51826.
Die Warnmeldungen von „Apple Bonjour“ und „Avahi“ können ignoriert werden – laut Homebridge Entwickler wäre es ein großer Aufwand diese zu unterdrücken, dieser steht aber in keiner Relation zum Nutzen.
Homebridge-Devolo
Nachdem wir die Basis für das Devolo Plugin geschaffen haben, kommen wir nun zum Eingemachten.
Installation
Mit der Paketverwaltung für Node.js (npm
) installieren wir nun das Devolo Plugin.
npm install -g homebridge-devolo
Konfiguration
In unserem „Herzstück“ müssen nun im Bereich „platforms
“ Anpassungen vorgenommen werden – siehe unten. Achtet hierbei ganz besonders auf die richtige Kommasetzung und die geschweiften Klammern {}, um die Fehlermeldung „There was a problem reading your config.json file
“ zu vermeiden.
vi /var/lib/homebridge/config.json
{ "bridge": { "name": "Homebridge", "username": "CC:22:3D:E3:CE:30", "port": 51826, "pin": "133-77-331" }, "platforms": [ { "platform" : "Devolo", "name" : "Devolo", "host" : "192.168.XXX.XXX", "email" : "mail@domain.com", "password" : "password" } ], "accessories": [ ] }
- host = lokale IP von eurer Devolo Zentrale (HomeControl)
- die Kommunikation zwischen Homebridge und der Zentrale findet im lokalen Netzwerk statt, es wird keine aktive Internetverbindung zur Steuerung der Geräte benötigt
- email = Benutzername mit dem ihr euch bei mydevolo.de anmelden könnt
- password = das dazugehörige Passwort
Um zu prüfen, ob alles funktioniert hat, muss Homebridge neugestartet werden. Sollte die Fehlermeldung „There was a problem reading your config.json file
“ erscheinen, ist mit großer Wahrscheinlichkeit ein Komma zu viel oder eine Klammer zu wenig – da kann ich euch JSONLint empfehlen, hier könnt ihr den Inhalt eurer config.json
rein kopieren und prüfen lassen.
Nunja, der nachfolgende Neustart von Homebridge ist für die abschließende Konfiguration sehr wichtig, da wir dann in der Logdatei 3 noch benötigte Zeilen finden werden – UUID
, GATEWAY
und PASSKEY
.
service homebridge restart sleep 5 journalctl -n 50 -u homebridge --no-pager
homebridge[]: Loading 1 platforms... homebridge[]: [Devolo] Initializing Devolo platform... homebridge[]: [Devolo] HBDevoloPlatform > Searching for Devolo Central Unit. homebridge[]: Loading 0 accessories... homebridge[]: [Devolo] HBDevoloPlatform > Central Unit found. homebridge[]: [Devolo] HBDevoloPlatform > Please edit config.json and restart homebridge. homebridge[]: "platforms": [ homebridge[]: { homebridge[]: "platform": "Devolo", homebridge[]: "name": "Devolo", homebridge[]: "host": "192.168.XXX.XXX", homebridge[]: "email": "mail@domain.com", homebridge[]: "password": "password", homebridge[]: "uuid": "ABCDE123-1337-3333-7331-FEDCBA987", homebridge[]: "gateway": "1234567890123456", homebridge[]: "passkey": "ABEAC07D3C28C1BEF9E730002C753ED4" homebridge[]: } homebridge[]: ]
Diese 3 Zeilen mit der UUID
, dem GATEWAY
und PASSKEY
müssen nun noch in die config.json
, …
vi /var/lib/homebridge/config.json
… wenn dies erledigt ist, muss Homebridge ein letztes Mal neugestartet werden.
service homebridge restart
Wenn wir nun in die Logdatei schauen, werden wir endlich für unsere Mühen belohnt, denn wir sehen, dass jede Menge Devolo Geräte gefunden wurden und diese voraussichtlich auch in der Apple Home App angezeigt werden.
journalctl -n 50 -u homebridge --no-pager
homebridge[]: [Devolo] HBDevoloPlatform > Central Unit found. homebridge[]: [Devolo] HBDevoloCentralUnit > Device "devolo.model.Siren" is not supported (yet). Open an issue on github and ask for adding it. homebridge[]: [Devolo] Initializing platform accessory 'Devolo Central Unit'... homebridge[]: [Devolo] Initializing platform accessory 'Entertainment'... homebridge[]: [Devolo] Initializing platform accessory 'Bewegungsmelder'... homebridge[]: [Devolo] Initializing platform accessory 'Handtuchheizkörper'... homebridge[]: [Devolo] Initializing platform accessory 'Fenster'... homebridge[]: [Devolo] Initializing platform accessory 'Haustür'... homebridge[]: [Devolo] Initializing platform accessory 'Bewegungsmelder'... homebridge[]: [Devolo] Initializing platform accessory 'Wassermelder'... homebridge[]: [Devolo] Initializing platform accessory 'Luftfeuchtemelder'... homebridge[]: [Devolo] Initializing platform accessory 'Server'...
Tipp: Ich starte über /etc/crontab
jede Nacht Homebridge einmal neu – sicher ist sicher.
Apple Home (HomeKit)
Zum Abschluss muss nun nur noch unser iOS-Gerät mit der Homebridge verbunden werden – hierzu benötigen wir nun den Pin, den wir am Anfang in der config.json
festgelegt haben.
Verbinden
Ein Tipp am Rande: Aktuell werden von der Apple Home App nicht alle Funktionen unterstützt die HomeKit im Stande wäre umzusetzen – dies wird zwar von iOS Release zu iOS Release besser, aber dennoch lohnt es sich in andere Apps zu schauen die HomeKit unterstützen, beispielsweise Hesperus.
Viel Spaß mit euren Devolo Geräten in Apple Home.
Was habt ihr so für SmartHome-Spielereien in eueren vier Wänden? Was begeistert euch?
Hi,
weisst Du zufälig, ob zukünftig auch noch Szenen und Regeln aus der DHC ausgelesen und im Devolo Plugin verwendet werden können?
Hi Tim,
ja, das wird zukünftig gehen. Ich nutze auch schon ein Testbuild davon. 🙂
Allerdings können Regeln nicht aktiviert oder deaktiviert werden – das geht auf dem lokalen DHC nicht (das Plugin geht nicht über die Cloud, sondern bleibt lokal). Die Regeln wären dann also nur eine „Statusanzeige“. Die Szenen können aber „abgespielt“ werden und so auch ggf. die Regeln geschaltet werden.
Gruß Nico
Hi Nico,
vielen Dank für die Info. Das hört sich super an. 🙂
Aktualisiert sich das Plugin von selber oder muss ich die Github Seite im Auge behalten? Und wie funktioniert ein Update des Plugins?
Hi Tim,
das Plugin muss händisch aktualisiert werden.
Du kannst die GitHub-Seite im Auge behalten, aber nicht jeder Commit ist eine neue Version. Besser wäre du schaust hier (published X days/months ago).
Auf der Konsole kannst du mit …
npm -g outdated
prüfen, ob es neue Version gibt und dann mit …
npm -g update PACKAGENAME
… updaten.
Gruß Nico
Hi,
I tried to get homebridge devolo running. I’ve tried in a synology docker image, and on a raspberry pi3 with raspbian jessie lite. Whatever I do, whatever nodejs version (4/5/6/7/8!!!) etc, homebridge is always running fine, reachable on my iphone. But as soon as I put devolo plugin in config.js, it crash.
Here are more details:
https://github.com/kdietrich/homebridge-devolo/issues/12
Would really test that!
Hallo und zunächst mal Danke für die aus führliche Anleitung.
Ich habe folgende Fehlermeldung und ab da geht dann nichts mehr richtig weiter. Hast Du eine Idee?
—————-
root@raspberrypi:/# systemctl daemon-reload
root@raspberrypi:/# systemctl enable homebridge
Synchronizing state of homebridge.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable homebridge
Failed to enable unit: File homebridge.service: Invalid argument
—————–
Die Installation von Homebridge habe ich entsprechend Deiner Anleitung gestartet und die lief durch….
Vielen Dank!
Hi Olli,
irgendetwas gefällt deinem System nicht an der
/etc/systemd/system/homebridge.service
. Ist eventuell ein ungültiges Zeichen drin oder hast du dich beim Kopieren vertan?UDAPTE
Welches Betriebsystem hast du? Welche Version?
Ich glaube dein System hat einen der Dienste „
syslog.target
“ oder „network-online.target
“ (After
Variable in der Service-Dateihomebridge.service
) nicht nicht?Gruß Nico
Hi Nico,
jetzt läuft es, nach vielem Probieren habe ich dann versucht den avahi dns dienst zu aktivieren und dann war plätzlich alles ok…
Danke für Deine Rückmeldung!!!
Anderes Problem:
Ich versuche jetzt noch die Netatmo Wetterstation einzubinden mit
dem Homebridge-Netatmo plugin.
Die config.json ist angepasst und ok.
Beim Sart von Hombridge gibt es eine Meldung
Error: Cannot add a bridged Accessory with the same UUID as another bridged Accessory: 402b260e-3ed6-45bf-a177-62e739520140
at Bridge.Accessory.addBridgedAccessory (/usr/local/lib/node_modules/hap-nodejs/lib/Accessory.js:264:13)……
Das bezieht sich wohl auf die UUID von Devolo in der config.
Hast Du dazu eine Idee?
Danke und viele Grüße
Olli
Hi Olli,
er erkennt aus irgendwelchen Gründen zweimal das gleiche Gerät – hatte ich auch schonmal. Stoppe mal Homebridge, löschen die zwischengespeicherten Geräte und starte Homebridge.
service homebridge stop
rm /var/lib/homebridge/accessories/cachedAccessories
service homebridge start
Viel Glück.
Hallo,
Danke Euch für dieses tolle Plugin! Eine Frage habe ich: Was ist zutun, wenn ein neues Gerät ins Z-Wave Netz im DHC inkludiert wird damit es auch im HomeKit erscheint?
Viele Geüße,
Andreas
BTW: Eine Unterstützung des Danfoss LC-13 wäre super!
Hi Andreas,
du musst dazu nur Homebridge neustarten.
service homebridge restart
Für die Unterstützung des Danfoss LC-13 machst du am Besten ein Issue in GitHub auf – theoretisch sollte es genauso wie das Devolo Heizkörperthermostat ticken.
Gruß Nico
Hi Nico,
Danke für die prompte Antwort und die Hilfestellung…
Viele Grüße,
Andreas