Homebridge einrichten
Dieses HOWTO zeigt die Installation und Erstinbetriebnahme von Homebridge.
Damit kann Siri benutzt werden, um FHEM-Devices zu steuern. So können Devices angesprochen werden, die offiziell HomeKit nicht unterstützen (die Vorgehensweise wurde auf einem Intel NUC mit Ubuntu Server 14.04 LTS und auf einem Raspberry Pi mit Raspian getestet). Der WIKI-Eintrag bezieht sich hauptsächlich auf eine Diskussion im FHEM-Forum. Ein Riesendank gilt vor allem Andre (justme1968) .
Die Konfiguration der inzwischen aktuellen zweiten Version des Homekot-Plugins ist in einem neuen Thread im FHEM-Forum beschrieben. Hinzugekommen ist vor allem die freie Konfigurierbarkeit der Zuordnung zwischen FHEM Device und Homekit Accessory/Service, zwischen FHEM Reading und Homekit Characteristic, das mapping vom FHEM Readingwerten zu Homekit Werten sowie das Mapping von Homekit Werten zu FHEM Set-Kommandos und Werten.
Eine Sammlung funktionsfähiger Homebridge FHEM Konfiguration kann hier gefunden werden: Homebridge User Configs. Die Sammlung befindet sich noch im Aufbau.
Vorbereitung der Umgebung
NodeJS installieren
Die nachfolgenden Befehle sind alle mit "sudo" prefixed. Wenn du unter "root" arbeitest oder deine Distribution einen anderen Mechanismus verwendet, so kannst du dies natürlich weglassen.
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential libssl-dev
Nun muss NodeJS installiert werden. Leider ist die Version im Debian Repository deutlich zu alt, daher wird mit den folgenden Befehlen das Node Repository hinzugefügt und NodeJS (in der LTS Version) entsprechend installiert:
NodeJS V4
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
NodeJS V5
curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
sudo apt-get install -y nodejs
Damit ist NodeJS installiert.
Python, g++, MDNS installieren
sudo apt-get install python g++ libavahi-compat-libdnssd-dev
Nun sind alle Voraussetzungen geschaffen.
Installation von Homebridge & notwendiger Shims
Im Nachfolgenden Absatz wird die Installation von Homebridge sowie des notwendigen Plugins (Shim) für FHEM erläutert.
Homebridge installieren
Die aktuelle Homebridge version wird mit
npm install -g homebridge
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:
npm install -g homebridge-fhem
installiert.
Homebridge aktualisieren
Die aktuelle Homebridge version wird mit
npm update -g homebridge
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:
npm update -g homebridge-fhem
installiert.
Fehler während der Installation
Bei folgendem Fehler ist das abrufen von Github nicht möglich.
npm ERR! git clone --template=/home/hs-server-admin/.npm/_git-remotes/_templates --mirror git://github.com/KhaosT/ed25519.git /home/hs-server-admin/.npm/_git-remotes/git-github-com-KhaosT-ed25519-git-d8bdee1d: github.com[0: 192.30.252.128]: errno=Die Wartezeit für die Verbindung ist abgelaufen
Fehlerursache konnte hier durch eine aktive Firewall verursacht werden.
Kommt eine DNS Fehlermeldung fehlt meistens der AVAHI-DAEMON, zu installieren via
sudo apt-get install avahi-daemon
Wenn npm beim Kompilieren von mdns mit der Meldung abbricht, daß "dns_sd.h" nicht gefunden wird, fehlt das Paket libavahi-compat-libdnssd-dev, zu installieren via
sudo apt-get install libavahi-compat-libdnssd-dev
Homebridge konfigurieren
Wichtig: Für die weiteren Schritte sollte man nicht root verwenden, sondern beispielsweise einen dedizieren Nutzer für homebridge oder der Einfachheit halber den Nutzer unter dem auch FHEM läuft (meist "fhem").
Einstellungen für homebridge
Zunächst wird das Verzeichnis für die Konfigurationsdatei erstellt und in dieses gewechselt:
mkdir -p ~/.homebridge
cd ~/.homebridge/
Nun muss darin noch die config.json erstellt bzw. angepasst werden:
nano ~/.homebridge/config.json
Hinweise zur Konfiguration:
- "bridge":
- "username": Sollte so belassen werden. Sollte später auf dem iOS Device keine Homebridge gefunden werden, so kann man hier beispielsweise den String auf 31 statt 30 enden lassen um so eine neue Homebridge vorzutäuschen.
- "port": Sollte so belassen werden
- "pin": Der PIN kann beliebig in dem Format xxx-xx-xxx angepasst werden. Dieser muss nur einmal bei der Einrichtung in iOS eingegeben werden.
- "platforms":
- "platform": Hier muss "homebridge-fhem.fhem" beibehalten werden.
- "server": Hier muss die IP des FHEM-Servers eingetragen werden. Dabei muss Homebridge nicht auf dem selben Server laufen wie FHEM, kann aber. Wenn es auf dem gleichen Rechner läuft, dann bietet es sich an, die IP 127.0.0.1 zu verwenden.
- "port": Hier muss der Port des gewählten FHEMWEBS eingetragen werden (muss nicht das "normale" sein, kann eine extra Instanz sein)
- "auth": Ist FHEM nicht mit Nutzername/Password abgesichert, so kann man diese Zeile einfach entfernen.
- "filter": Damit nicht alle Devices von Homebridge berücksichtigt werden, bietet es sich an, die Devices zu filtern. In diesem Beispiel wurden alle Devices, die über Siri steuerbar sein sollen, zusätzlich in den Raum Homekit konfiguriert.
{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
},
"platforms": [
{
"platform": "homebridge-fhem.FHEM",
"name": "FHEM",
"server": "127.0.0.1",
"port": "8083",
"auth": {"user": "FhemUser", "pass": "XXX"},
"filter": "room=Homekit"
}
],
"accessories": []
}
Wird FHEM mit SSL abgesichert, so muss zusätzlich in der Sektion "platforms" noch diese Zeile (nach "port") eingefügt werden:
"ssl": true,
FHEM konfigurieren
Die benötigten Attribute werden inzwischen beim ersten Start des von hombridge-fhem automatisch auf FHEM seite eingetragen.
Mehr zu den inzwischen verfügbaren Konfigurationsmöglichkeiten findet sich auf den github und npmjs Seiten des Plugins und im ersten Beitrag des zugehörigen Thread im Diskussion im FHEM-Forum
Start von Homebridge
Hinweis
Nach allen Änderungen die in FHEM gemacht werden, welche Homebridge betreffen, muss Homebridge neu gestartet werden. Wie der Neustart erfolgen muss, ist abhängig davon, wie man Homebridge gestartet hat. Bitte den entsprechenden Methoden entnehmen.
Einmaliger Manueller Start
homebridge
Homebridge sollte nun laufen. Hier kann man die Kommunikation nachverfolgen. Abbrechen kann das ganze mit CTRL+c (es dann auch keine Befehle mehr mit Siri möglich). Damit Siri auch Befehle ohne ständig offenes Terminal bearbeiten kann, bitten nächsten Punkt beachten.
Homebridge automatisch starten
Es gibt verschiedene Methoden, Homebridge automatisch zu starten.
Steuerung via FHEM
Auf Basis der unten stehenden Alternativen Methode wurde eine Version entwickelt, mit der man auch den Status einsehen und den Restart des Dienstes aus FHEM heraus erledigen kann. Diese Version ist auf der Seite Homebridge Start und Status in FHEM im Detail beschrieben.
Alternative Methode
Dies startet homebridge als einen Service.
Service anlegen
sudo nano /etc/init.d/homebridge
Code einfügen (startet den Homebridge Server als Benutzer "pi" und nimmt an, dass sich .homebridge/config.json in seinem Homeverzeichnis unter /home/pi/ befindet):
#!/bin/sh
### BEGIN INIT INFO
# Provides: homebridge
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time for homebridge
# Description: Enable service provided by daemon.
### END INIT INFO
export PATH=$PATH:/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules
PID=`pidof homebridge`
case "$1" in
start)
if ps -p $PID > /dev/null 2>&1; then
echo "Homebridge is already running"
else
su - pi -c "homebridge > /dev/null 2>&1 &"
echo "Homebridge starting"
$0 status
fi
;;
stop)
if ! ps -p $PID > /dev/null 2>&1; then
echo "Homebridge is not running"
else
kill $PID
echo "Homebridge closed"
fi
;;
restart)
if ! ps -p $PID > /dev/null 2>&1; then
$0 start
else
$0 stop
$0 start
fi
;;
status)
if ps -p $PID > /dev/null 2>&1; then
echo "Homebridge is running PID $PID"
else
echo "Homebridge is not running"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0
Autostart aktivieren
sudo chmod 755 /etc/init.d/homebridge
sudo update-rc.d homebridge defaults
Nun kann man mit
sudo service homebridge start
bzw.
sudo /etc/init.d/homebridge start
den Dienst starten
FHEM Device Einstellungen
Damit die zu schaltenden Geräte überhaupt in der Homebridge aufgenommen werden muss man sie im Raum Homekit hinzufügen.
Um HM-CC-RT-DN Thermostate steuern zu können, muss wie oben beschrieben folgendes attribute gesetzt werden (hier als Beispiel das Device "Heizung"):
- attr Heizung subtype thermostat
Für einen Dummy muss man den genericDeviceType setzen, also beispielsweise:
- attr Dummy genericDeviceType switch
- attr Dummy setList on off
Wie bereits vorher angemerkt: Fügt man ein Device hinzu oder führt eine Änderung an einem Device durch, so sollte homebridge neu gestartet werden.
HomeKit in iOS
Einrichtung
Um FHEM über Homebridge in iOS nutzen zu können, muss HomeKit eingerichtet werden.
Es gibt verschiedene Apps. Im folgenden wird die App EVE von Elgato empfohlen, die aus dem App-Store geladen werden muss. In der App auf:
Gerät hinzufügen
Es sollte ein Gerät mit der Bezeichnung "Homebridge" zur Auswahl erscheinen. Zur Ersteinrichtung auf PIN manuell eingeben gehen und (falls in der config.json nicht geändert):
031-45-154
eingeben.
Im Anschluss können die Devices nach Belieben in verschiedene Räume zugeteilt werden, sowie Szenen und Bereiche erstellt werden.
Schalten mit Siri
HolyMoly aus dem FHEM-Forum hat ein paar Beispiele gegeben, wie man Siri dazu bringt Devices zu schalten:
"Schalte alle Lampen im Obergeschoss ein." "Schalte Chloes Licht aus." "Dimme das Licht in der Küche." "Dimme das Licht im Esszimmer auf 50 %." "Stelle das Licht in der Küche am hellsten ein." "Stelle die Temperatur im Tahoe-Haus auf 22 °C ein." "Stelle das Thermostat im Erdgeschoss auf 21 °C ein. "Schalte den Drucker im Büro ein." "Siri, bereite alles für eine Party vor." "Bereite das Ambiente fürs Abendessen vor." "Aktiviere den Nachtruhemodus."
Mittlerweile kann Siri auch noch die Lichtfarbe von LEDs ändern.
Hinweise
Unterstützte Geräte
Das Fhem Plugin von Andre (justme1968) unterstützt automatisch mindestens die folgenden Geräte:
switches (devices with set on and set off commands) lights (devices with set on and set off commands) homematc, FS20 and ZWave dimmers (devices with set on, set off and set dim or set pct commands) HUE, WifiLight, MilightDevice, SWAP_0000002200000003 (hue, sat, bri, rgb) homematic, max and pid20 thermostats homematic, DUOFERN and FS20/IT(?) blinds homematic, MAX and FHTTK contact sensors (door, window) HM-SEC-WIN, HM-SEC-KEY presence, ROOMMATE SONOS (power, volume) harmony scenes temperaturecw and humidity sensors CO20 air quality sensor probably some more ...
Über eine entsprechende Konfiguration lässt sich darüber hinaus jedes mit FHEM steuerbare Gerät auf die unterstützten Homekit typen abbilden.
Die aktuelle Liste und eine Beschreibung der Konfigurationsmöglichkeiten findet sich auf den npmjs seiten bzw. auf github.
Zusätzliche Plugins
Für manche der über FHEM steuerbaren Geräte wie z.b. MiiLight, Harmony Hub, Phillips Hue, Sonos,... gibt es eigene homekit plugins. Wenn immer möglich empfiehlt es sich aber diese NICHT zu verwenden sondern die Steuerung über die FHEM-Integration zu realisieren da
- diese ist in der Regel sehr viel mächtiger und frei konfigurierbar ist
- es FHEM erlaubt als zentrale Instanz den Überblick über den aktuellen Gesamtzustand zu haben (wichtig bei Geräten die gepollt werden)
- die Ressourcen auf den angesteuerten Geräten schont da Werte optimal gecached werden und nur eine einzige Verbindung aufgebaut wird
Hinweis für alte homebridge Versionen
UPDATE: Homebridge funktioniert mit einer kleinen Einschränkung nun auch mit node 4.0.0. Laut Homebridge on a Raspberry Pi müssen die folgenden Abhängigkeiten (Dependencies) aus der package.json entfernt werden:
"harmonyhubjs-client": "^1.1.4", "harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git"
Hinweis zur Geschwindigkeitsoptimierung auf einem Raspberry PI
Damit es auf einem Raspberry schneller läuft, wird darüber hinaus empfohlen auch diverse Abhängigkeiten aus der package.json zu entfernen:
"ad2usb": "git+https://github.com/alistairg/node-ad2usb.git#local", "carwingsjs": "0.0.x", "chokidar": "^1.0.5", "eibd": "^0.3.1", "elkington": "kevinohara80/elkington", "harmonyhubjs-client": "^1.1.4", "harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git", "lifx-api": "^1.0.1", "lifx": "git+https://github.com/magicmonkey/lifxjs.git", "node-hue-api": "^1.0.5", "node-icontrol": "^0.1.4", "node-milight-promise": "0.0.x", "tough-cookie": "^2.0.0", "sonos": "0.8.x", "telldus-live": "0.2.x", "teslams": "1.0.1", "unofficial-nest-api": "git+https://github.com/hachidorii/unofficial_nodejs_nest.git#d8d48edc952b049ff6320ef99afa7b2f04cdee98", "wemo": "0.2.x", "wink-js": "0.0.5", "komponist" : "0.1.0", "yamaha-nodejs": "0.4.x",
Daher zunächst ein ein Backup der Datei anlegen
sudo cp package.json package.json.bkp
Am einfachsten geht das entfernen der Zeilen einem Editor, beispielsweise nano oder vi.
sudo nano package.json
Das config file sollte dann wie folgt aussehen: Achtung vor den letzten zwei "}" am Ende darf kein Komma sein.
{
"name": "homebridge",
"description": "HomeKit support for the impatient",
"version": "0.1.1",
"scripts": {
"start": "DEBUG=* node app.js || true"
},
"repository": {
"type": "git",
"url": "git://github.com/nfarina/homebridge.git"
},
"license": "ISC",
"dependencies": {
"async": "^1.4.2",
"color": "0.10.x",
"debug": "^2.2.0",
"hap-nodejs": "^0.0.2",
"isy-js": "",
"mdns": "^2.2.4",
"netatmo": "1.3.0",
"node-cache": "3.0.0",
"node-persist": "0.0.x",
"node-xmpp-client": "1.0.0-alpha23",
"q": "1.4.x",
"queue": "^3.1.0",
"request": "2.49.x",
"xml2js": "0.4.x",
"xmldoc": "0.1.x"
}
}