Apple HomeKit: Anbindung an IPS auf Basis der HomeBridge von nfarina

Hallo zusammen,

ich habe mal etwas mit der HomeBridge (https://github.com/nfarina/homebridge) experimentiert und eine „Platform“ für die Integration in IPS erstellt.

Aktuell werden zwar nur Instanzen vom Typ „LCN Unit“ unterstützt, da hier für mich der Schwerpunkt lag :-), kann aber jederzeit erweitert werden.

Die Kommunikation mit IPS läuft über die JSON-RPC-Schnittstelle.
Beim Starten des Servers werden alle vorhandenen Instanzen dynamisch abgefragt und es werden HomeKit-Accessories erstellt. Je nachdem, ob die Instanz ein LCN Ausgang oder ein LCN Relais ist, werden Methoden zum Ein-/Ausschalten (Ausgänge und Relais) oder auch zum Dimmen (nur Ausgänge) bereitgestellt.

Ich bin aktuell noch beim Ausprobieren, wie ich die Geräte in HomeKit nenne, um sie am besten mit Siri steuern zu können. Die Einrichtung mache ich über die Apps Insteon+ (kann Zonen verwalten, aber keine Siri-Namen vergeben) und Elgato Eve (kann Siri-Namen vergeben, kennt aber keine Zonen).

Ich habe das repository auf GitHub geforkt und hier meine Erweiterungen zur Verfügung gestellt: https://github.com/w-andre/homebridge/

Ich würde mich über eure Erweiterungen/Anmerkungen freuen!

Gruß
André

Update: Hier ist die aktuelle Anleitung:

Hier ist eine (sehr) kurze Anleitung zur Einrichtung (ggf. auf eure Umgebung anpassen):

1. Debian 8.1 „Jesse“ installieren

2. Notwendige Tools installieren:


sudo apt-get update
sudo apt-get install nodejs npm git libnss-mdns libavahi-compat-libdnssd-dev
sudo npm config set registry http://registry.npmjs.org/
sudo npm install -g node-gyp

3. HomeBridge von GitHub laden


git clone https://github.com/w-andre/homebridge.git
cd homebridge
git submodule init
git submodule update
npm install
cd lib/HAP-NodeJS

4. Node.js auf v0.12 updaten


sudo npm cache clean -f
sudo npm install -g n
sudo n stable

5. Sicherstellen, dass Node.js nicht nur über „nodejs“, sondern auch über „node“ aufgerufen werden kann


sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10

6. HAP-NodeJS lauffähig bekommen

siehe hier: Installing · KhaosT/HAP-NodeJS Wiki · GitHub
Den Hinweis unter den Schritten beachten und die Schritte 4 + 5 wiederholen, bis keine Fehler mehr auftauchen

6. config.json-Datei im homebridge-Verzeichnis erstellen auf Basis der config-sample.json

7. Server starten

npm run start

8. HomeKit accessories mit der App Insteon+ oder Elgato Eve konfigurieren. (PIN: 123-45-123)

9. Fertig!

Viele Grüße
André

Hallo Andre,

vielen Dank für Deine Anleitung!

Auf dem Raspberry Pi funktioniert es offenbar nicht, jedenfalls bekomme ich bei dem Schritt „sudo npm install -g node-gyp“ diverse Fehlermeldungen…:frowning:

Joachim

Vielleicht hilft dir dieser Wiki-Eintrag weiter: Install HAP-NodeJS on a Raspberry Pi

Ich hab nach 4 Stunden auch aufgegeben! Hab auch immer wieder andere Fehlermeldungen bekommen!

Welches OS verwendet ihr?

Ich habe es zum Beispiel unter Debian 8 auch nicht zum laufen bekommen, aber unter Debian 7.6

:slight_smile: und jetzt das selbe Projekt noch fuer Windows waere toll

@swissboy: Eigentlich sollte das auch unter Windows laufen. Versuch doch mal Node.js zum laufen zu bringen: Node.js (Es gibt dort einen Windows-Installer zum Download)

Dann solltest du auch die Dependencies mit „npm“ nachladen können und somit alles lauffähig bekommen…

@DerThommy, PeterChrisben, JPaeper: Also ich habe Debian 8.1 (ganz frische Version :-)) in einer VM als x64 (amd64) System installiert. Ich kann mir das auch gerne mal auf einem RPI ansehen, aber frühestens am Wochenende.

Also ich hab es auf debian wheezy nicht zum laufen bekommen.

Evtl. könnte man auch eine funktionierende VM bereitstellen

Hi,

vielleicht kann mir jemand helfen.

Ich habe soweit alles zum Laufen gebracht. Ich nutze Wheezy auf dem RPI 2.

In der Config:
Platforms nur IP-Symcon
Accessories nur der HTTP-Standard Eintrag mit der „Kitchen Lamp“

