Seite 1 von 282

RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 20:39
von thkl
'nabend,

Worum geht es ? Es gibt ein node.js Projekt namens Homebridge welches Apples Homekit (und damit auch Siri) an diverese andere Systeme anbindet.
Das ganze läuft auf einem Raspberry PI (kann aber auch auf anderen Systemen installiert werden) und stellt eine Schnittstelle (Bridge) für HomeKit zur Verfügung. Aktuell gibt es eine ganze Menge Geräte (Philips Hue, Netatmo) welche schon dort integriert wurden.

Ich habe mich jetzt mal hingesetzt und eine Homematic Anbindung dafür geschrieben.
Aktuell werden folgende wireless Geräte unterstützt.
  • Schaltaktoren
  • Dimmer
  • RGB Controller
  • Fensterkontakte
  • Bewegungsmelder
  • Thermostate und Stellantriebe (neuere Bauart) (seit 0.0.26 wird auch das alte Thermostat unterstützt)
  • Rauchmelder
  • Keymatik (jetzt in echt)
  • Rolloaktoren
  • Kippsensoren
  • Taster - diese können als Events für die Steuerung anderer HomeKit Geräte genutzt werden
  • HMIP SDWO
  • HMIP PSM
  • HMIP PS
  • WINMATIC

Für Wired Unterstützung muss die Zeile "enable_wired":true in die /home/pi/.homebridge/config.json bei der Homematic Platform hinzugefügt werden.
Wer keine Wired Komponeten hat kann das getrost weglassen.

Für HMIP Geräte muss die Zeile "enable_hmip":true in die /home/pi/.homebridge/config.json bei der Homematic Platform hinzugefügt werden.


Ab der aktuellen Version müssen die Kanäle, welche aus der CCU nach HomeKit importiert werden sollen über ein Gewerk in der CCU selektiert werden.

Vorgehensweise:

  • neues Gewerk über die Systemsteuerung des CCU WebUI anlegen
  • alle Kanäle, welche nach Homekit importiert werden sollen in dieses Gewerk aufnehmen
  • Name des Gewerkes auf dem Pi in die Datei /home/pi/.homebridge/config.json unter dem Schlüssel subsection eintragen.




Beispiel : Das Gewerk heisst Siri ... dann wäre der Eintrag in der config.json "subsection":"siri"


Aktuelle Version
Bild

Changelog:
https://github.com/thkl/homebridge-home ... /changelog

GitHub Projektpage :
https://github.com/thkl/homebridge-homematic

Da das Setup ja augenscheinlich nicht so EzGoing gibt es auch ein Install Script für den ganzen Spass in Form von einer Zeile.
Das Script macht vom Update des Debian bis zum Setup der Homebridge alles :lol:

Einzige Vorraussetzung : ein leeres wheezy wheezy oder jessie Image und das initiale sudo raspi-config mit der Partitionserweiterung ist durchgelaufen.
Dann begebe man sich auf seine Kommandozeile (ssh oder Terminal is Wurschd) und Paste folgenden Text hinein:

Code: Alles auswählen

wget -nv -O- https://raw.githubusercontent.com/thkl/homebridge/xmlrpc/setup.sh | bash -
Wer die Bridge auf einem PiZero installieren möchte bitte:

Code: Alles auswählen

wget -nv -O- https://raw.githubusercontent.com/thkl/homebridge/xmlrpc/setup_zero.sh | bash -
An der Stelle danke an @chka fürs rausfinden ....

WICHTIG: Ab Version 0.0.71 ist node in Version > 4.5 notwendig.
Hinweis zum Update siehe viewtopic.php?f=19&t=27465&p=364184#p364184


Der Aufruf muss als pi User gemacht werden. Nicht als root. Sonst funktioniert das einbinden der Node Module nicht richtig.
Das Script organisiert sich per sudo root wann immer es benötigt wird.


Das Script fragt dann noch mal nach dem gewünschten Zeichensatz (vorteilhaft wäre in diesen Breiten de_DE.UTF-8) und dann kann man sich gefühlt erstmal 30 Minuten dem Weissbier zuwenden. Es wird das System geupdatet, node + homebridge + module installiert.
Am Ende wird noch die CCU IP abgefragt und die initiale config Datei erzeugt. Achja und man kann sich entscheiden, ob die Homebridge beim Start des Pi mit starten soll.

