Die einen oder anderen werden es schon gesehen haben: das Web-UI von homebridge-config-ui-x bietet die Möglichkeit, Backups von der Homebridge-Konfiguration zu machen. Wer es nicht kennt: oben rechts gibt es ein Menü mit drei Punkten, und darunter gibt es den Menüpunkt Backup/Wiederherstellen.
Das Backup per homebridge-config-ui-x funktioniert so: das Backup erstellt ein Verzeichnis namens storage, in dem sich der Inhalt eures Konfigurationsverzeichnissen befindet. Gesichert wurden also die config.json und auch die Verzeichnisse persist und accessories. Zusätzlich wird alles andere, was sich im Konfigurationsverzeichnis noch so angesammelt hat, ebenfalls gesichert.
Weiterhin werden zwei Dateien erstellt. Die eine, info.json, enthält Informationen über die verwendete Node-Version und die verwendete homebridge-config-ui-x-Version, mit der das Backup erstellt wurde. Die andere, plugins.json, enthält Informationen über alle installierten Plugins sowie deren Versionsnummer.
Diese Bestandteile werden in eine große Datei gepackt, nämlich in ein sogenanntes tar-Archiv, und dann auf den Computer, der das Web-UI anzeigt (also euer Mac oder PC), heruntergeladen. Wenn man mit seiner Homebridge umziehen will oder eine kaputte Homebridge wiederherstellen will, dann kann man mittels der Wiederherstellen-Funktion dieses tar-Archiv laden und sowohl config.json, die Verzeichnisse accessories und persist als auch alle Plugins werden erneut installiert. Neuere Versionen von Plugins werden ersetzt durch diejenigen, die in plugins.json angegeben sind.
Das ist doch schon mal ganz nett. Leider muss dieser Vorgang manuell angestoßen werden. Da wir in diesem Forum nicht so auf manuelles Ausführen stehen, wäre es wünschenswert, wenn man das Backup automatisieren könnte. Oznu, der Entwickler von homebridge-config-ui-x, hat mir mitgeteilt, dass er diese Automatik eines Tages in sein Plugin eingebaut werden wird. Bis dahin habe ich hier eine Lösung, mit der man das von der Shell aus automatisieren kann.
Dazu muss man ein Shell-Skript schreiben und einen Cronjob. Das Skript stößt homebridge-config-ui-x an, das Backup zu erstellen. Der Cronjob führt das Skript automatisch einmal täglich aus. Das Skript ist übrigens ebenfalls von Oznu (siehe https://github.com/oznu/homebridge-config-ui-x/issues/660). Ich habe es leicht verändert.
So wird's gemacht:
jq installieren
Zunächst müsst ihr ein weiteres Programm auf eurem Raspi installieren:
sudo apt-get install -y jq
Shell-Skript schreiben
Danach schreibt ihr das Shell-Skript:
sudo nano /usr/local/bin/backup-homebridge-config-ui-x.sh
Ein leerer Editor erscheint. Dort wird eingefügt:
#!/bin/bash
#
# This script requires the "jq" package to be installed.
# Linux: sudo apt-get install jq
# macOS: brew install jq
#
# set -x
USERNAME=admin
PASSWORD=admin
UI_HOST=http://localhost:8080
BACKUP_FILE_PATH="$(pwd)"
BACKUP_FILE_NAME="backup-$(date '+%Y-%m-%d').tar.gz"
# Get Access Token
ACCESS_TOKEN=$(curl -s "$UI_HOST/api/auth/login" \
-H 'Content-Type: application/json' \
--data-binary "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}" \
| jq -r .access_token)
# Download Backup
curl -s "$UI_HOST/api/backup/download" \
-H "Authorization: bearer $ACCESS_TOKEN" \
-o "$BACKUP_FILE_PATH/$BACKUP_FILE_NAME"
echo "Backup saved to $BACKUP_FILE_PATH/$BACKUP_FILE_NAME"
Alles anzeigen
Bitte beachtet, dass ihr im Skript eure Login-Daten für das Web-UI angeben müsst. Also den Usernamen und das Passwort, die ihr für das Login verwendet, wenn ihr die grafische Oberfläche der Homebridge aufruft. Ihr müsst im Skript eure Daten angeben, und zwar hier:
USERNAME=admin
PASSWORD=admin
Bei vielen wird das möglicherweise schon so passen.
Dann müsst ihr den Port angeben, den ihr für homebridge-config-ui-x verwendet:
UI_HOST=http://localhost:8080
Auch das wird bei den meisten so richtig sein.
Nun könnt ihr das Skript speichern und den Editor verlassen, am besten indem ihr ctrl-x (oder strg-x) drückt, danach y und dann die Eingabetaste. Dann macht ihr das Skript ausführbar:
sudo chmod +x /usr/local/bin/backup-homebridge-config-ui-x.sh
Zeit zum Testen. Ruft das Skript auf mit
/usr/local/bin/backup-homebridge-config-ui-x.sh
Wenn alles funktioniert, gibt das Skript am Ende aus:
Backup saved to /home/pi/backup-2020-05-08.tar.gz
wobei das Datum im Dateinamen morgen schon ein anderes sein wird.
Das tar-Archiv wurde heruntergeladen auf den Raspi. Ihr könnt es sehen, indem ihr einfach die Dateiliste anzeigt:
ls -l
Cronjob erstellen
Das ist einfach. Geht so vor:
cd /etc/cron.daily
sudo ln -s /usr/local/bin/backup-homebridge-config-ui-x.sh .
cd
Das war's. Einmal am Tag wird nun das Backup erstellt. Bei mir ist das immer um 6.28 Uhr morgens, aber das mag bei jedem anders sein.
Sicherlich kann man hier noch eine Menge verbessern. Vielleicht hat ja det noch ein paar Ideen, wie das Skript am besten in seine Backupstrategie passt.
Viel Erfolg.