Wenn ich den Homebridge-Server starten will, erhalte ich folgende Meldung:


Starting HomeBridge server...
*** WARNING *** The program 'node' 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 <http://0pointer.de/avahi-compat?s=libdns_sd&e=node>
*** WARNING *** The program 'node' 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 <http://0pointer.de/avahi-compat?s=libdns_sd&e=node&f=DNSServiceRegister>
Loading 1 platforms...
[Symcon] Initializing Symcon platform...
[Symcon] Fetching Symcon instances...
Loading 1 accessories...
[Kitchen Lamp] Initializing Http accessory...
Display name: Kitchen Lamp
TCP server accepting connection on port: 51826
HAP Server is listening
{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

Hi,

also das sieht beim Starten erst einmal recht gut aus. :wink:
Problematisch ist dieser Teil:


{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

Das heißt im Klartext, dass sich der HomeBridge-Server nicht bei IPS anmelden kann. Überprüfe doch bitte noch einmal deine config.json-Datei. Der Eintrag für IPS ist bei mir in etwa so aufgebaut:


{
    "platform": "Symcon",
    "name": "Symcon",
    "rpcClientOptions": {
        "port": 3777,				// Port des Webfronts (unter Linux immer 3777)
        "host": "127.0.0.1",		// Name oder IP des Webfronts (bei mir der gleiche Server)
        "path": "/api/",			// Pfad der JSON-RPC-API (immer gleich)
        "login": "name@domain.de",	// Benutzername für den Remote-Zugriff
        "hash": "password",	// Passwort für den Remote-Zugriff Base64 codiert, so wie hier beschrieben: https://www.symcon.de/forum/threads/24620-Installationsanleitung-(RaspberryPi)?p=226096#post226096
        "strict": true
    }
}

Ich habe noch eine Anpassung meiner HomeBridge-Erweiterung vorgenommen, so dass es einfacher sein sollte, weitere Module zu integrieren.

[ol]
[li]Es werden jetzt nicht mehr nur die „LCN Unit“-Instanzen geladen, sondern alle Instanzen.
[/li][li]Im Konstruktur vom SymconAccessory wird nach der ModuleID der Instanz unterschieden und es werden mögliche Commands registriert (bzw. dem Array hinzugefügt).
[/li][li]Je nachdem, ob danach ein SymconAccessory-Objekt ein Command definiert hat oder nicht, wird es überhaupt zu den verfügbaren HomeKit-Accessories hinzugefügt (oder halt nicht).
[/li][/ol]

Zur Erweiterung kann man nun also im Konstruktor weitere ModuleIDs im switch/case hinzufügen und die entsprechenden Commands zum Array hinzufügen. Danach kann man dies dann analog in den Funktionen zur Steuerung (setPowerState/setBrightness) hinzufügen und dort dann die korrekte IPS-Methode für das Modul aufrufen.

An die ModuleID bin ich dran gekommen, indem ich in der IPS-Console in einem Test-Script mir die Eigenschaften einer bestimmten Instanz ausgeben lassen habe, ungefähr so:


print_r(IPS_GetInstance($instanceId));

vielen Dank für die Hilfe.

Bei mir läuft die HomeBrige wiegeschrieben auf bem RPI und Symcon auf Win7 (Firewall aus)

{
    "platform": "Symcon",
    "name": "Symcon",
    "rpcClientOptions": {
        "port": 82,				// Port des Webfronts (unter Linux immer 3777)
        "host": "192.168.15.120",		// Name oder IP des Webfronts (bei mir der gleiche Server)
        "path": "/api/",			// Pfad der JSON-RPC-API (immer gleich)
        "login": "meine eMail-Adresse",	// wie bei der Konsole Benutzername für den Remote-Zugriff
        "hash": "MDAwMDA=",	// für 00000
        "strict": true
    }
}

der Fehler ist dann weg, allerdings findet er 0 Instanzen. (Ich habe mal 2 LCN Relais testweise angelgt,im IPS werden beide gefunden)

Ich werde heute Abend noch meine Anleitung für die Installation auf dem RPI posten.

Aktualisiere mal die Symcon.js mit meiner aktuellen Version von GitHub. Dann sollten zumindest erst einmal alle Instanzen abgerufen werden. Du musst dann aber noch die von mir beschriebenen Anpassungen durchführen, damit die Instanzen verfügbar sind.

geht leider immer noch nicht. hatte jetzt allerdings nicht viel Zeit. Die LCNs müssten auch ohne Änderung gefunden werden, oder?
Mir ist nur aufgefallen, dass Du in der Zeile 81 einen Fehler drin hast. Da hast Du die geschweifte Klammer auskommentiert.

So, wie angekündigt die Schritte, die ich durchgeführt habe um die Homebridge auf dem RPI2 zum Laufen zu kriegen.
Ich habe so einiges aus verschiedenen Ecken des WWW zusammengetragen. So sollte es funzen.

Grundlage ist das Raspbian Image vom 2015-05-05.

Bitte beachten, dass ich alles als SU durchgeführt habe.


apt-get update
apt-get upgrade
apt-get install nodejs npm git libnss-mdns libavahi-compat-libdnssd-dev

npm config set registry http://registry.npmjs.org/
npm install -g node-gyp

wget http://node-arm.herokuapp.com/node_latest_armhf.deb
dpkg -i node_latest_armhf.deb

npm install -g node-gyp

git clone https://github.com/w-andre/homebridge.git
cd homebridge
git submodule init
git submodule update
npm install
cd lib/HAP-NodeJS

node BridgedCore.js

jetzt wird immer ein Fehler erzeugt. Hier steht, welches Modul noch installiert werden muss. Hier waren folgende.
nach jedem Modul node BridgedCore.js eingeben, bis keine Module mehr fehlen.


npm install mdns
npm install srp
npm install ed25519
npm install curve25519

npm rebuild

ins homebridge Verzeichnis wechseln und config.json erstellen und entsprechend anpassen


npm install node-json-rpc
npm install async
npm run start

Ich hoffe das hilft euch weiter.

Ich habe vermutlich irgendwo noch einen Fehler.
Interessanter Weise ist es egal, was ich beim Benutzer und Passwort in der Config.json eingetragen habe. Bringt keinen Fehler und zeit immer die 0 Instanzen an.

Die aktuelle Symcon.js hab ich gesaugt.

Ich poste mal die Bilder meiner Konfiguration:
eigenen Webserver angelegt: (als Passwort 00000)

Config.json
config.PNG

Ausgabe auf der Console
Console.PNG

Ich habe als Login auch die eMailadresse auf die IPS registriert ist eingetragen. Als Passwort dann entsprechend das für den Fernzugriff (Base64 UTF-8 kodiert) eingetragen.
Als Port 82 (wie Webfront) -> 0 instances
Als Port 3777 -> Verbindungsfehler (siehe Post #11)

Moin Ulli,
danke für die Anleitung. Ich hab da allerdings noch eine Frage.
In welchem Verzeichnis muss ich folgende Befehle ausführen?

Dann hab ich noch einen kleinen Fehler in deiner Anleitung gefunden.

dpkq -i node_latest_armhf.deb

sollte

dpkg -i node_latest_armhf.deb

heissen.

Danke…
Peter

Ich bekomme folgenden Fehler beim Starten… der Server stoppt anschliessend wieder.

Jemand ne Idee?

Starting HomeBridge server...
*** WARNING *** The program 'node' 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 <http://0pointer.de/avahi-compat?s=libdns_sd&e=node>
*** WARNING *** The program 'node' 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 <http://0pointer.de/avahi-compat?s=libdns_sd&e=node&f=DNSServiceRegister>
Loading 1 platforms...
[Symcon] Initializing Symcon platform...
[Symcon] Fetching Symcon instances...
Loading 1 accessories...
[Speakers] Initializing Sonos accessory...
Display name: Speakers
TCP server accepting connection on port: 51826
HAP Server is listening
[Speakers] Found device at 192.168.2.44
[Speakers] Found device at 192.168.2.41
[Speakers] Found device at 192.168.2.56
[Speakers] Found device at 192.168.2.3
undefined:1
undefined
^
SyntaxError: Unexpected token u
    at Object.parse (native)
    at /root/homebridge/platforms/Symcon.js:78:94
    at /root/homebridge/node_modules/async/lib/async.js:682:13
    at /root/homebridge/node_modules/async/lib/async.js:49:16
    at done (/root/homebridge/node_modules/async/lib/async.js:239:19)
    at /root/homebridge/node_modules/async/lib/async.js:40:16
    at /root/homebridge/node_modules/async/lib/async.js:679:17
    at /root/homebridge/platforms/Symcon.js:70:11
    at IncomingMessage.<anonymous> (/root/homebridge/node_modules/node-json-rpc/lib/rpcclient.js:182:9)
    at IncomingMessage.emit (events.js:129:20)

npm ERR! Linux 3.18.14-v7+
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "start"
npm ERR! node v0.12.1
npm ERR! npm  v2.5.1
npm ERR! code ELIFECYCLE
npm ERR! homebridge@0.0.0 start: `node app.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the homebridge@0.0.0 start script 'node app.js'.
npm ERR! This is most likely a problem with the homebridge package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node app.js
npm ERR! You can get their info via:
npm ERR!     npm owner ls homebridge
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /root/homebridge/npm-debug.log