Homebridge einrichten: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
(Überarbeitung des Wiki-Eintrags mit aktuellen Hinweisen und ein paar Neusortierungen.)
Zeile 1: Zeile 1:
Dieses HOWTO zeigt die Installation und Erstinbetriebnahme von Homebridge.  
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).
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 {{Link2Forum|Topic=32652|LinkText=Diskussion im FHEM-Forum}}. Ein Riesendank gilt vor allem {{Link2FU|430|Andre (justme1968)}}.


Um Homebridge erfolgreich zu installieren, müssen zunächst NPM, NodeJS, Python, g++, MDNS, sowie benötigte Hilfspakete installiert werden:
Eine Sammlung funktionsfähiger Homebridge FHEM Konfiguration kann hier gefunden werden: [[Hombridge User Configs]]. Die Sammlung befindet sich noch im Aufbau.


Der WIKI-Eintrag bezieht sich hauptsächlich auf diese {{Link2Forum|Topic=32652|LinkText=Diskussion im FHEM-Forum}}. Ein Riesendank gilt vor allem {{Link2FU|430|Andre (justme1968)}}.
= Vorbereitung der Umgebung =


Eine Sammlung funktionsfähiger Homebridge FHEM Konfiguration kann hier gefunden werden: [[Hombridge User Configs]]. Die Sammlung befindet sich noch im Aufbau.
== 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.''


== NodeJS installieren ==
Zunächst wird das Betriebssystem (in diesem Falle Debian oder Ubuntu) auf den aktuellen Stand gebracht:
In der Konsole folgende Befehle eingeben:
<source lang="bash" style="width:50%;">
<source lang="bash" style="width:50%;">
sudo apt-get update
sudo apt-get update
sudo apt-get upgrade
sudo apt-get upgrade
sudo apt-get install build-essential libssl-dev
sudo apt-get install build-essential libssl-dev</source>
</source>
UPDATE: Homebridge funktioniert mit einer kleinen Einschränkung nun auch mit node 4.0.0. Laut
[https://github.com/cflurin/homebridge-shims/wiki/Minimalist-Homebridge-on-a-Raspberry-Pi Homebridge on a Raspberry Pi] müssen die folgenden Abhängigkeiten (Dependencies) aus der '''package.json''' entfernt werden:
<pre>
"harmonyhubjs-client": "^1.1.4",
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git"
</pre>


Wenn aus dem Standard Debian Repository eine zu niedrige Version installiert wird kann mit folgenden Befehlen das Node Repository hinzugefügt werden und NodeJS entsprechend installiert werden.
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:
<source lang="bash" style="width:50%;">
<source lang="bash" style="width:50%;">
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
Zeile 29: Zeile 22:
</source>
</source>


Damit es auf einem Raspberry schneller läuft wird darüber hinaus empfohlen auch diese Abhängigkeiten aus der '''package.json''' zu entfernen:
Damit ist NodeJS installiert.
 
Vorher noch ein ein Backup der Datei anlegen
<pre>cp package.json package.json.bkp oder sudo cp package.json package.json.bkp </pre>
Am einfachsten geht das entfernen der Zeilen mit dem Editor vi.
<!-- Bist Du sicher, dass "vi" das Einfachste ist? Ist nicht auf vielen Linux Systemen
    mittlerweile auch der "nano" Editor drauf? Der dürfte eigentlich !noch! einfacher sein.
-->
<pre>vi package.json oder sudo vi package.json</pre>
Mit dem Cursor vor die entsprechende Zeile gehen und mit zwei mal Taste d (dd tippen) wird die Zeile gelöscht.
 
Eventuell muss vi mit sudo vi aufgerufen werden, je nach verwendeter Distribution.
 
Gespeichert wird dann mit folgendem Ablauf: ESC :wq! Enter
<pre>
"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",
</pre>
 
Das Konfig file sollte dann wie folgt aussehen: Achtung vor den letzten zwei } am Ende dar kein Komma sein.
<source lang="javascript">
{
  "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"
  }
}
</source>


== Python, g++, MDNS installieren ==
== Python, g++, MDNS installieren ==
<source lang="bash" style="width:50%;">
<source lang="bash" style="width:50%;">
sudo apt-get install python
sudo apt-get install python g++ libavahi-compat-libdnssd-dev
sudo apt-get install g++
sudo apt-get install libavahi-compat-libdnssd-dev
</source>
</source>
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 ==
== Homebridge installieren ==
Zeile 113: Zeile 39:
npm install -g homebridge
npm install -g homebridge
</source>
</source>
installiert, der FHEM platform shim mit
installiert, was eine Weile dauert. Anschließend wird der FHEM platform shim mit:
<source lang="bash" style="width:60%;">
<source lang="bash" style="width:60%;">
npm install -g homebridge-fhem
npm install -g homebridge-fhem
</source>
</source>
installiert.