Ggf muss die Configuration manuell noch angepasst werden. Wie die ausschaut, steht unten in der FAQ

Viel Spass

PS.: Wer Fehler im Script findet möge sich melden ....

PPS.: Im ELV Journal (02/16) ist ein Fachbeitrag darüber erschienen : http://files.elv.de/bilder/journal/2016 ... teil14.pdf


FAQ:
F: Wie starte ich die Bridge ?
A: wenn man zuschauen will mit dem Kommando homebridge

F: Die Bridge beendet sich wenn ich die ssh Verbindung zum pi beende
A: Ja, dann stirbt die Session. Wer beim Setup angegeben hat, das die Bridge mit dem Pi automatisch starten soll kann diese mit

Code: Alles auswählen

sudo service homebridge start
starten

F: Gibts noch andere Geräte die ich in Homekit stecken kann
A: Hier entlang bitte https://www.npmjs.com/browse/keyword/homebridge-plugin
(das ganze ist eine Gemeinschaftsarbeit verschiedener Leute wie man sieht)

F:Wo liegt die config.json in der alle Parameter stehen
A:Bei normaler Installation innerhalb des .homebridge Verzeichnisses im Home von pi also /home/pi/.homebridge

F:Beim Start erscheint eine Fehlermeldung, die sagt die Configuration ist defekt.
A:Die config.json muss ein gültiges JSON Format aufweisen. Wer sich nicht sicher ist, ob der Syntax richtig ist kann den Inhalt der Datei zum Test hier :
http://www.jsonlint.com einwerfen.

F:Meine Fensterkontakte werden nicht als Fenster erkannt, sondern als Kontakte und zeigen Ja/Nein an
A:Es gibt die Möglichkeit die Kontakte als Türen zu definieren. Damit bekommen sie den Zustand geöffnet oder geschlossen. Siri kann entsprechend auch bei der Frage : "Sind die Fenster im Raum... geschlossen" antworten.
Dazu in der config.json alle Kanäle der gewünschten Kontakte in den Parameter "doors" eintragen. Der Parameter erwartet ein Array also lautet der Syntax z.b.

Code: Alles auswählen

 "doors":["BidCos-RF.KEQXXXXXXX:1","BidCos-RF.IEQXXXXXXX:1"]
für 2 Kontakte. Das Interface BidCos-RF muss mit in der Bezeichnung vorhanden sein.


F: Kann ich Variablen damit steuern
A: Jain . Es können nur Zustandsvariablen (also Ja/Nein) gesteuert werden. Diese werden nach Wunsch als Schalter (Outlet) nach Homekit übermittelt. In der Config.json kann ein Parameter namens variables eingetragen werden. Dieser muss als Liste (Syntax wie oben das doors Beispiel) die LIste der Variablennamen enthalten die an Homekit weitergegeben werden sollen.

F:Kann ich WebGUI Programme damit starten
A:Ja, der Parameter in der config.json lautet programs. Hier wieder eine Liste (analog Variablen oder doors) mit den Namen der gewünschten Programme eintragen. (Mir ist allerdings noch keine Möglichkeit untergekommen Siri das beizubringen)

F: kann ich verhindern, das Siri zB. einen Steckdosenzwischenstecker als Licht interpretiert.
A: ja, dazu ist der Parameter outlets da. Dies ist wieder eine Liste. In diese Liste kommen alle Kanäle (Format: BidCos-RF.Seriennummer:Kanal) welche nicht als Lampen in HomeKit erscheinen sollen. Diese werden dann als Steckdosen angezeigt. Siri kann sie aber auch mit Schalte .... ein schalten. Nur eben bei "Schalte das Licht ein" werden sie nicht mehr beachtet.

F: kann ich mit HomeMatic Tastern auch meine Hue Lampen steuern.
A: Ja seit 0.0.26 geht das. Taster können über die Gewerkezuordnung mit aufgenommen werden. Diese erscheinen dann als "Eingabe Ereignis" und können für den Trigger einer Szene verwendet werden. Dabei wird beim Betätigen des Tasters (Kurzer Tastendruck) das Ereignis für 1sek. den Wert 1 gesetzt. Diese Änderung kann in Homekit zum starten von Szenen verwenden. Zb um Hue Lampen einzuschalten oder andere HomeKit Geräte zu steuern.

