Kostenloses FHEM Backup in die Cloud (z.B. Dropbox)

Kostenloses FHEM Backup in die Cloud (z.B. Dropbox)

Backupstrategien gibt es tausende - der eine macht gar keine Backups, der andere zu selten, manche schieben das Backup aufs NAS und ganz andere wieder lassen das Backup auf der SD-Karte liegen. Nur doof wenn die SD-Karte den Geist aufgibt. Oder aber: Man installiert eine neues Programm auf seinem Server und plötzlich geht gar nichts mehr. Gut wer ein Backup hat, auf das er auch zugreifen kann.

Seitdem ich FHEM als VM auf Proxmox habe lasse ich mir automatische Snapshots anlegen die ich einmal pro Woche auf meinem NAS automatisch sichern lasse. Für die Raspberrys die ich zusätzlich im Einsatz habe fahre ich aber seit neuestem eine andere Strategie: Automatische Backups in die Cloud.

Inhalt

Cloud-Backup

Das Backup in die Cloud hat mehrere Vorteile:

  • Kostenlos
  • Voll automatisch
  • Immer verfügbar
  • Überall verfügbar
  • Ich muss mich nicht um Datenverlust kümmern

Der Einrichtungsaufwand ist außerdem vergleichsweise gering und es können viele verschiedene Cloudanbieter verwendet werden. 

Rclone

Damit das ganze funktioniert verwende ich ein kleines Programm namens "Rclone". Damit richten wir den Cloud-Sync ein.

Es wird unter anderem Windows, Mac OS X und Linux unterstützt (dabei auch Raspberry & Co). Der Installer wählt dabei selbst die richtige Version - sehr praktisch.

Folgende Cloud-Anbieter und Dienste werden derzeit unterstützt:

amazon drive http owncloud
amazon s3 hubic pcloud
backblaze b2 memset memstore put.io
box microsoft azure blob storage qingstor
ceph microsoft onedrive rackspace cloud files
digitalocean spaces dreamhost minio sftp
dropbox nextcloud wasabi
ftp ovh webdav
google cloud storage openstack swift yandex disk
google drive oracle cloud storage the local filesystem

Vorbereitungen Dropbox

Evlt. musst dir erst für deinen Dropbox Account einen "Developer Account" erstellen. Danach rufst du folgende Adresse auf

https://www.dropbox.com/developers/apps

Und klickst auf "Create App"

Dropbox API: Create app

Dropbox API: Create app

Dann wählst du "Dropbox API" und "App folder" und vergibst einen Namen. Bestätige mit "Create App"

Dropbox API: Choose API

Dropbox API: Choose API

So sieht die erstellte "App" dann aus:

Dropbox API: Übersicht

Dropbox API: Übersicht

Notiere dir den App-Key und das App-Secret. Anschließend klickst du auf "Generate" bei "Generated access token"

Dropbox API: Generate Access Token

Dropbox API: Generate Access Token

Installation von Rclone

Vorerst brauchst du ein Programm zum entpacken. 

sudo apt install unzip

Um Rclone herunterzuladen und zu installieren einfach folgenden Befehl eingeben:

sudo curl https://rclone.org/install.sh | sudo bash

Dropbox konfigurieren

rclone config

Sollte dir eine Fehlermeldung wie "Failed to load config file "/home/ubuntu/.config/rclone/rclone.conf": open /home/ubuntu/.config/rclone/rclone.conf: permission denied" angezeigt werden so gibt es einen Fehler mit den Berechtigungen. "sudo chmod 777 /home/ubuntu/.config/rclone/" hilft hier (Achtung: maximale Berechtigung)

n für "New Remote"

Name vergeben: Dropbox

6 für "Dropbox"

Trage deinen Dropbox App-Key und App-Secret ein

Rsync config Dropbox

Rsync config Dropbox

Bei "Use auto config?" gibst du n ein, da wir keinen Zugriff auf einen Browser haben.

N (Nein) Wählen bei der automatischen Konfiguration

N (Nein) Wählen bei der automatischen Konfiguration

Keine Sorge, wir brauchen keinen zweiten PC mit Zugriff zu einem Browser (wie in der Eingabeaufforderung verlangt). Es reicht wenn du auf https://www.dropbox.com/developers/apps/ deine App wählst und auf "Generate Access Token" drückst.

Den Token fügst du bei "HIER-TOKEN-EINFÜGEN" ein und kopierst das gesamte Feld in die Eingabeaufforderung.

