Installation eigener Plugins aus Source Code für Homebridge

Dieser Artikel verweist auf den folgenden Artikel: Installation von Homebridge als Docker-Container-Anwendung auf Raspberry Pi

Über die Plugin-Schnittstelle lässt sich Homebridge um weitere Funktionalitäten erweitern. Hier findet man eine Übersicht aller verfügbaren Plugins. Homebridge-Plugins sind Node-Packages. Normalerweise installiert man diese mit dem Kommando:

npm install -g plugin-name

Zur Installation von z.B. dem Netatmo-Plugin verwendet man also den Befehl:

npm install -g homebridge-netatmo

Dabei lädt der Node Package Manager (npm) das jeweilige Paket und seine Abhängigkeiten von der Package Registry herunter und installiert diese wegen der gesetzten Option „-g“ global auf dem System. (Ohne „-g“ erfolgt die Installation nur im lokalen Ordner.)

Diese Art der Installation funktioniert aber nur mit Homebridge-Plugins, die auf der Package Registry veröffentlicht wurden. Wie verfahre ich aber mit Plugins, die gerade in Entwicklung sind und noch nicht als Node-Package veröffentlicht wurden?

Installation als Entwicklungs-Snapshot

Natürlich gibt es dafür eine Lösung, wie man Homebridge-Plugins direkt aus dem Source-Code installiert. Im folgenden Abschnitt wird gezeigt, wie ich ein solches in der Entwicklung befindliches Plugin für Homebridge installiere. Als Plattform dient dafür ein Raspberry Pi, auf dem Homebridge als Docker-Container-Applikation läuft. Zur Installation von Homebridge als Docker-Container auf dem Raspberry Pi, siehe hier

Kopieren des Source Code in Homebridge Ordner

Eine nach der oben angegebenen Anleitung eingerichtete Homebridge-Installation bindet den Ordner /home/pi/homebridge im Dateisystem des Raspberry Pi als Volume unter dem Pfad /homebridge im Docker-Container ein. In diesem Ordner legt Homebridge beim ersten Start ein Verzeichnis mit dem Namen config an. Darin erzeugt Homebridge eine (weitgehend leere) Konfigurationsdatei config.json sowie eine Date package.json an.

Im Dateisystem des Raspberry Pi sieht das so aus:


ssh pi@raspberrypi
pi@raspberrypi’s password:
Linux raspberrypi 4.14.54-v7+ #1126 SMP Wed Jul 11 20:01:03 BST 2018 armv7l
pi@raspberrypi:~ $ ls -l
insgesamt 8
drwxr-xr-x 3 pi pi 4096 Jul 15 18:07 homebridge
drwxr-xr-x 4 pi pi 4096 Jul 16 20:42 node-red-pack
pi@raspberrypi:~ $

In diesem homebridge-Ordner befindet sich das erwähnte config-Verzeichnis:

cd homebridge/
pi@raspberrypi:~/homebridge $ ls -l
insgesamt 8
drwxr-xr-x 8 pi pi 4096 Jul 15 18:57 config
-rw-r — r — 1 pi pi 285 Jul 15 11:31 docker-compose.yml
pi@raspberrypi:~/homebridge $

In diesen config-Ordner kopiert man das Source-Code-Verzeichnis des Plugins. In diesem Beispiel heißt der Plugin-Ordner homebridge-agfeo-es:

ls -l
insgesamt 112
drwxr-xr-x 2 pi pi 4096 Jul 15 18:57 accessories
-rw-r — r — 1 pi pi 359 Jul 15 11:35 auth.json
-rw-r — r — 1 pi pi 1202 Jul 15 18:43 config.json
drwxr-xr-x 5 pi pi 4096 Jul 15 18:07 homebridge-agfeo-es
drwxr-xr-x 4 pi pi 4096 Jul 15 18:06 homebridge-agfeo-sh
drwxr-xr-x 2 pi pi 4096 Jul 15 18:57 logs
drwxr-xr-x 81 pi pi 4096 Jul 15 18:42 node_modules
-rw-r — r — 1 pi pi 238 Jul 15 18:42 package.json
-rw-r — r — 1 pi pi 71064 Jul 15 18:42 package-lock.json
drwxr-xr-x 2 pi pi 4096 Jul 15 18:57 persist
-rwxr-xr-x 1 pi pi 573 Jul 15 11:34 startup.sh

Der nächste Schritt ist die Installation des Plugins aus diesem Source-Code-Ordner. Das muss innerhalb des Docker-Containers geschehen, also muss eine Shell-Session im laufenden Container gestartet werden. Zuerst muss die Container ID bestimmt werden. Das Kommando

docker ps

listet alle gerade laufenden Container auf. Die erste Spalte der Ausgabe zeigt die Container ID der jeweiligen Instanz.

docker ps
CONTAINER ID IMAGE …
4354c5f21d6e nodered/node-red-docker:rpi …
c3b6cf208400 merlinschumacher/docker-rpi-mosquitto …
67575c3b4df4 oznu/homebridge:raspberry-pi …

Von den drei aktiven Docker-Containern ist der letze die gesuchte Applikation. Mit der angegebenen Container ID kann nun die Shell-Session geöffnet werden:

docker exec -I -t 67575c3b4df4 sh
/homebridge #

Nun befindet man sich in einer aktiven Shell-Sitzung im Homebridge-Container und kann die Installation des gewünschten Plugin unter Angabe des Pfades zum Source-Code vornehmen:

npm i ./homebridge-agfeo-es/

Anschließend beendet man die Shell-Sitzung:

exit

Nach Abschluss der Installation muss die Homebridge-Konfiguration für das neue Plugin angepasst und erweitert werden. Dazu editiert man die Datei config.json entsprechend den Vorgaben des Entwicklers:

vim config.json

Zum Schluss muss die Container-Applikation neu gestartet werden:

docker-compose restart

Das Web-Interface der Homebridge ist unter der folgenden URL erreichbar:

http://{ip-adresse-des-raspberrypi}:8080

Unter dem Menü-Eintrag „Plugins“ kann man sich von der vollständigen Installation des Plugins überzeugen.