F: Wieviele HomeMatic Geräte kann ich aufnehmen.
A: Hinter einer sog. Bridge in HomeKit können aktuell maximal 100 Geräte verwaltet werden. Das heisst maximal 100 Geräte (bei Geräten mit mehreren Kanälen zb 2fach Schaltaktoren natürlich dann entsprechend weniger) können verwendet werden.


F:Was wenn ich mehr verwenden möchte ?
A:Aktuell muss dann ein 2. PI benutzt werden und über das Gewerk in der CCU die Zuordnung der Geräte aufgeteilt werden.

F: Kann ich virtuelle Tasten auch über Siri steuern
A: Aktuell nicht. Es gibt meines Wissens keine Tasten in HomeKit, das heisst es gibt auch keine Möglichkeit Siri dazu zu überreden eine Taste zu drücken.
Es gibt allerdings die entgegengesetzte Möglichkeit mittels einer Homematic Taste eine HomeKit Aktion zu triggern. Wie das geht ist hier http://homematic-forum.de/forum/viewtop ... 80#p278903 beschrieben.


F:Seit iOS 10 erkennt Siri keine Fenster mehr ?
A:Es gibt einen Workaround ab version 0.0.37. Hier können über den config Parameter windows die gewünschten Kontakte als Motorfenster definiert werden. Dann erkennt das Siri wieder. Syntax wie oben bei den Doors

F: Wie kann ich bei Problemen die Homebridge zurücksetzen ?

A:
Auf dem iPhone/iPad:
iOS10 HomeApp > Kompassymbol links oben > ganz unten "Haus entfernen"
iOS09 Einstellungen > Datenschutz > HomeKit > HomeKit-Konfiguration zurückzusetzen
Neustart

Auf der Homebridge:
sudo /etc/init.d/homebridge stop
rm /home/pi/.homebridge/persist -R
sudo reboot

Danach muss die Homebridge mit dem iPhone/iPad neu verbunden werden. Gerätenamen, Räume und Raumzuweisungen müssen neu zugewiesen werden.

F:Wie sieht denn jetzt die Konfigurationsdatei aus und was bedeuten die Einträge ?
A:

Code: Alles auswählen

{
	"bridge": {
		"name": "Homebridge",
		"username": "CC:22:3D:E3:CE:31",
		"port": 51826,
		"pin": "031-45-154"
	},
	"description": "This is an autogenerated config. only the homematic platform is enabled. see the sample for more",
	"platforms": [{
		"platform": "HomeMatic",
		"name": "HomeMatic CCU",
		"ccu_ip": "192.168......",
		"subsection": "Homekit",
		"filter_device": [],
		"filter_channel": [],
		"outlets": [],
		"doors": [],
		"windows": [],
		"programs": [],
		"ios10": "true"
		
	}],
	"accessories": []
}
Bedeutung der Schlüssel:

Sektion Bridge:
===============
  • name = Name der Bridge wie er im IOS erscheint
  • username = User (wenn IOS die Bridge nicht mehr erkennt diesen ändern)
  • port = Port auf dem die Bridge läuft
  • pin = Pin welche zur Einbindung in Homekit benutzt wird.

Sektion Platforms:
==================

Diese Sektion ist eine Liste aus Einträgen div. Module
Das Homematic Modul hat folgende Einträge
  • platform : "HomeMatic" <- nicht ändern
  • name : "HomeMatic CCU" <- nicht ändern
  • ccu_ip : Ip Adresse der CCU
  • subsection: Gewerk aus dem alle Kanäle ausgelesen werden, welche in Homekit importiert werden
  • filter_device : Geräte die nicht eingelesen werden sollen (eigentlich überflüssig seit der Gewerkeselektion)
  • filter_channel : analog oben
  • outlets : Kanäle die als Steckdosen anstatt Lampen erzeugt werden sollen
  • doors: Kanäle die als Türen statt Kontakten erzeugt werden sollen
  • windows : Kanäle die als Fenster statt Kontakten erzeugt werden sollen
  • programs : Liste von Programmen, die nach Homekit importiert werden sollen
  • variables : hier können CCU-Variablen eingetragen werden
  • ios10 - "true" wenn die iOS10 Home App benutzt wird (bzw für Siri ab ios10)
  • enable_wired : sofern Wired Geräte eingelesen werden sollen auf "true" setzen, ansonsten "false" oder die komplette Zeile löschen
