Jeder der eine offene Home-Automation Lösung wie Openhab(2) im Einatz hat, hat viele Stunden mit der aufwändigen Konfiguration verbracht - zudem liegen viele Messwerte in einer SQL Datenbank, welche man später via Grafana o.Ä. visualisieren und auswerten möchte. Datenverlust wäre sehr ärgerlich. Alle bereits gesammelten Datenpunkte wären verloren und die Konfiguration des geliebten Setups würde wieder Tage und Wochen verschlingen. Ich habe das Problem bei mir mit einem simplen Setup, bestehend aus einem Bash-Script, sowie Dropbox gelöst.

Dropbox Uploader

Um unser Backup später auf Dropbox speichern zu können, verwenden wir das Dropbox Uploader Repository von Andrea Fabrizi. Zuerst benötigt ihr Git auf Eurem Raspberry Pi, dazu Git via Commandline installieren:

sudo apt-get install git

Nach der erfolgreichen Installation von Git clont ihr Euch das Repository via:

git clone https://github.com/andreafabrizi/Dropbox-Uploader.git

Jetzt wechselt ihr in das Dropbox-Uploader Directory:

cd ~/Dropbox-Uploader

Von hier aus könnt ihr jetzt die Konfiguration des Dropbox Uploader Scripts starten:

./dropbox_uploader.sh

Das Script wird Euch Schritt für Schritt durch die Installation führen, nach der Installation wechselt ihr auf die Dropbox Website und erstellt eine API Application, den zugehörigen API Access Token gebt ihr dann wiederum im Terminal ein, um den Dropbox Uploader zu authentifizieren. Um Dropbox verwenden zu können benötigt ihr selbstverständlich einen Dropbox Account, hierbei reicht ein kostenloser Account mit max. 2GB Speicherplatz für die erste Zeit aus.

Backup Bash-Script

Openhab2 bietet von Haus aus eine Backup Funktionalität an, diese machen wir uns zu Nutzen, um die Konfiguration von Openhab zu sichern. Im Standard werden jedoch keine Datenbanken gesichert, um diese auch mit in das Backup aufzunehmen, dumpen wir die komplette SQL Datenbank.

Zuerst müssen wir ein Bash-Script erstellen, ihr könnte dafür einen Texteditor Eurer Wahl verwenden, ich verwende entweder Nano oder Vi:

nano openhab_backup.sh oder vi openhab_backup.sh

Das komplette Backup Script sieht später wie folgt aus, aber keine Sorge - wir gehen Line-by-Line über das Script.

#!/bin/bash
mysqldump -u USER --password="PASSWORD" DATABASE > backup.sql
gzip backup.sql
mv backup.sql.gz /home/openhabian/Dropbox-Uploader
(exec /home/openhabian/Dropbox-Uploader/dropbox_uploader.sh upload /home/openhabian/Dropbox-Uploader/backup.sql.gz sql_backup_`date +%Y_%m_%d`.gz)
rm /home/openhabian/Dropbox-Uploader/backup.sql.gz
echo SUDOPASSWORD | sudo -S openhab-cli backup backup_config.zip
mv backup_config.zip /home/openhabian/Dropbox-Uploader
(exec /home/openhabian/Dropbox-Uploader/dropbox_uploader.sh upload /home/openhabian/Dropbox-Uploader/backup_config.zip backup_config_`date +%Y_%m_%d`.zip)
echo SUDOPASSWORD | sudo -S rm /home/openhabian/Dropbox-Uploader/backup_config.zip

Line-by-Line backup.sh

Zuerst definieren wir den Script-Type, auch shebang genannt.

#!/bin/bash

Wir ziehen ein Backup einer kompletten MYSQL Datenbank und speichern es in einem .sql File, ihr müsst hier Euren Username, Password und die entsprechende Datenbank hinterlegen. Achtung: Ihr hinterlegt hier das Passwort des SQL Users im Klartext, ihr solltet Euch über das Sicherheitsrisko im Klaren sein.