== ERR während der Installation ==
=== Fehler während der Installation ===
Bei folgendem Fehler ist das abrufen von Github nicht möglich.
Bei folgendem Fehler ist das abrufen von Github nicht möglich.
<pre>npm ERR! git clone --template=/home/hs-server-admin/.npm/_git-remotes/_templates --mirror  
<pre>npm ERR! git clone --template=/home/hs-server-admin/.npm/_git-remotes/_templates --mirror  
Zeile 125: Zeile 52:
Fehlerursache konnte hier durch eine aktive Firewall verursacht werden.
Fehlerursache konnte hier durch eine aktive Firewall verursacht werden.


== Homebridge konfigurieren ==
= Homebridge konfigurieren =
Im Verzeichnis ~/.homebridge/ muss nun noch die config.json erstellt bzw. angepasst werden:
''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:
<source lang="bash" style="width:50%;">
<source lang="bash" style="width:50%;">
nano config.json
mkdir -p ~/.homebridge
cd ~/.homebridge/
</source>
</source>


Homebridge muss nicht, kann aber auf dem selben Server laufen wie FHEM.  
Nun muss darin noch die config.json erstellt bzw. angepasst werden:
 
<source lang="bash" style="width:50%;">
Unter "server" muss die IP des FHEM-Servers und unter "port" der benutzte Port des benutzten FHEMWEBS eingetragen werden.
nano ~/.homebridge/config.json
 
</source>
Läuft der Homebridge Server auf dem gleichen Rechner wie FHEM, kann die IP 127.0.0.1 benutzt werden.
 
WICHTIG: Damit nicht alle Devices von Homebridge berücksichtig 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 ROOM Homekit per FHEM eingerichtet.
 