filter_channel,outlets,doors,windows sind Listen von Kanälen. Hier bitte Interface.Seriennummer:Kanal Beispiel : BidCos-RF.ABC0723987:2 Die Einträge werden in "" gesetzt und, getrennt

Update des Plugins:

Code: Alles auswählen

sudo npm update -g homebridge-homematic

Re: RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 20:48
von thkl
matze-pe hat geschrieben: edit: Anscheind wird homebridge nach einer Zeit beendet, nach Neustart der App wird "homebridge" erneut gesucht und nicht gefunden, erst nach einem erneuten "npm Start".
Jep irgendwann rennt die ssh connection zum pi mal in einen timeout , damit geht die Shell Session zu Ende und die Homebridge beendet sich.
Dafür ist das init Script .. der Spass startet dann auch automatisch mit dem Pi, was recht nice ist ...

Ich habe in der aktuellen Repository Version auch das Umlautproblem gefixt ....

Re: RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 20:52
von matze-pe
Hi,
das Startskript von der letzten Seite habe ich heute nachmittag schon eingebunden, Raspi neugestartet und und homebridge wird erkannt.
Nur als ich vorhin, also paar Stunden später rauf schauen wollte, war es nicht erreichbar.

Kann ich dein neues Skript einfach über die vorhande manuelle Installation drüber laufen lassen?


Viele Grüße

Re: RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 20:56
von thkl
matze-pe hat geschrieben: Kann ich dein neues Skript einfach über die vorhande manuelle Installation drüber laufen lassen?
Wenn die Installation fertig ist macht das keinen Sinn mehr.
Das Install Script ist nur für eine komplette Neuinstallation gedacht.

Im Gegenteil, ich habe mir checks auf vorhandene Installationen und so gespart es wird hart nach /home/pi/homebridge installiert ..
Ich müsste mal testen was passiert wenn da schon was da ist ...

Update ausm Git geht mit git pull im homebridge Verzeichnis

Re: RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 21:02
von matze-pe
ok, danke für den Tipp mit dem "git pull" im homebridge Verzeichnis.

Zu deinem Startskript von gestern Abend, dort muss nur der Pfad zum "homebridge" Verzeichnis in Zeile 12 angepasst werden?

In deinem Skript, Zeile 12: dir="/home/pi/hm2"
müsste dann in "dir="/home/pi/homebridge" geändert werden?

Re: RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 21:06
von thkl
matze-pe hat geschrieben: In deinem Skript, Zeile 12: dir="/home/pi/hm2"
müsste dann in "dir="/home/pi/homebridge" geändert werden?
Richtig, das Script ist auf dem Testraspi geklaut wo mehrere Versionen der bridge rumfliegen ....
Wenn der Pfad nicht stimmt passiert natürlich nichts außer einer Fehlermeldung ....

Re: RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 21:22
von Xanon
@Thomas
vielen Dank!

Ich probiere es mal aus, mit einer sauberen Wheezy Installation. (hab gerade noch eins rumliegen) :lol:

Sollte der Code:

Code: Alles auswählen

wget -nv -O- https://raw.githubusercontent.com/thkl/homebridge/xmlrpc/setup.sh | bash -
als pi oder als root eingegeben werden oder ist es egal?

Gruß
Marcus

Re: RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 21:29
von thkl
Xanon hat geschrieben: als pi oder als root eingegeben werden oder ist es egal?
Nein als pi , sonst funktioniert die Einrichtung der Node Module nicht richtig. Das Script holt sich per sudo Root wann immer es benötigt wird

Re: RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 21:52
von Xanon
Alles klar!
Installation ist abgeschlossen (26 min)

Zur Info:
Ich hatte die Installation von Wheezy gemacht und mit sudo raspi-config die ersten Einstellungen gemacht.
auch die Locate, Time und Keyboard ...
pi@raspberrypi ~ $ wget -nv -O- https://raw.githubusercontent.com/thkl/ ... c/setup.sh | bash -
2015-10-28 21:17:35 URL:https://raw.githubusercontent.com/thkl/ ... c/setup.sh [3253/3253] -> "-" [1]
Setting up locale and keyboard
Generating locales (this might take a while)...
de_DE.UTF-8... done
en_GB.UTF-8... done
Generation complete.
bash: Zeile 42: /etc/timezone: Keine Berechtigung