{"access_token":"HIER-TOKEN-EINFÜGEN","token_type":"bearer","expiry":"0001-01-01T00:00:00Z"}

Syntax in Rclone

Sobald alles eingerichtet ist können wir uns mit der Befehlssyntax von Rclone auseinandersetzen. Wichtig ist hier der Name, den ihr oben bei der Einrichtung der Dropbox vergeben habt (in meinem Fall "Dropbox"). Ich musste alle Befehle als "sudo" ausführen - sonst hat es ein Berechtigungsproblem gegeben.

rclone sync /opt/fhem/backup Dropbox:/

vollzieht einen Sync des FHEM-Backup Ordners in das Dropbox-Verzeichnis Apps/fhem_raspberry_display/

Nachtrag: Der Sync befehlt hält den lokalen Ordner und die Cloud immer identisch. Möchtest du dass rclone nur kopieren, aber in der Cloud nicht löschen darf, so musst du den Befehl "rclone copy" statt "rclone sync" verwenden. Vielen dank an Michael für den Hinweis.

Tägliches Backup in die Cloud - Cronjob

Jetzt erstellen wir ein Skript das genau diesen Befehl absetzt. Das direkte Eintragen dieses Befehls als crontab hat bei mir nicht funktioniert - daher der Umweg über das Skript

sudo nano ~/rclone-cron.sh

mit folgendem Inhalt füllen:

#!/bin/bash
if pidof -o %PPID -x "rclone-cron.sh"; then
exit 1
fi
rclone sync /opt/fhem/backup Dropbox:/
exit

Das Skript muss noch ausführbar gemacht werden:

sudo chmod a+x ~/rclone-cron.sh

Dieses Skript können wir jetzt als crontab eintragen, also ein Befehl der automatisch zu einer bestimmten Uhrzeit abgesetzt wird und die beiden Verzeichnisse synchronisiert.

crontab -e

Folges am Ende einfügen:

0 23 * * * ~/rclone-cron.sh >/dev/null 2>&1

Jeden Tag um 23 Uhr wird der Backup Ordner an die Dropbox geschickt. Super 🙂

Jetzt müssen wir FHEM nur noch sagen dass auch jeden Tag ein Backup angelegt werden soll (am Besten vor 23 Uhr)

FHEM-Einstellungen für automatisches Backup

Mit einem DOIF können wir automatisch ein Backup starten. In meinem Fall 3x pro Woche

define backup_doif DOIF ([22:30:00|1] or [22:30:00|3] or [22:30:00|5]) (backup)

Maximale Anzahl an Backups begrenzen

Es macht Sinn die maximale Anzahl an Backups zu begrenzen, da wir sonst innerhalb eines Monats >10 Backupdateien ansammeln. Hierfür erstellen wir ein Perlskript und fügen dieses dann zu den Cronjobs hinzu. Das Skript habe ich von Burnz Barbosa und entsprechend dem Tutorial angepasst.

sudo nano ~/fhem_backup_clean.pl

mit folgendem Inhalt füllen (Passe NR > 10 entsprechend der max. Backups an)

#!/bin/bash


cd /opt/fhem/backup/
num_files=`ls | wc -l`
rm `ls -tp | grep -v "/$" | awk '{ if (NR > 10) print; }'`
num_files2=`ls | wc -l`

Die Datei mit folgendem Befehl ausführbar machen

sudo chmod +x ~/fhem_backup_clean.pl

Jetzt noch ins crontab eintragen:

crontab -e
45 22  *  *  *  sudo ~/fhem_backup_clean.pl >/dev/null 2>&1

Schlusswort

Ok, zugegeben: Die Einrichtung  war nicht ganz so einfach. Dass sich die Arbeit gelohnt hat merkt man aber spätestens dann wenn mal etwas schiefgeht und man sich bequem aus der Cloud seine Backups holen kann 🙂

Über den Author

Emanuel

teilt seine Begeisterung im Bereich Technik, DIY und Hausautomatisierung gerne auf seinem Blog coldcorner.de

Abonnieren
Benachrichtige mich bei
5 Kommentare
Ältester
Neuster Am meisten bewertet
Inline Feedbacks
View all comments
Dirk Scholz
5 Jahre zuvor

