Homebridge-Backup auf die Dropbox

  • Disclaimer: Wow! Beim Erstellen dieses Themas warnen mich die Forenmoderatoren ausdrücklich, dass sie meinen Account sperren werden, wenn ich nicht vor dem Erstellen meines Beitrags die Suchfunktion des Forums verwende. Ich gebe hiermit aufmüpfig zu, dass ich das nicht getan habe und jetzt hier einfach mal losposte. Vorsichtshalber sag ich an dieser Stelle schon mal "lebt wohl!", wer weiß, was die Zukunft bringt.


    Ich trage schon seit einiger Zeit den Wunsch vor mir her, mit einer einfachen Lösung das Homebridge-Backup etwas sicherer zu machen. Ich verwende die Backup-Funktion von homebridge-config-ui-x, weil ich die sehr elegant finde. Aber das Backup von homebridge-config-ui-x landet halt auf dem Raspi selbst. Das ist keine zuverlässige Lösung, und sie versagt sofort, wenn sich die SD-Card leise weinend verabschiedet, und von Hausbrand, Diebstahl oder neuerdings Flut wollen wir erst gar nicht reden.


    Daher stelle ich hier mal eine Lösung vor, die ein Backup der Homebridge auf die Dropbox kopiert und das auch noch automatisch.


    Gut, mag der eine oder andere einwenden, Dropbox geht gar nicht, man kann doch nicht einfach so seine Daten in die weite Welt verstreuen. Das ist ein Argument, dass ich nicht von der Hand weisen will. Und es ist jedermanns eigene Entscheidung, mit den eigenen Daten das zu treiben, was sie oder er möchte. Meine Entscheidung war die, dass ich es trotzdem tue, weil ich die Dropbox für sicher genug halte und in meiner Homebridge-Konfiguration keine wichtigen Passwörter existieren, sondern halt nur der API-Key für den Wetterserver. Und selbst wenn, wär's mir egal.


    Einige werden sich fragen, wozu man noch ein Homebridge-Backup benötigt, wenn die eigene Hütte gerade brennend den Main runtertreibt. Auch diese Frage kann ich verstehen, aber ich kontere sie mit einem einfachen "tja, was man hat, das hat man".


    Aber warum Dropbox und nicht iCloud? Die Wahrheit ist, dass ich keine Lösung für den Raspi gefunden habe, mit dem man (un)bequem auf die iCloud zugreifen kann und die man automatisieren kann. Ich selbst habe mir zwar eine Lösung dafür gebaut, aber sie ist nicht besonders schön und birgt eine Menge Fehlermöglichkeiten.


    Wie dem auch sei: angehängt findet ihr ein PDF, das den Setup-Prozess für die Dropbox beschreibt. Es ist mir gelungen, aus den kargen vier Zeilen Original-Anleitung in englischer Sprache ein 11-seitiges Dokument in deutscher Sprache zu machen. Das muss mir erst einmal einer nachmachen. Dafür ist die Anleitung bebildert und man kann sie natürlich auch ausdrucken und jemandem unter den Weihnachtsbaum legen.


    Ich würde mich freuen, wenn die eine oder der andere mal draufschaut. Wer das nachbauen will, ist absolut willkommen, mich auf Fehler in der Anleitung aufmerksam zu machen. Es sind bestimmt welche vorhanden.

    Dateien

    Einmal editiert, zuletzt von sschuste ()

  • Vielen Dank für die Anleitung!


    Das Plugin legt ja die geplanten Backups nach folgendem Schema ab:

    homebridge-backup-CC223DE3CE30.1629938358567.tar.gz


    Ich fande in deiner alten Anleitung, bevor das Config-UI-X Plugin selbst automatisierte Backups anbot, den Timestamp in der .tar-Datei ganz nett. Das würde das Ausmisten auf der Dropbox alle paar Wochen etwas erleichtern (Ja, man könnte auch über das Erstell-/Änderungsdatum gehen).


    Evtl. gibt es hier noch eine nettes Workaround bzw. ne Kombi aus deiner Dropbox-Anleitung und dem Bash-Skript. Wobei das wohl auch eher ein Feature Request an Config-UI-X wäre, dass man die Deklaration des Backupnamen selbst vornehmen kann.

  • Cool - Dann spare ich mir das händische kopieren auf die Dropbox.


    Infos zur Dropbox: ist der derzeit einzige mir bekannte Cloud Dienst auf den weder die USA noch die EU oder sonstwer einen offiziellen Zugang hat.


    walta

  • Hallo zusammen,


    Kurze Frage - ist es möglich, direkt aus Homebridge heraus das Homebridge-Backup zusätzlich automatisch auf eine separate USB-SSD zu speichern?


    Danke schon mal im Voraus!

  • Kurze Frage - ist es möglich, direkt aus Homebridge heraus das Homebridge-Backup zusätzlich automatisch auf eine separate USB-SSD zu speichern?

    Nein. Die Homebridge speichert nur ein Backup und nicht noch ein weiteres zusätzlich. Das müsstest du dann außerhalb der Homebridge skripten.


    Vielleicht gefällt dir meine Lösung einer Kopie des Homebridge-Backups auf die DropBox.

    Homebridge-Backup auf die Dropbox

  • Coole Sache Stefan, danke für deinen Beitrag. Habe jetzt meine Homebridge Container Backups somit in der Dropbox gesichert. Schön wäre noch die Möglichkeit einer Verschlüsselung.

  • Gibt es mittlerweile eine Möglichkeit sein Homebridge Backup automatisch in die iCloud zu laden? Oder zumindest auf den Mac?

  • Gibt es mittlerweile eine Möglichkeit sein Homebridge Backup automatisch in die iCloud zu laden? Oder zumindest auf den Mac?

    Ja, die Möglichkeit gibt es. Es gibt aber nichts Fertiges, soll heißen: du musst es selber skripten. Apple bietet auch keine Möglichkeiten an, über eine API Dateien auf die iCloud hochzuladen - jedenfalls ist mir da nichts bekannt. Daher ist der Weg Raspi -> iCloud offenbar nicht möglich.


    Was aber geht, ist der Weg Raspi -> Mac -> iCloud. Das ist nicht so schwierig, denn eigentlich muss man Dateien vom Raspi aus nur in ein bestimmtes Verzeichnis auf dem Mac kopieren. Nach dem Abschluss des Kopiervorgangs sorgt dann der Mac von ganz allein dafür, dass diese Dateien in die iCloud hochgeladen werden.


    Am besten legt man dazu in der iCloud erst einmal einen Ordner namens Homebridge an. Entweder macht man das mit gewieften Mausgefuchtel oder mit dem einfach zu merkenden Befehl (auf dem Mac):


    mkdir Library/Mobile\ Documents/com~apple~CloudDocs/Homebridge


    Danach kann man dann Dateien vom Raspi aus auf den Mac kopieren, beispielsweise den Inhalt von /var/homebridge/backups. Eingabe auf dem Raspi:


    rsync -avzP /var/homebridge/backups sschuste@bigmac:"'Library/Mobile Documents/com~apple~CloudDocs/Homebridge/'"


    Der String sschuste@bigmac muss ersetzt werden durch username@macintosh, wobei username für deinen Usernamen auf dem Mac steht und macintosh für die IP-Adresse oder den Namen deines Macs.


    Achtung: das muss in eine einzige Zeile, zwischen Mobile und Documents muss ein Leerzeichen stehen und die Anführungszeichen sind erweitert durch einen Tick (rechts neben dem Ä auf der Tastatur):

    vorne "' (Shift-2 und Shift-#)

    hinten '" (Shift-# und Shift-2)


    Nach dem Aufruf des rsync-Befehls musst du möglicherweise ein Passwort für den Mac angeben. Um das Passwort nicht angeben zu müssen, musst du auf dem Raspi ein ssh-Schlüsselpaar erzeugen und den Inhalt des öffentlichen Schlüssels auf den Mac bringen. Näheres dazu erklärt dir Google. Vielleicht wirst du auch in der Forensuche fündig (Suchbegriff ssh-copy-id).


    Um das zu automatisieren, musst du einen Cron Job auf dem Raspi erstellen. Auch da kennt Google sich aus.

  • Vielen Dank für das verständliche Script!


    Gibt es eigentlich eine Möglichkeit, das Löschen der Backups zu vereinfachen? Wenn man alte Backups von der Dropbox löscht, dann hat man beim nächsten Sichern die alten Backups wieder in der Dropbox, denn die sind auf dem Raspi ja noch vorhanden. Umgekehrt, wenn man die Backups auf dem Raspi löscht, dann sind die Backups noch auf der Dropbox vorhanden... Man muss also immer alles doppelt löschen (was ja auch Sinn eines Backups ist).

    Hier ist das aber hinderlich, denn die Backups von vorletztem Jahr sind ja meist nicht mehr von Interesse. Kann man das irgendwie automatisieren, sprich dass z.B. an jedem 01.01. die gesamten Backups von dem vorletzten Jahr gelöscht werden, auf der Dropbox und dem Raspi gleichzeitig?

  • Gibt es eigentlich eine Möglichkeit, das Löschen der Backups zu vereinfachen?

    Löschen zu vereinfachen ist eigentlich nie eine gute Idee. Eigentlich sollte das so schwer wie möglich sein, damit man sich nicht versehentlich in den Fuß schießt. Meine Füße beispielsweise sind voller Löcher, teilweise schmerzhaften.


    Der Sync-Vorgang, den du mit rsync machst, kann auch so gestaltet werden, dass Dateien, die auf dem Raspi gelöscht werden, auch auf der Dropbox verschwinden. Das ist natürlich im Sinne eines Backups völliger Unsinn, wie du schon richtig bemerkt hast. Aber der Parameter --delete würde das bewirken, also ein rsync -avzP --delete … . Nicht empfehlenswert.


    Um das einmal im Jahr zu machen, könnte man den Parameter --delete aber trotzdem einführen, und zwar in einem Extra-Skript. Das heißt, man bastelt nicht weiter an seinem Backup-Skript herum, sondern baut ein neues, das einmal pro Jahr per Cron-Job aufgerufen wird. Dieses Löschskript würde auf dem Raspi in einem bestimmten Verzeichnis alle Dateien suchen, die älter als ein Jahr sind und diese dann löschen. Danach wird der rsync aufgerufen, der dann auch die Dateien auf dem Zielverzeichnis in der Cloud löscht.


    Ohne es ausprobiert zu haben, sollte das so gehen:


    find /var/homebridge/backups -type f -mtime +365 -exec rm -f {} \;

    rsync -avzP --delete /var/homebridge/backups sschuste@bigmac:"'Library/Mobile Documents/com~apple~CloudDocs/Homebridge/'"


    Das erste Kommando find sucht auf dem Raspi Dateien (-type f) im Verzeichnis /var/homebridge/backups, die älter als 365 Tage alt sind und löscht sie (-exec rm -f). Das zweite Kommando rsync macht einen Sync von /var/homebridge/backups zum Zielverzeichnis auf dem Mac (hier für den User sschuste auf dem Gerät bigmac mit dem Verzeichnis 'Library/Mobile Documents/com~apple~CloudDocs/Homebridge/' und löscht dort ebenfalls die Dateien, die auf dem Raspi gelöscht wurden.


    Wie gesagt: davon habe ich nix ausprobiert.

  • Vielen Dank für die ausführliche Info. Ich werde das bei Gelegenheit mal testen.


    Eigentlich bräuchte man den Cronjob dann nicht nur einmal im Jahr ausführen sondern könnte das sogar täglich machen - dann würden täglich die Backups entfernt werden, welche älter als ein Jahr sind. Das wäre vielleicht sogar noch besser, dann hat man immer Backups die jünger sind als ein Jahr. Der Rest dürfte ohnehin nicht von Interesse sein.


    Nun bin ich ein absoluter noob hinsichtlich der Frage wie man so ein Script schreibt - wo müsste man die Scriptzeilen denn einfügen, damit diese ausgeführt werden? In die Crontab-Datei?

  • Erstes Ergebnis bei Google nach "Cronjob Raspberry" bzw. "Crontab Raspberry":

    http://raspberry.tips/raspberr…m-raspberry-pi-einrichten

  • Wenn man bedenkt wie groß heuzutage die Speichermedien sind und wie klein so ein Homebridge Backup dann ist jeglicher Aufwand (z.B. das oben genannte verbinden der Löcher im Fuß) vollkommen überflüssig. Ein Selfie mit dir und der Schwiegermutter im Jahr weniger und du hast den Speicherplatz wieder herinnen.


    walta

  • Ich bitte um Nachsicht. Auch ich hab mich schon mehrfach - teilweise schwer - in den Fuß geschossen. So richtig mit völligem Ende jeglicher Smarthome-Aktivitäten. Das hat sogar dazu geführt, dass im letzten Jahr meine Pumpe im Pumpensumpf nicht angesprungen ist (Keller überschwemmt mit Putz abhacken). Da wird man dann schon vorsichtig.


    Generell traue ich Anleitungen im Internet per Google nicht mehr wirklich über den Weg - da war mein Raspi schon mal nicht mehr betriebsfähig… Da frage ich lieber noch mal die Leute, die wirklich was davon verstehen.


    Generell habt ihr natürlich recht mit dem Speicherplatz. Allerdings speichere ich nicht nur Backups der Homebridge auf der Dropbox, sondern auch noch ein paar mehr Backups anderer Systeme, die auch auf dem Raspi laufen. Das Prinzip ist dort aber das gleiche, da traue ich mir dann schon zu das einmal funktionierende Prinzip da zu skalieren… :)

    Wenn der Link oben aber von Fachleuten „geprüft“ ist, dann versuche ich das mal. Wird schon schiefgehen… :)


    Vielen Dank für die Hilfe!

  • Generell traue ich Anleitungen im Internet per Google nicht mehr wirklich über den Weg - da war mein Raspi schon mal nicht mehr betriebsfähig… Da frage ich lieber noch mal die Leute, die wirklich was davon verstehen.

    Von denen du nicht beurteilen kannst, was sie wissen und können. Und die dir dann per Internet irgendwas schreiben. Beispielsweise ich.


    Ich würde einen cron-Job auf meinem Mac einrichten und von dort Dateien auf der Dropbox löschen. Der Cronjob könnte den dazu notwendigen Befehl direkt ausführen (wäre meine bevorzugte Art) oder aber ein Skript aufrufen, dass den Befehl ausführt.


    Bei einem einzigen Befehl bietet sich das Skript nicht an. Das nimmt man eigentlich dann, wenn es komplexer wird und viele Befehle ausgeführt werden müssen oder irgendwelche Bedingungen mit if und else abgefragt werden sollen. Dann ist das Skript einfach übersichtlicher. Bei nur einem einzigen Befehl ist es übersichtlicher, ihn direkt in die crontab zu schreiben.


    Aber warum den cron-Job auf dem Mac einrichten und den Löschbefehl von dort ausführen? Das liegt daran, dass es auf dem Mac ein Verzeichnis gibt, dass die Dropbox-Dateien enthält. Legt man da was rein, wird es durch die installierte Dropbox-Software automatisch zur Dropbox-Cloud hochgeladen. Löscht man eine Datei, verschwindet sie auch aus der Dropbox-Cloud.


    Das heißt, man muss sich um den Sync keinen Kopp machen. Man muss nur noch die richtigen Dateien löschen.


    Das Dropbox-Verzeichnis auf meinem Mac heißt /Users/sschuste/Dropbox und mit dem Befehl

    ls -l /Users/sschuste/Dropbox kann ich mir dort die Dropbox-Dateien anzeigen lassen. Deine erste Aufgabe ist also herauszufinden, wo dein Dropbox-Verzeichnis ist und wo vor allem das Backup-Verzeichnis ist. Das bekommst du heraus, in dem du im Finder auf deinen Dropbox-Ordner klickst und dich dann zu deinem Backup-Ordner durchklickst. Bei mir ist das Dropbox:Apps:hb-backup:backups. Wähle also den Ordner backups aus und kopiere ihn mit command-c oder indem du die rechte Maustaste auf dem Ordner klickst und dann auf Kopieren klickst.


    Öffne dann das Textedit-Programm auf deinem Mac. Wenn du dort nun deine Zwischenablage wieder einfügst (command-v), dann steht da so was wie /Users/sschuste/Dropbox/Apps/hb-backup/backups. Natürlich sieht das bei dir etwas anders aus, weil ja dein Username kaum sschuste lauten dürfte.


    Dieser Pfad ist wichtig. Ohne ihn wird nichts funktionieren. Also fahre erst fort, wenn du den folgenden Befehl im Terminal eingeben hast und ein brauchbares Ergebnis erzielst:


    ls -l /Users/sschuste/Dropbox/Apps/hb-backup/backups


    So sollte das dann aussehen:

    BigMac:~ sschuste$ ls -l /Users/sschuste/Dropbox/Apps/hb-backup/backups

    total 0

    drwxr-xr-x 45 sschuste staff 1440 Mai 29 08:00 config-backups

    drwxr-xr-x 293 sschuste staff 9376 Jun 4 08:00 instance-backups

    BigMac:~ sschuste$


    Auch hier sieht das bei dir so ähnlich aus: statt BigMac steht dort der Name deines Macs und statt sschuste steht da dein Username. Auch das Datum wird ein anderes sein und die Zahlen 45 und 293 sind sicherlich auch andere. Was du sehen musst, sind die Verzeichnisse config-backups und instance-backups.


    Der Befehl, der in der crontab stehen soll, lautet:

    find /Users/sschuste/Dropbox/Apps/hb-backup/backups -type f -mtime +365 -exec rm -f {} \;


    Natürlich enthält der Befehl deinen ermittelten Pfad.


    Achtung: wenn du diesen Befehl im Terminal eingibst, wird er ohne jede Rückmeldung ausgeführt und er löscht sofort alle Dateien im Verzeichnis /Users/sschuste/Dropbox/Apps/hb-backup/backups, die älter sind als 365 Tage. Da kommt keine Abfrage wie "Willst du das wirklich?". Da werden ohne jede Rückmeldung Dateien gelöscht. Die sind dann weg. Rückgängig machen ist auch nicht. Im Mülleimer sind sie auch nicht. Also alles so männlich wie Thors Hammer, der die Welt von unerwünschten Elementen befreit. Da gibt's auch kein rückgängig machen.


    Vorher eine Kopie der Dropbox-Dateien zu machen ist also absolut empfehlenwert - für alle Fälle. Am besten von allen Dateien der Dropbox, ob sie mit dem Backup zu tun haben oder nicht. Sicher ist sicher.


    Wenn der obige Befehl erfolgreich die richtigen Dateien gelöscht hat (das geht flott), dann kannst du ihn mit einem cron-Job automatisieren. Du kannst ihn einmal im Jahr laufen lassen, aber ich würde ihn - wie du schon selber richtig erkennst hast - täglich laufen lassen. Das wird im Terminal gemacht und geht so:


    export EDITOR=nano

    crontab -e


    Der Editor wahrscheinlich nichts anzeigen, weil du noch keine cron-Jobs erstellt hast. Schreibe dort einfach hinein (in eine einzige Zeile!):


    55 18 * * * find /Users/sschuste/Dropbox/Apps/hb-backup/backups -type f -mtime +365 -exec rm -f {} \;


    Das wird dafür sorgen, dass der Löschbefehl jeden Tag um 18:55 Uhr ausgeführt wird - natürlich nur dann, wenn dein Mac zu diesem Zeitpunkt auch eingeschaltet ist. Fall du eine andere Uhrzeit bevorzugst, dann setze für die 55 18 andere Zahlen ein, wobei du erst die Minuten hinschreibst und dann die Stunde (beispielsweise 0 15 für 15:00 Uhr oder 12 10 für 12 Minuten nach 10 Uhr). Ja, das ist ein wirklich hässliches Format, aber es funktioniert seit Jahrzehnten.


    Dann speicherst du deinen cron-Job ab, indem du control-x, danach y und dann die Entertaste drückst.


    So, da hast du deine Internet-Anleitung. Um dich noch ein bisschen wuschig zu machen: ich habe davon nix ausprobiert und ich selber setze diesen Löschbefehl auch nicht ein. Ich lösche meine Dropbox-Dateien tatsächlich per Hand, immer wenn ich mal zufällig drauf stoße.

    Einmal editiert, zuletzt von sschuste ()

  • HI zusammen


    also ich hab das Script von sschuste nachgebaut und meine Sicherungen auf DropBox geladen.

    Vielen Dank - hat wunderbar geklappt.


    Eine Frage hätte ich noch: kann man das ganze auf auf ein Synology-Nas automatisch kopieren ?


    Danke

    Roger


  • Das beantworte ich mal mit einem klaren: "ja", und ich schränke es auch gleich wieder ein durch ein "keine Ahnung wie, hab kein Synology-NAS". Der Trick wird darin bestehen, auf dem NAS ein Verzeichnis freizugeben und auf dem Raspi zu mounten. Wie das freigegeben wird, weiß ich leider nicht, wahrscheinlich per NFS.

  • HI sschuste

    ich hab den Befehl nun in die Crontab genommen und er wurde wohl ausgeführt - aber es ist nichts auf Dropbox angekommen. Starte ich den Befehl manuell, so klappt dies.


    VIelleicht kannst Du mal nachschauen - das sind die Meldungen:


    Jun 7 08:59:30 homebridge kernel: [ 1258.963177] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'

    Jun 7 09:00:01 homebridge CRON[13106]: (pi) CMD (/usr/local/bin/dropbox_uploader.sh -s upload /var/lib/homebridge/backups/ / >/dev/null 2>&1)

    Jun 7 09:00:41 homebridge deCONZ-update2.sh[342]: Error: database is locked

    Jun 7 09:09:01 homebridge CRON[18058]: (root) CMD ( [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi)

    Jun 7 09:09:01 homebridge systemd[1]: Starting Clean php session files...

    Jun 7 09:09:01 homebridge systemd[1]: phpsessionclean.service: Succeeded.


    Danke Roger


  • sschuste ich hätte da auch ne Frage, ich habe es nach deiner Anleitung geschafft, es einzurichten, es wurden auch Daten auf die Dropbox kopiert, du schreibst, dass jeden morgen um 8 Uhr erneut Daten gespeichert werden, die letzten Daten, die auf meiner Dropbox sind, sind die von gestern Abend. Hat der Cronjob es nicht gemacht, weil gestern Abend die Daten gesichert wurden, oder läuft das nicht, wie kann ich kontrollieren, ob der Job richtig läuft ??

    Danke schon mal im Voraus


    Edit: Ich habe nochmal diesen Befehl

    Code
    sudo nano /etc/crontab

    Eingegeben, doch der Job ist nicht eingetragen, ich habe den Editor mit control x beendet und dann mit "Y" bestätigt, schau dir bitte mal den Screenshot an

    Einmal editiert, zuletzt von Vollerpla ()