mysqldump -u USER --password="PASSWORD" DATABASE > backup.sql

Im nächsten Schritt zippen wir das erstellte Datenbankbackup:

gzip backup.sql

Jetzt verschieben wir das backup.sql.gz File in das Directory des Dropbox-Uploaders:

mv backup.sql.gz /home/openhabian/Dropbox-Uploader

Mit dem nachfolgenden Befehl laden wir das File auf Dropbox hoch, die Date section am Ende des Filenames definiert die Formatierung des Files, in unserem Fall wird es mit der Endung year_month_day abgespeichert:

(exec /home/openhabian/Dropbox-Uploader/dropbox_uploader.sh upload /home/openhabian/Dropbox-Uploader/backup.sql.gz sql_backup_`date +%Y_%m_%d`.gz)

Anschließend können wir das File lokal löschen:

rm /home/openhabian/Dropbox-Uploader/backup.sql.gz

Jetzt ist das Config Backup von Openhab2 an der Reihe, dazu rufen wir das Backup Script von Openhab2 auf. Achtung: das Ausführen ist nur mit Root-Rechten möglich, um das via Bash zu realisieren, hinterlegen wir hier das Passwort des Root Users im Klartext, seid euch also über das Sicherheitsrisko im Klaren!

echo ROOT-USER-PASSWORD | sudo -S openhab-cli backup backup_config.zip

Anschließend verschieben wir das erstelle Config Backup in das Dropbox-Uploader Directory:

mv backup_config.zip /home/openhabian/Dropbox-Uploader

Mit dem nachfolgenden Befehl wir das File hochgeladen, die Notation des Files ist die selbe wie bereits beim oben beschriebenen Datenbank Backup:

(exec /home/openhabian/Dropbox-Uploader/dropbox_uploader.sh upload /home/openhabian/Dropbox-Uploader/backup_config.zip backup_config_`date +%Y_%m_%d`.zip)

Zum Schluss löschen wir auch das Config Backup lokal, auch hier muss wieder mit Root Rechten gearbeitet werden, die Sicherheitsrisiken, welche durch das Hinterlegen des Root Passwortes im Klartext entstehen können, habe ich weiter oben beschrieben:

echo ROOT-USER-PASSWORD | sudo -S rm /home/openhabian/Dropbox-Uploader/backup_config.zip

Automatisierung des Backup Vorgangs via Cronjob

Ihr könnt Euer Backup jetzt jederzeit mit dem nachfolgenden Befehl ausführen.

sh openhab_backup.sh

Besser wäre es jedoch, wenn das Backup automatisiert, z.B. jeden Tag zu einer bestimmten Uhrzeit, ausgeführt werden würde. Dazu können wir uns das Crontab zu Nutzen machen. Dieses rufen wir mit folgendem Befehl auf:

crontab -e

Am Ende des Files könnt ihr weitere Cronjobs hinzufügen. Mein Setup führt den Backup Job jede Nacht um 05:00 Uhr durch, dazu habe ich mir folgende Zeile hinzugefügt:

0 5 * * * sh /home/openhabian/openhab_backup.sh

Ihr könnt selbstverständlich auch einen anderen Intervall wählen, der Cronjob Generator kann hierfür sehr hilfreich sein.

Abschließend

Mit der oben beschriebenen Methode lässt sich einfach ein rudimentäres Backup von Openhab2 realisieren, als Ziel muss nicht unbedingt Dropbox gewählt werden. Man könnte die Files auch auf eine NAS im lokalen Netzwerk, nach AWS, Azure, Google Drive etc. schieben.

Bitte bedenkt, dass wir nur die Datenbank und die Openhab2 Config gesichert haben, andere Scripts/Applicationen, welche ihr für Euer Setup benötigt sind nicht gesichert, das Bash Script lässt sich aber endlos erweitern und an Eure Wünsche anpassen