Das script und auch die einrichtung haben alles mal super geklappt. jetzt nach einiger Zeit bin ich auf einen NUC mit Ubuntu umgezogen und wollte das backup neu einrichten, aber beim ausführen kommt der fehler das er nicht syncronisieren kann. ich habe alles schon ein paar mal eingegeben und neu erstellt aber immer der gleiche fehler. als fehler kommt:
fhem@fhem:~$ rclone sync /opt/fhem/backup Dropbox:/
2018/12/20 17:11:09 ERROR : : error reading destination directory:
2018/12/20 17:11:09 ERROR : Dropbox root “: not deleting files as there were IO errors
2018/12/20 17:11:09 ERROR : Dropbox root “: not deleting directories as there were IO errors
2018/12/20 17:11:09 ERROR : Attempt 1/3 failed with 1 errors and: not deleting files as there were IO errors
2018/12/20 17:11:09 ERROR : : error reading destination directory:
2018/12/20 17:11:09 ERROR : Dropbox root “: not deleting files as there were IO errors
2018/12/20 17:11:09 ERROR : Dropbox root “: not deleting directories as there were IO errors
2018/12/20 17:11:09 ERROR : Attempt 2/3 failed with 1 errors and: not deleting files as there were IO errors
2018/12/20 17:11:09 ERROR : : error reading destination directory:
2018/12/20 17:11:09 ERROR : Dropbox root “: not deleting files as there were IO errors
2018/12/20 17:11:09 ERROR : Dropbox root “: not deleting directories as there were IO errors
2018/12/20 17:11:09 ERROR : Attempt 3/3 failed with 1 errors and: not deleting files as there were IO errors
2018/12/20 17:11:09 Failed to sync: not deleting files as there were IO errors

Heinze
5 Jahre zuvor

Guten Abend!

Nachdem ich die umfangreiche Meldung wie Dirk hatte, bin ich noch mal Schritt für Schritt durch die Konfiguration.
Bei der Konfiguration ist aufgefallen, dass die „Dropbox“ inzwischen die Nr. 8 hat, welche ich dann gewählt habe.
Das Gute … die Fehlermeldung hatte nur noch eine Zeile, mich aber nicht weiter gebracht.

Wenn ich genau wie du vorgehe (oben aber die ‚8‘ auswähle), dann bekomme ich folgende Meldung:
Failed to create file system for „Dropbox:/“: didn’t find section in config file

Hast du eine Idee wo es hier klemmt? Backup-File auf FHEM liegt vor, App Folder existiert … irgendwas scheint nicht zu passen.

Grüße
H.

Heinze
Reply to  Heinze
5 Jahre zuvor

Guten Tag!

Heute mal den Vormittag investiert … bei „rclone sync /opt/fhem/backup Dropbox:/“ hatte ich deine Zeile kopiert,
was zu dem Einzeiler führte. Mit der richtigen Bezeichnung ‚DropBox‘ in der Zeile erhalte ich wie Dirk folgendes:
2019/03/17 12:58:42 ERROR : : error reading destination directory: Error in call to API function „files/list_folder“: Path root is not supported for sandbox app.
2019/03/17 12:58:42 ERROR : Dropbox root “: not deleting files as there were IO errors
2019/03/17 12:58:42 ERROR : Dropbox root “: not deleting directories as there were IO errors
2019/03/17 12:58:42 ERROR : Attempt 1/3 failed with 1 errors and: not deleting files as there were IO errors
2019/03/17 12:58:43 ERROR : : error reading destination directory: Error in call to API function „files/list_folder“: Path root is not supported for sandbox app.
2019/03/17 12:58:43 ERROR : Dropbox root “: not deleting files as there were IO errors
2019/03/17 12:58:43 ERROR : Dropbox root “: not deleting directories as there were IO errors
2019/03/17 12:58:43 ERROR : Attempt 2/3 failed with 1 errors and: not deleting files as there were IO errors
2019/03/17 12:58:43 ERROR : : error reading destination directory: Error in call to API function „files/list_folder“: Path root is not supported for sandbox app.
2019/03/17 12:58:43 ERROR : Dropbox root “: not deleting files as there were IO errors
2019/03/17 12:58:43 ERROR : Dropbox root “: not deleting directories as there were IO errors
2019/03/17 12:58:43 ERROR : Attempt 3/3 failed with 1 errors and: not deleting files as there were IO errors
2019/03/17 12:58:43 Failed to sync: not deleting files as there were IO errors

Ideen? Vorschläge?

Danke!

Schöne Grüße

Heinze
5 Jahre zuvor

Oha … ich schon wieder … der ‚/‘ macht die Probleme.

Mit ‚rclone sync /opt/fhem/backup Dropbox:‘ geht es.

Sorry für die vielen Posts!

Schöne Sonntag
Heinze