Mittels Homebridge kann man nicht HomeKit fähige Geräte in HomeKit einbinden. Beispiele dafür sind eine Synology Diskstation, IFTTT, ein Logitech Harmony Hub, Netatmo Wetterstation und Amazon Dash Button.
Installation von Homebridge
Ich installieren Homebridge auf einem Raspberry Pi 3 mit Jessie. Da ich meine Amazon Dash Buttons mit einbinden will werde ich hier die Installation als root durchführen, bzw. Homebridge mit root laufen lassen.
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
apt-get install -y nodejs
apt-get install libavahi-compat-libdnssd-dev
npm install -g --unsafe-perm homebridge
Damit habt Node.js, Avahi und Homebridge installiert. Das Konfigurationsfile liegt nun unter /root/.homebridge/config.json bzw. muss dort angepasst werden.
Nun kümmern wir uns um den Autostart.
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 /root/.homebridge
# If you uncomment the following line, homebridge will log more
# You can display this via systemd's journalctl: journalctl -f -u homebridge
# DEBUG=*
vi /etc/systemd/system/homebridge.service
[Unit]
Description=Node.js HomeKit Server
After=syslog.target network-online.target
[Service]
Type=simple
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/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
Damit konfiguriert ihr den Systemd Service für Homebridge
Homebridge läuft danach mit Root Rechten und die Konfiguration wird unter /root/.homebridge/ abgelegt. Den Eintrage EnvironmentFile sollte ihr gleich der Ausgabe folgendes Befehles anpassen:
which homebridge
Damit wird der Autostart gesetzt:
systemctl daemon-reload
systemctl enable homebridge
Nun können wir Plugins installieren. Ich werde auf die von mir installierten kurz eingehen und meine Konfig hier einstellen. Man muss sich penibelst an die Syntax des Json Files halten, ansonsten wird Homebridge nicht laufen. Sehr hilfreich ist dabei der JSON Validator.
Harmony Hub
Ihr sollten nicht die neueste Version des Plugins verwendet, denn dort kommt es regelmäßig zu abstürzen.
npm install -g homebridge-harmonyhub@0.1.1
Damit wird die stabilsten Version installiert, die bei mir auch nach Tagen nicht abstürzt.
Solltet ihr bereits die aktuellste Version 0.2.0 installiert haben dann könnte ihr dieses natürlich wieder rückgängig machen:
npm uninstall -g homebridge-harmonyhub
npm install -g homebridge-harmonyhub@0.1.1
Der Harmony Hub wird unter platforms eingetragen:
{
"platform": "HarmonyHub",
"name": "Harmony Hub"
}
Mehr muss nicht gemacht werden.
Netatmo Wetterstation
npm install -g homebridge-netatmo
Damit habt ihr dann auch schon das Plugin installiert.
{
"platform": "netatmo",
"name": "netatmo platform",
"ttl": 5,
"auth": {
"client_id": "eureid",
"client_secret": "euersecret",
"username": "username",
"password": "password"
}
Die Client ID und das Client Secret erhaltet ihr bei Netatmo. Dort müsst ihr euch mit euren Daten einloggen und eine neue App anlegen. Username und Password sind eure normalen Zugangsdaten.
IFTTT
npm install -g homebridge-ifttt
{
"platform": "IFTTT",
"name": "IFTTT",
"makerkey": "euermakerkey",
"accessories": [{
"name": "Name",
"buttons": [{
"caption": "Name des Buttons",
"triggerOn": "triggername",
"triggerOff": "triggername2"
}]
}]
}
Euren Makerkey erhaltet ihr wenn ihr euch bei den IFTTT Maker Webhooks anmeldet. Caption bezeichnet den Schalternamen, wie er in Homemkit angezeigt wird. Wenn ihr nur einen trigger verwendet, habt ihr einen Schalter der kurz an geht und wieder auf aus springt.
Ihr erzeugt ein neues Applet mit dem If Maker Webhook und euerem Trigger-Name. Damit steuert ihr dann das Applet an.
FRITZ!Box
npm install -g homebridge-fritz
Das sollte bereits bekannt sein
{
"platform": "Fritz!Box",
"name": "My FritzBox",
"username": "euerusername",
"password": "euerpasswort",
"url": "http://fritz.box",
"interval": 60,
"options": {
"strictSSL": false
}
}
Hier muss nur noch der Username und das Passwort angepasst werden. Danach habt ihr Zugriff auf eure Dect 200 Steckdosen.
Synology Diskstation
npm install -g homebridge-synology
{
"accessory": "Synology",
"name": "Diskstation",
"ip": "eureipderdiskstation",
"mac": "euremac",
"port": "5000",
"secure": false,
"account": "username",
"password": "password",
"version": 6,
"timeout": 5000,
"disabled": []
}
Dieses Plugin wird als Accessorie eingebunden und ermöglich es die Diskstastion per Wake On Lan zu starten, die Temperatur auszulesen und den aktuellen Status zu sehen,
Amazon Dash Button
Es gibt zwei Varianten um die Dash Buttons in Homebridge einzubeinden. Mit homebridge-amazondash hatte ich weniger Erfolg, da jedes Mal zwei Tastendrucke erkannt wurden. Daher verwende ich homebridge-dash. Ein weiterer Vorteil ist das hier die Buttons als Schalter eingebunden werden.
Die Button richtet ihr erst mal so ein, wie in der Anleitung beschrieben. Ihr fügt jedoch kein Produkt hinzu, sondern schließt die App, bzw. ich habe sie gekilled.
Damit wir den Button danach erst mal finden, müssen wir node-dash-button installieren:
apt-get install libpcap-dev
npm install node-dash-button
Libcap muss als Root laufen, daher läuft auch mein Homebridge als Root.
Nun können wir uns auf der Suche nach der MAC begeben:
node node_modules/node-dash-button/bin/findbutton
Drückt nun euren Dash button und ihr sollten die MAC des Buttons finden. Diese tragt ihr in die config ein
{
"accessory": "Dash",
"name": "Dash 1",
"protocol": "udp",
"mac": "11:22:33:44:55:66"
},
{
"accessory": "Dash",
"name": "Dash 2",
"protocol": "udp",
"mac": "11:22:33:44:55:88"
},
{
"accessory": "Dash",
"name": "Dash 3",
"protocol": "udp",
"mac": "11:22:33:44:55:77"
}
Meine Konfiguration
{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:31",
"port": 51826,
"pin": "031-45-154"
},
"accessories": [{
"accessory": "Synology",
"name": "Diskstation",
"ip": "x.x.x.x",
"mac": "11:22:33:44:55:66",
"port": "5000",
"secure": false,
"account": "user",
"password": "password",
"version": 6,
"timeout": 5000,
"disabled": []
},
{
"accessory": "Dash",
"name": "Dash 1",
"protocol": "udp",
"mac": "11:22:33:44:55:66"
},
{
"accessory": "Dash",
"name": "Dash 2",
"protocol": "udp",
"mac": "11:22:33:44:55:66"
},
{
"accessory": "Dash",
"name": "Dash 3",
"protocol": "udp",
"mac": "11:22:33:44:55:66"
}
],
"platforms": [{
"platform": "HarmonyHub",
"name": "Harmony Hub"
}, {
"platform": "netatmo",
"name": "netatmo platform",
"ttl": 5,
"auth": {
"client_id": "clientid",
"client_secret": "clientsecret",
"username": "username",
"password": "password"
}
}, {
"platform": "Fritz!Box",
"name": "My FritzBox",
"username": "username",
"password": "password",
"url": "http://fritz.box",
"interval": 60,
"options": {
"strictSSL": false
}
},
{
"platform": "IFTTT",
"name": "IFTTT",
"makerkey": "makerkey",
"accessories": [{
"name": "Name",
"buttons": [{
"caption": "Button Name",
"triggerOn": "trigger on",
"triggerOff": "trigger off"
}]
}]
}
]
}
Einbinden in iOS
Ihr startet die iOS Home App und fügt über + ein Gerät hinzu. Homebridge wird in eurem Netzwerk automatisch erkannt und die darüber angebundene Hardware. Den Code den ihr eingeben müsst, findet ihr in der config.json. Vergesst aber nicht den Dienst zu starten.
systemctl start homebridge
Tips und Tricks
- Erstellt euch immer eine Kopie eurer config.json bevor ihr etwas ändert
- Installiert möglichst immer nur ein Plugin gleichzeitig und testet es dann. Das erleichtert die Fehlersuche ungemein.
- Mittels homebridge -D lasst ihr Homebridge im Debugmodus laufen und seht alle Meldungen.
- Ein Logfile direkt wird nicht geschrieben. Ihr könnt mittels systemctl status homebridge -l euch die letzten Ereignisse des Dienstes anzeigen lassen oder das Journal mit journalctl -u homebridge öffnen. Ebenfalls möglich ist es mit sudo tail -f /var/log/syslog | grep homebridge euch das laufende Log in der Konsole ausgeben zu lassen.
- Es kann auch helfen die Daten von Homebridge zurückzusetzen. Dazu entkoppelt ihr Homebridge aus iOS, stopt den Dienst und löscht folgende Verzeichnisse. Anschließend könnt ihr die Homebridge wieder neu koppeln. Ihr müsst zwar die Geräte neu verteilen, aber das geht relativ fix.
rm -rf /root/.homebridge/accessories/
rm -rf /root/.homebridge/persist/
Sehr schöne Anleitung, allerdings wird scheinbar kein *.log erzeugt oder mache ich was verkehrt?
Du machst nichts verkehrt, es wird kein direktes log erzeugt. Du kannst mittels systemctl status homebridge -l dir die letzten Ereignisse des Dienstes anzeigen lassen oder das Journal mit journalctl -u homebridge öffnen.
Okay, kann ich den das den so einstellen, dass die logs erstellt werden?
Der Befehl „journalctl -u homebridge“ geht bei mir nicht.
Was bedeutet geht nicht? Welche Fehlermeldung wird dir angezeigt? Wie startest du Homebridge? journalctl ist ein Teil von systemd welches in Debian Jessie enthalten ist. Bei Wheezy ist es nicht drin. Schau mal mit lsb_release -a welche Version du hast.
Du kannst auch Homebridge im Debug-Modus startet mittels DEBUG=* homebridge -D, danach solltest du direkt die Meldungen ausgegeben bekommen und es sollen auch Logfiles generiert werden (siehe https://github.com/nfarina/homebridge/wiki/Basic-Trouble-Shooting).
Vielen Dank erstmal.
Hab leider noch eine kleines Problem, wenn ich den Amazon Dash Button über „Amazon Dash Button“ installieren möchte, kommt die Meldung: Hast jemand noch einen Tip?
npm ERR! code 128
npm ERR! Command failed: /usr/bin/git clone –depth=1 -q -b master https://github.com/mranney/node_pcap.git /root/.npm/_cacache/tmp/git-clone-83113
npm ERR! fatal: Konnte führende Verzeichnisse von ‚/root/.npm/_cacache/tmp/git-clone-83113‘ nicht erstellen.: Keine Berechtigung
npm ERR!
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/xxx_892Z-debug.log
In den Fehlermeldungen steht „Keine Berechtigung“, versuch mal als root zu installieren.
Das habe ich getan… mit sudo vorweg
Sorry, aber da fällt mir dann auch nix mehr zu ein.
Hi,
meine Homebridge bricht immer ab nach dem sie startet. Ich habe das config.json file händisch anlegen müssen. Dies kann Aber nicht der Fehler sein.
root@homebridge:~# homebridge -D
*** WARNING *** The program ’nodejs‘ uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see
*** WARNING *** The program ’nodejs‘ called ‚DNSServiceRegister()‘ which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see
[2017-11-18 09:46:29] No plugins found. See the README for information on installing plugins.
[2017-11-18 09:46:29] Loaded config.json with 1 accessories and 0 platforms.
[2017-11-18 09:46:29] —
[2017-11-18 09:46:29] Loading 0 platforms…
[2017-11-18 09:46:29] Loading 1 accessories…
/usr/lib/node_modules/homebridge/lib/api.js:50
if (name.indexOf(‚.‘) == -1) {
^
TypeError: Cannot read property ‚indexOf‘ of undefined
at API.accessory (/usr/lib/node_modules/homebridge/lib/api.js:50:11)
at Server._loadAccessories (/usr/lib/node_modules/homebridge/lib/server.js:264:42)
at Server.run (/usr/lib/node_modules/homebridge/lib/server.js:86:38)
at module.exports (/usr/lib/node_modules/homebridge/lib/cli.js:40:10)
at Object. (/usr/lib/node_modules/homebridge/bin/homebridge:17:22)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
root@homebridge:~#
das der Auszug.
Kannst du mal bitte den Inhalt der config.json posten?