Current default time zone: 'Europe/Berlin'
Local time is now: Wed Oct 28 21:18:45 CET 2015.
Universal Time is now: Wed Oct 28 20:18:45 UTC 2015.

Setting up Hostname
bash: Zeile 47: /etc/hostname: Keine Berechtigung
Cleaning up
Update Package Lists this may take some time (10-20 min) depending on your internet connection
Läuft aber ansonsten weiter durch.

Bekomme vereinzelnd weitere Fehlermeldungen:

Fehlermeldung 1
Installing Node Modules
npm WARN engine ad2usb@1.0.3: wanted: {"node":"~0.10.0"} (current: {"node":"0.12.1","npm":"2.5.1"})
Fehlermeldung 2
make: Leaving directory '/home/pi/homebridge/node_modules/harmonyhubjs-client/node_modules/node-stringprep/build'
npm WARN optional dep failed, continuing fsevents@1.0.2
Fehlermeldung 3
make: Leaving directory '/home/pi/homebridge/node_modules/mdns/build'
npm WARN engine ad2usb@1.0.3: wanted: {"node":"~0.10.0"} (current: {"node":"0.12.1","npm":"2.5.1"})
Fehlermeldung 4
child_process: customFds option is deprecated, use stdio instead.
make: Entering directory '/home/pi/homebridge/node_modules/teslams/node_modules/mongodb/node_modules/mongodb-core/node_modules/kerberos/build'
CXX(target) Release/obj.target/kerberos/lib/kerberos.o
In file included from ../lib/kerberos.cc:1:0:
../lib/kerberos.h:5:27: fatal error: gssapi/gssapi.h: Datei oder Verzeichnis nicht gefunden
compilation terminated.
kerberos.target.mk:87: recipe for target 'Release/obj.target/kerberos/lib/kerberos.o' failed
make: *** [Release/obj.target/kerberos/lib/kerberos.o] Error 1
make: Leaving directory '/home/pi/homebridge/node_modules/teslams/node_modules/mongodb/node_modules/mongodb-core/node_modules/kerberos/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack at ChildProcess.emit (events.js:110:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1067:12)
gyp ERR! System Linux 3.18.11-v7+
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/homebridge/node_modules/teslams/node_modules/mongodb/node_modules/mongodb-core/node_modules/kerberos
gyp ERR! node -v v0.12.1
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok
Fehlermeldung 5
child_process: customFds option is deprecated, use stdio instead.
make: Entering directory '/home/pi/homebridge/node_modules/harmonyhubjs-client/node_modules/node-xmpp-core/node_modules/ltx/node_modules/node-expat/node_modules/iconv/build'
CC(target) Release/obj.target/libiconv/deps/libiconv/lib/iconv.o
AR(target) Release/obj.target/iconv.a
COPY Release/iconv.a
CXX(target) Release/obj.target/iconv/src/binding.o
SOLINK_MODULE(target) Release/obj.target/iconv.node
SOLINK_MODULE(target) Release/obj.target/iconv.node: Finished
COPY Release/iconv.node
make: Leaving directory '/home/pi/homebridge/node_modules/harmonyhubjs-client/node_modules/node-xmpp-core/node_modules/ltx/node_modules/node-expat/node_modules/iconv/build'
npm WARN optional dep failed, continuing kerberos@0.0.16
Update:
und ganz unten noch:
Setup
cat: /home/pi/homebridge/config.json: Datei oder Verzeichnis nicht gefunden
update-rc.d: using dependency based boot sequencing
Gruß
Marcus

Re: RPi2 - Homebridge : Siri for the rest of us

Verfasst: 28.10.2015, 21:57
von thkl
Ja die Timezone Berechtigung muss ich mal noch fixen.

Die Meldungen im npm install kann man ignorieren. Für die Homematic braucht es kein Kerberos. Das brauchst du nur wenn Du über die Homebridge die Standheizung von Deinem Tesla steuern möchtest :)))


Das sollte alles auch so funktionieren.

Edit die letzte Fehlermeldung ist sogar gewollt. Er schreibt nur eine config.json wenn keine gefunden wurde.