Der PIN kann beliebig in dem Format xxx-xx-xxx angepasst werden. Dieser muss nur einmal bei der Einrichtung in iOS eingegeben werden.


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.
<source lang="javascript" style="width:50%;">
<source lang="javascript" style="width:50%;">
{
{
Zeile 154: Zeile 90:
     "platforms": [
     "platforms": [
         {
         {
             "platform": "FHEM",
             "platform": "homebridge-fhem.FHEM",
             "name": "FHEM",
             "name": "FHEM",
             "server": "192.168.xxx.xxx",
             "server": "127.0.0.1",
             "port": "8083",
             "port": "8083",
            "filter": "room=Homekit",
             "auth": {"user": "FhemUser", "pass": "XXX"},
             "auth": {"user": "FhemUser", "pass": "XXX"}
            "filter": "room=Homekit"
         }
         }
     ],
     ],
Zeile 167: Zeile 103:
</source>
</source>


Achtung: Für ein FHEM Web Interface mit SSL Zertifikat muss die config wo folgt aussehen:
Wird FHEM mit SSL abgesichert, so muss zusätzlich in der Sektion "platforms" noch diese Zeile (nach "port") eingefügt werden:
<source lang="javascript" style="width:50%;">
<source lang="javascript" style="width:50%;">
{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:30",
        "port": 51826,
        "pin": "031-45-154"
    },
    "platforms": [
        {
            "platform": "FHEM",
            "name": "FHEM",
            "server": "192.168.xxx.xxx",
            "port": "8083",
            "filter": "room=Homekit",
             "ssl": "true",
             "ssl": "true",
            "auth": {"user": "FhemUser", "pass": "XXX"}
</source>
        }
    ],


    "accessories": []
= FHEM konfigurieren =
}
Um die Devices richtig mit FHEM und Homebridge vertraut zu machen, müssen wir noch unter dem ''global''-Device das folgende userattr hinzufügen:
<source lang="perl" style="width:50%;">
genericDeviceType:ignore,switch,outlet,light,blind,speaker,thermostat,ignore,lock,window,contact
</source>
</source>


== FHEM konfigurieren ==
Das geht am einfachsten via Eingabefeld (nicht in der fhem.cfg):
Um die Device richtig mit FHEM und Homebridge vertraut zu machen, müssen wir noch unter global etwas ergänzen:
<source lang="perl" style="width:50%;">
<source lang="perl" style="width:50%;">
attr global userattr genericDeviceType:ignore,switch,outlet,light,blind,speaker,thermostat,ignore,lock,window,contact
{ addToAttrList("genericDeviceType:ignore,switch,outlet,light,blind,speaker,thermostat,ignore,lock,window,contact") }
</source>
</source>


Einfach folgende Zeilen an die bestehenden Attribute anhängen:
Zusätzlich '''kann''' man an bestimmten Devices noch einen subtype setzen (beispielsweise Thermostaten, Rolladenschaltern oder HM-Fensteröffnersensoren). Dazu erstellt man im Device (hier als Beispiel DEIN.DEVICE als Name) zunächst das userattr "subtype":
<source lang="perl" style="width:50%;">
<source lang="perl" style="width:50%;">
genericDeviceType:ignore,switch,outlet,light,blind,speaker,thermostat,ignore,lock,window,contact
{ addToDevAttrList("DEIN.DEVICE", "subtype:thermostat,blindActuator,threeStateSensor") }
</source>
</source>
Wenn DEIN.DEVICE nun ein HM-CC-RT-DN ist, so wählt man dann in den Attributen einfach als ''subtype'' eben ''thermostat''.
= Start von Homebridge =


Diese Einstellungen können auch bei den Einzelnen Devices gemacht werden.
== Hinweis ==
Beispiel bei einem HM-CC-RT-DN, hier wird der subType thermostat gesetzt.
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.
Einfach in das Device gehen hier das Attr subtype erstellen und thermostat auswählen.


== Homebridge starten ==
== Einmaliger Manueller Start ==
<source lang="bash" style="width:50%;">
<source lang="bash" style="width:50%;">
homebridge
homebridge
</source>
</source>


Hombridge sollte nun laufen.
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.
Hier kann man die Kommunikation nachverfolgen.
Abbrechen kann das ganze mit ctrl +c.
Es sind 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 ==
== Homebridge automatisch starten ==
Eine Anleitung um die Homebridge automatisch zu starten findet sich
Es gibt verschiedene Methoden, Homebridge automatisch zu starten.
 
* hier: [https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi] oder
* [http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/]


'''''Beide Links sind obsolet, da es die app.js nicht mehr gibt'''''
=== 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.


{{Randnotiz|RNText=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.
'''''Alternative Methode'''''


==== Service anlegen ====
<code>
<code>
sudo nano /etc/init.d/homebridge
sudo nano /etc/init.d/homebridge
Zeile 293: Zeile 208:
</source>
</source>


'''Autostart aktivieren''':
==== Autostart aktivieren ====


<code>
<code>
Zeile 318: Zeile 233:
Damit die zu schaltenden Geräte überhaupt in der Homebridge aufgenommen werden muss man sie im Raum Homekit hinzufügen.
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 folgendes attribute gesetzt werden
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
# attr Heizung subtype thermostat
Für einen Dummy muss man folgendes machen.
Für einen Dummy muss man den genericDeviceType setzen, also beispielsweise:
# attr Dummy genericDeviceType switch
# attr Dummy genericDeviceType switch
# attr Dummy setList on off
# attr Dummy setList on off


== HomeKit in iOS einrichten ==
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.  
Um FHEM über Homebridge in iOS nutzen zu können, muss HomeKit eingerichtet werden.  


Zeile 340: Zeile 259:
Im Anschluss können die Devices nach Belieben in verschiedene Räume zugeteilt werden, sowie Szenen und Bereiche erstellt werden.
Im Anschluss können die Devices nach Belieben in verschiedene Räume zugeteilt werden, sowie Szenen und Bereiche erstellt werden.


== HomeBridge Allgemein ==
== Schalten mit Siri ==
Nach allen Änderungen die in FHEM gemacht werden, welche Homebridge betreffen, muss Homebridge neu gestartet werden.
'''HolyMoly''' aus dem FHEM-Forum hat ein paar Beispiele gegeben, wie man Siri dazu bringt Devices zu schalten:
<pre style="width:50%;">
"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."
</pre>
 
Mittlerweile kann Siri auch noch die Lichtfarbe von LEDs ändern.


Der Neustart ist abhängig davon, wie man Homebridge gestartet hat.
= Hinweise =


Bitte den entsprechenden Methoden entnehmen.
== Unterstützte Geräte ==
Das Fhem Plugin von {{Link2FU|430|Andre (justme1968)}} unterstützt folgende Geräte
 
    switches (devices with set on and set off commands)
    lights (devices with set on and set off commands)
    homematc and FS20 dimmers (devices with set on, set off and set dim or set pct commands)
    HUE, WifiLight, SWAP_0000002200000003 (hue, sat, bri, rgb)
    homematic, max and pid20 thermostats
    homematic 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 ...


== Steuerung von MiLight Allgemein ==
== Steuerung von MiLight Allgemein ==
Zeile 377: Zeile 327:
</source>
</source>


== Schalten mit Siri ==
== Hinweis für alte homebridge Versionen ==
'''HolyMoly''' aus dem FHEM-Forum hat ein paar Beispiele gegeben, wie man Siri dazu bringt Devices zu schalten:
UPDATE: Homebridge funktioniert mit einer kleinen Einschränkung nun auch mit node 4.0.0. Laut
<pre style="width:50%;">
[https://github.com/cflurin/homebridge-shims/wiki/Minimalist-Homebridge-on-a-Raspberry-Pi Homebridge on a Raspberry Pi] müssen die folgenden Abhängigkeiten (Dependencies) aus der '''package.json''' entfernt werden:
"Schalte alle Lampen im Obergeschoss ein."
<pre>
"Schalte Chloes Licht aus."
"harmonyhubjs-client": "^1.1.4",
"Dimme das Licht in der Küche."
"harmonyhubjs-discover": "git+https://github.com/swissmanu/harmonyhubjs-discover.git"
"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."
</pre>
</pre>


Mittlerweile kann Siri auch noch die Lichtfarbe von LEDs ändern.
== 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:
<pre>
"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",
</pre>


== Unterstütze Devices ==
Daher zunächst ein ein Backup der Datei anlegen
Das Fhem Plugin von {{Link2FU|430|Andre (justme1968)}} unterstützt folgende Geräte
<pre>sudo cp package.json package.json.bkp </pre>
 
Am einfachsten geht das entfernen der Zeilen einem Editor, beispielsweise nano oder vi.
    switches (devices with set on and set off commands)
<pre>sudo nano package.json</pre>
    lights (devices with set on and set off commands)
    homematc and FS20 dimmers (devices with set on, set off and set dim or set pct commands)
    HUE, WifiLight, SWAP_0000002200000003 (hue, sat, bri, rgb)
    homematic, max and pid20 thermostats
    homematic blinds
    hommatic, 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 ...
 


Das config file sollte dann wie folgt aussehen: Achtung vor den letzten zwei "}" am Ende darf kein Komma sein.
<source lang="javascript">
{
  "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"
  }
}
</source>


[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]

Version vom 28. Dezember 2015, 16:43 Uhr

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) .

Eine Sammlung funktionsfähiger Homebridge FHEM Konfiguration kann hier gefunden werden: Hombridge 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:

curl -sL https://deb.nodesource.com/setup_4.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.

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.

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

Um die Devices richtig mit FHEM und Homebridge vertraut zu machen, müssen wir noch unter dem global-Device das folgende userattr hinzufügen:

genericDeviceType:ignore,switch,outlet,light,blind,speaker,thermostat,ignore,lock,window,contact

Das geht am einfachsten via Eingabefeld (nicht in der fhem.cfg):

{ addToAttrList("genericDeviceType:ignore,switch,outlet,light,blind,speaker,thermostat,ignore,lock,window,contact") }

Zusätzlich kann man an bestimmten Devices noch einen subtype setzen (beispielsweise Thermostaten, Rolladenschaltern oder HM-Fensteröffnersensoren). Dazu erstellt man im Device (hier als Beispiel DEIN.DEVICE als Name) zunächst das userattr "subtype":

{ addToDevAttrList("DEIN.DEVICE", "subtype:thermostat,blindActuator,threeStateSensor") }

Wenn DEIN.DEVICE nun ein HM-CC-RT-DN ist, so wählt man dann in den Attributen einfach als subtype eben thermostat.

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"):

  1. attr Heizung subtype thermostat

Für einen Dummy muss man den genericDeviceType setzen, also beispielsweise:

  1. attr Dummy genericDeviceType switch
  2. 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 folgende Geräte

   switches (devices with set on and set off commands)
   lights (devices with set on and set off commands)
   homematc and FS20 dimmers (devices with set on, set off and set dim or set pct commands)
   HUE, WifiLight, SWAP_0000002200000003 (hue, sat, bri, rgb)
   homematic, max and pid20 thermostats
   homematic 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 ...

Steuerung von MiLight Allgemein

Wie hier im Forum erwähnt, ist es möglich auch MiLight Geräte per Siri anzusprechen. Hierzu muss die config.json angepasst werden.

1. Es muss die Bridge hinterlegt werden. Beispiel

        {
            "platform": "MiLight",
            "name": "MiLight",
            "ip_address": "192.168.001.033",
            "port": 8899,
            "type": "rgbw",
            "delay": 30,
            "repeat": 3,
            "zones":["Wohnzimmer Lampen","Badezimmer Lampen","Büro Lampen","Keller Lampen"]
        },

2. Es muss für jedes zu Steuernde Gerät ein Dummy angelegt werden. Beispiel:

        {
            "accessory": "Http",
            "name": "Kitchen Lamp",
            "on_url": "https://192.168.1.22:3030/devices/23222/on",
            "off_url": "https://192.168.1.22:3030/devices/23222/off",
            "brightness_url": "https://192.168.1.22:3030/devices/23222/brightness/%b",
            "http_method": "POST"
        },

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"
  }
}