Homematic
Automatisches Backup der CCU / Raspberrymatic

Automatisches Backup der CCU / Raspberrymatic

EDIT 31.10.2017: Möglicherweise ist das Verfahren nach einem Update nur noch für Raspberrymatic möglich

Wer ein Backup durchführen möchte, muss dies in der CCU manuell tun. Nach größeren Änderungen daran zu denken, ist nicht leicht. Und eine Post-it auf dem PC ist auch irgendwie „Oldschool“. Daher muss eine automatische Lösung her.

Nach einiger Recherche bin ich hierauf gestoßen. (https://homematic-guru.de/homematic-automatisches-backup) mit einem einfach Codeschnipsel kann in einem Programm das Backup per Zeitsteuerung angestoßen werden. IDEAL! …. Wenn da nicht das Problem wäre, dass der Speicherort die interne SD Karte der CCU bzw. des Raspberry ist. Dinge die zuerst defekt werden sind das Netzteil und die SD-Karte. Daher wollte ich kein Backup auf dem selben Medium was wahrscheinlich der Grund ist, weshalb ich das Backup brauche. 

Hier möchte ich euch eine Möglichkeit zeigen, wie ihr ein automatisiertes Backup auf meinem NAS (Network Attached Storage) anlegt. Bei mir ist das eine QNAP, die wiederum über eine andere QNAP gesichert wird. Da muss also schon viel schief laufen, damit ich nicht mehr an mein Backup ran käme. Die hier gezeigte Herangehensweise wurde von Jérôme entwickelt. Ich möchte Sie hier Stück für Stück erklären. 

Die erstellten Backups werden auf der CCU nach 7 Tagen wieder gelöscht.

Und los gehts…

1. Freigabe auf dem NAS einrichten

Hierzu habe ich einen neuen Benutzer namens „Homematic“ angelegt. Dieser Benutzer hat nur Zugriff auf einen Ordner. Mehr darf er bei mir nicht.

2. per SSH an der CCU / dem Raspberry anmelden

Dazu benötigt ihr ein Tool, z.B. „Putty“, das gibts hier zum kostenlosen Download.  Außerdem muss in der CCU SSH aktiviert sein. Im oberen Screenshot (auf der Seite, auf der das manuelle Backup gemacht werden kann) ist der Punkt ganz unten zu sehen. Haken rein und ein Passwort vergeben.

In Putty ist dann die IP der CCU einzugeben und mit dem Button „open“ öffnet sich ein Eingabefenster.

Der login Name ist bei der CCU der Benutzername (i.d.R. „admin) und  bei Raspberrymatic „root“. Das Passwort ist das, welches oben bei dem Haken SSH in der WebUI der CCU eingegeben wurde. Nach dem richtigen Passwort erscheint kein „OK“ oder so. Das Fenster sieht anschließend so aus.

Nach der Anmeldung erstellst du eine neue Datei mit dem Namen „makeBackup“ indem du folgenden Code in dieses Fenster. („STRG“ +“V“ funktioniert im Eingabefenster unter Windows NICHT!) Zum Einfügen musst du die rechte Maustaste verwenden.

vi /usr/local/addons/makeBackup.sh

Der Tastendruck „i“ schaltet in den „Insert-Modus“ um. Unten links in der Ecke erscheint auch der Großbuchstabe „I“.

3. Hier das eigentliche Script

Nun sollte das folgende Script in eine Editor kopiert werden.

echo "Mounte Dateisystem"
mount -t cifs -o sec=ntlm,vers=1.0,username=<username>,password=<password> //IPdesNAS/public /mnt
echo "Erstelle Backup"
/bin/createBackup.sh /var/tmp/
echo "Kopiere Backup"
cp /var/tmp/*.sbk /mnt
echo "Loesche lokale alte Backups lokal"
rm -rf /var/tmp/*.sbk
echo "Loesche lokale alte Backups auf mount"
find /mnt -name "*.sbk" -mtime +7 -exec rm -f {} ;
echo "Unmounte Dateisystem"
echo "Fertig."

Nun nur noch in der weiten Zeile die Zugangsdaten zum NAS eintragen und vom Texteditor auf den Raspberry kopieren.

Anschließend die Taste „ESC“ drücken – das „I“ unten Links verschwindet und es erscheint wieder ein „-“. Jetzt „:wq“ eingeben (w = write, q = quit)

:wq

und mit „Return“ bestätigen. Dann wird die Datei geschrieben und der Editor beendet. Je nachdem welchen NAS man nutzt, muss die zweite Zeile evtl. angepasst werden.

Version 1

mount -t cifs -o vers=1.0,username=<username>,password=<password> //IPdesNAS/public /mnt

Version 2

mount -t cifs -o sec=ntlm,username=<username>,password=<password> //IPdesNAS/public /mnt

Mit diesem Befehl werden dann noch die Berechtigungen für das Programm gesetzt.

chmod 755 /usr/local/addons/makeBackup.sh

<Return>

crontab -e

<Return>

Taste „G“ drücken (Großbuchstabe!)
Taste „o“ drücken

Wer das Backup nun zeitgesteuert in der CCU machen möchte, kann hier aufhören und bei Punkt 4 weitermachen. Wer gerne wenig Programm in der CCU hat, kann die Zeitsteuerung direkt auf dem  Raspberry durchführen. 

Mit dieser Zeile wird die Zeit des automatischen Backups angegeben.

0 1 * * * /usr/local/addons/makeBackup.sh > /var/log/backup.log

„Esc“-Taste drücken

:wq

<Return>

Hier bedeutet „0 1 * * * “ –> Um 01:00 Uhr! Also wird täglich ein Backup erstellt.

4. Probelauf

Um zu testen, ob alles funktioniert, kann der folgende Code eingegeben werden.

/usr/local/addons/makeBackup.sh

<Return>

Nun ist alles eingerichtet und wenn das Backup durchläuft, erscheint im Freigabeordner des NAS die Backupdatei.


Das fertige Backup ist nun eingerichtet. Es ist aber auch möglich, das Backup nicht über Crontab zu steuern, sondern direkt über die CCU / RM. Hierbei gibt es zwei Möglichkeiten. Damit aber das Backup nicht doppelt läuft, ist die Zeile mit der Zeitsteuerung (0 1 * * * /usr/local/addons/makeBackup.sh > /var/log/backup.log) von oben komplett zu löschen, oder durch eine vorangestellte Raute (#) auszukommentieren.

  1. Virtueller Taster
    In meinem Fall habe ich einen CUxD Kanal gewählt und dort als Tastendruck kurz folgenden Code eingefügt.
/usr/local/addons/makeBackup.sh

Fertig sieht das dann so aus:

  1. Alternativ kann direkt im Programm ein Script erstellt werden, welches dann so aussieht. (Voraussetzung ist hierfür das installierte CUxD Addon in einem installierten EXEC Gerät)
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State ("/usr/local/addons/makeBackup.sh");

An dieser Stelle möchte ich mich nochmal für die Hilfe bei Jerome Pech bedanken, der mir diese Idee erklärt und gezeigt hat, sodass ich Sie euch nahe bringen kann.

Bei allen, denen das Backup nicht funktioniert (auch manuell über die WebUI der CCU), ist eine mögliche Ursache, das installierte Addon „CCU-Historian“. Das Addon sollte entweder für das Backup, oder aber besser, dauerhaft deinstalliert werden. (Mein Backup mit Historian war 890MB und ohne, nur 6MB) 🙂

Bei mir läuft Historian inzwischen auch auf der NAS. Eine Anleitung dazu gibts auf der Webseite von Historian.

UPDATE 11.01.2018:
Ich habe nun festgestellt, dass der einmalige Aufruf des Script manchmal nicht ausreicht, um die NAS „aufzuwecken“ und das Backup anzustoßen. Ich erhalten dadurch häufig „timeout“. Daher habe ich nun den Aufruf zweimal im Programm. Seit dem funktioniert das automatische Backup zuverlässig.

36

36 thoughts on “Automatisches Backup der CCU / Raspberrymatic

    • Hallo,

      danke für die Anleitung. Mount klappt jedoch beim kopieren bekomme ich die Fehlermeldung „Permission denied“

      —–Ausgabe nach Befehl „# /usr/local/addons/makeBackup.sh“ ———–>
      Mounte Dateisystem
      Erstelle Backup
      /usr/local/addons/makeBackup.sh: line 4: /usr/local/addons/cuxd/extra/ccu_backup: Permission denied
      Kopiere Backup
      cp: can’t stat ‚/var/tmp/*.sbk‘: No such file or directory
      Loesche lokale alte Backups lokal
      Loesche lokale alte Backups auf mount
      find: -exec requires an argument
      Unmounte Dateisystem
      Fertig.
      ————————-

      habe schon versucht mit „chmod“ die Dateirechte zu verändern (via root) aber es geht nicht.

      Was muss ich tun, damit diese Meldung nicht mehr kommt?

      meine „makeBackup.sh“ Datei sieht wie folgt aus:

      echo „Mounte Dateisystem“
      mount -t cifs -o sec=ntlm,vers=1.0,username=xxxxx,password=xxxxxxxx //192.168.xx.xx/public /mnt
      echo „Erstelle Backup“
      /usr/local/addons/cuxd/extra/ccu_backup
      echo „Kopiere Backup“
      cp /var/tmp/*.sbk /mnt
      echo „Loesche lokale alte Backups lokal“
      rm -rf /var/tmp/*.sbk
      echo „Loesche lokale alte Backups auf mount“
      find /mnt -name „*.sbk“ -mtime +7 -exec rm -f {} ;
      echo „Unmounte Dateisystem“
      echo „Fertig.“

      Ich hoffe, mir kann jemand helfen.

      mfg
      Rene

      Achso: Frohes neues Jahr 2020 😉

    • Hi,
      bei mir läuft es auch nun. Was ich nicht verstehe, und die Frage wurde zuvor schon einmal gestellt (ich sehe nur keine Antwort):
      Das Backup über die WebUi ist in meinem Fall ca. 34,820 MB gross, auf dem QNAP jedoch 73,56 MB

      Was bedeutet das??

    • Hallo,
      auch ich bin neu in der Homatic Welt und habe das Problem, das meine Sciherung den Heldentod stirbt.
      Das script läuft zwar über shh problemlos, aber über Cuxxx-exec bekommt es einen Fehler

      siehe hier :
      Firmwareversion: 3.47.22.20191026
      CUx-Daemon Version 2.3.4

      2019-11-29 02:30:00 Nov 29 02:30:00 ReGaHss: ERROR: ScriptRuntimeError: ! — Sicherung des Systemzustands
      dom.GetObject(„CUX2801001:1.CMD_EXEC“).State(„/usr/local/addons/makeBackup.sh“); [ExecError():iseESPexec.cpp:12798]

      Da das Raspberrymatic Linux ziemlich kastriert ist, fehlen mir die gewohnten Analysemöglichkeiten,
      vielleicht hat ja einer eine Idee, wo man suchen könnte ….

    • Hi,
      eine bescheidene Frage.
      Ich sehe in dem script keine Befehl um die eingehängte Pfade auch wieder auzuhängen.
      Es wird nur als Text ausgegeben:
      echo „Unmounte Dateisystem“
      Was müsste hier stehen, da unmount nicht existiert?

      Martin

    • Hallo echt gute anleitung, versteht sogar ein dau.
      aber bei mir verschwindet immer die Zeile:
      0 1 * * * /usr/local/addons/makeBackup.sh > /var/log/backup.log
      wenn ich den Raspy neu starte.
      wie kann ich das Verhindern?

      • Hallo TomTom,
        Ich vermute, dass beim Kopieren etwas schief gelaufen ist. Ansonsten mal ohne Uhrzeit (also nur statt „01***“ besser „******“ angeben und das Backup über die Zeitsteuerung der CCU auslösen.

        • Der cron von RaspberryMatic lässt sich schon recht lange nicht mehr mit crontab -e bearbeiten.
          Das ist etwas umständlicher geworden.

    • Also das Script an sich funktioniert noch und wurde bei mir übernommen. Daher sollte es keine Probleme damit geben. 🙂

    • Weiß man schon, ob das Script die neue RaspberryMatic-Update-Funktion (ab 2.31.25.20180428, also Update direkt aus dem WebUI raus) übersteht? Oder muss man es anschließend von Hand per SSH neu anlegen!?

    • Dankeschön, ist oben ergänzt

    • Seit RaspberryMatic 2.31.25.20180324 muss noch zusätzlich die Option „vers=1.0“ angegeben werden:
      mount -t cifs -o sec=ntlm,vers=1.0,username=XXXXXX,password=XXXXXX ///FreigabeName /mnt

    • Hallo Zusammen,

      ich bekomme immer folgende Fehlermeldung beim mounten:
      mount: mounting //192.168.60.10/99_BACKUP_SH/HomeMatic on /mnt failed: Input/output error

      woran kann es liegen? hier mal mein mount Befehl:

      mount -t cifs -o sec=ntlm,username=HomeMatic,password=meinpasswort //192.168.60.10/99_BACKUP_SH/HomeMatic /mnt

      VG
      Tecky

    • hat bei mir geklappt…. jedoch sind die Backups unterschiedlich groß???
      via WebUI geladen um die 4,5 MB
      auf dem Synology haben die backups 7,5 MB ?????
      Woran kann das liegen?

    • gerne

    • Dankeeeeeeee es hat geklappt, es lag wirklich daran 🙂 Vielen Dank für die schnelle Hilfe und den grossartigen Support!!!!

    • Hallo, gerne doch:

      mount -t nfs 192.168.0.8:/volume1/21 Rasberry/ -o rw,nolock /mnt

    • Hallo zusammen,

      was mache ich den falsch….?? Ich möchte gerne den Zugriff auf eine Synology NAS einrichten, habe alles wie hier beschrieben beachtet – auch den NFS-Zugriff eingerichtet aber ich bekomme immer diese Meldung, siehe nachstehend.

      Hat mir jemand einen Tipp, ich würde mich riesig über Hilfe bzw. Unterstützung freuen!

      Vielen Dank mal vorab, schönen Tag,

      Kay-Uwe

      Read-only file system…….

      There are filesystem-specific -o flags.
      Erstelle Backup
      SBK-File: /var/tmp/HomeMatic-2.29.23.20171022-2017-11-10-0852.sbk

      saving DOM… OK!
      creating archive…
      sign configuration with current key…
      store current key index…
      copy firmware version…
      creating /var/tmp/HomeMatic-2.29.23.20171022-2017-11-10-0852.sbk
      clean up temp files…
      Kopiere Backup
      cp: can’t create ‚/mnt/HomeMatic-2.29.23.20171022-2017-11-10-0852.sbk‘: Read-only file system
      Loesche lokale alte Backups lokal
      Loesche lokale alte Backups auf mount
      Unmounte Dateisystem
      Fertig.

    • Hallo,

      ich nutze Raspberrymatic mit der Version 2.29.22.20170902 wenn ich jetzt auf 2.29.23.20171022 updaten wollen würde müsste ich ja laut der Updateanleitung die SD Karte formatieren das neue Raspberrymatic aufspielen und das letzte Backup aufspielen. Beinhaltet das Backup dann das Script was ich angelegt habe für das täglich Backup oder muss dies neu angelegt werden?

      Gruß Timo

    • umount -f /mnt

      Oder umount -f -a

    • Ich habe den Beitrag ganz oben editiert. Da das Problem nun schon 3 weitere haben, gehe ich davon aus, dass in der CCU beim letzten Update etwas geändert wurde, was dafür relevant war.

    • Hallo,

      bin gerade dabei das Automatische BackUp auf meine CCU einzurichten leider ohne erfolg. Ich bekomme immer wieder diese Meldung „No such device or address“.

      Muss dabei sagen, dass ich dies heute schon einmal gemacht habe auf meine RaspberryMatic. Damit klappt es ohne Probleme.

      Mir ist auch aufgefallen das ich bei der CCU leere Zeilen nicht löschen kann das dieses hier ‚~‘ wieder kommt.

    • wo ist dann das unmount-Kommando?

    • Für alle Synology Nutzer. Das Mounten hier im Script klappte bei mir nicht. Hab etliches versucht. Letztendlich mounte ich die Freigabe mit nfs statt mit cifs. Das klappt hervorragend. NFS muss aber in den Dateidiensten aktiviert und die CCU in den Berechtigungen hinterlegt sein.

      mount -t nfs IPdesNAS:/volume1/PfadzurFreigabe/ -o rw,nolock /mnt

    • Hallo,

      okay nachdem ich nun wusste wie ich den Editor bediene hab ich gerade eine Stunde verzeifelt nach dem Fehler gesucht warum meine WDMyCloud immer sagt das Passwort wäre falsch, lag letzendlich daran das ich unter Windows „\192.168.178.38\HomematicBackup“ kopiert habe. Es richtig aber „//192.168.178.38/HomematicBackup“ heißen muss.

      Jetzt funktioniert alles einwandfrei Danke

    • Hallo Sven Os, es scheint, also ob das Script deinen Ordner nicht finden kann. Hast du den Freigabenamen auf der Synology in Kleinbuchstaben erstellt? In deinem letzten Absatz hast du nach der IP einen „:“ mit drin. Falls du den auch im Script hast, bitte mal rausnehmen. Da ich keine Synology habe, kann ich hier nicht wirklich weiterhelfen. Aber vielleicht funktioniert das ja schon so.

    • Leider kann ich das Script bei mir nicht zum Laufen bringen.
      Ich nutze ein Synology NAS und habe einen neuen gemeinsamen Ordner mit NFS-Berechtigungen versehen, gemäß dieser Anleitung
      https://www.synology.com/de-de/knowledgebase/DSM/tutorial/File_Sharing/How_to_access_files_on_Synology_NAS_within_the_local_network_NFS
      Ein Nutzer „homematic“ mit Lese-/Schreibrechten auf den Ordner existiert.

      Ich nutze folgenden angepassten Code:
      echo „Mounte Dateisystem“
      mount -t cifs -o sec=ntlm,username=homematic,password=meinpasswort //192.168.xxx.xxx/volume1/hcbackup /mnt
      echo „Erstelle Backup“
      /usr/local/addons/cuxd/extra/ccu_backup
      echo „Kopiere Backup“
      cp /var/tmp/.sbk /mnt
      echo „Loesche lokale alte Backups lokal“
      rm -rf /var/tmp/
      .sbk
      echo „Loesche lokale alte Backups auf mount“
      find /mnt -name „*.sbk“ -mtime +7 -exec rm -f {} \;
      echo „Unmounte Dateisystem“
      echo „Fertig.“

      und erhalten die folgende Ausgabe:

      Mounte Dateisystem
      mount: mounting //192.168.xxx.xxx/volume1/hcbackup on /mnt failed: No such device or address
      Erstelle Backup
      SBK-File: /var/tmp/homematic-ccu2-2.29.22.20170902-2017-09-10-1506.sbk

      saving DOM… OK!
      creating archive…
      sign configuration with current key…
      store current key index…
      copy firmware version…
      creating /var/tmp/homematic-ccu2-2.29.22.20170902-2017-09-10-1506.sbk
      clean up temp files…
      Kopiere Backup
      cp: can’t create ‚/mnt/homematic-ccu2-2.29.22.20170902-2017-09-10-1506.sbk‘: Read-only file system
      Loesche lokale alte Backups lokal
      Loesche lokale alte Backups auf mount
      Unmounte Dateisystem
      Fertig.

      Was kann ich tun?
      Die von Synology in der Anleitung vorgegebene Syntax 192.168.xxx.xxx:/volume1/hcbackup statt //192.168.xxx.xxx/volume1/hcbackup habe ich auch bereits ausprobiert.

    • Du musst den kompletten Code einfügen (und natürlich vorher anpassen) nicht das Codeschnipsel mit dem Nutzernamen:

      echo „Mounte Dateisystem“
      mount -t cifs -o sec=ntlm,username=,password= //IPdesNAS/public /mnt
      echo „Erstelle Backup“
      /usr/local/addons/cuxd/extra/ccu_backup
      echo „Kopiere Backup“
      cp /var/tmp/.sbk /mnt
      echo „Loesche lokale alte Backups lokal“
      rm -rf /var/tmp/
      .sbk
      echo „Loesche lokale alte Backups auf mount“
      find /mnt -name „*.sbk“ -mtime +7 -exec rm -f {} \;
      echo „Unmounte Dateisystem“
      echo „Fertig.“

    • Hallo Jérôme okay erst vi /usr/local/addons/makeBackup.sh reinkopieren dann Enter drücken okay
      dann „i“ drücken I erscheint unten links gut,und dann username=,password= //IPdesNAS/share an meine Daten anpassen auch klar aber dann setzt es aus welchen code muss ich dann eintragen bevor ich ESC damit das I unten link verschwindet und ich mit wq abschliessen kann ????

    • Hallo Michael so wie es in Deiner Anleitung steht komme ich leider nicht klar
      wie trage ich des ein ??

      mount -t cifs -o sec=ntlm,username=,password= //IPdesNAS/public /mnt

    • Hallo Timo… Ja.
      Mit „vi /usr/local/addons/makeBackup.sh“ öffnet der Editor namens vi die Datei /usr/local/addons/makeBackup.sh nur lesend.

      Der Tastendruck „i“ schaltet in den „Insert-Modus“ um. Unten links in der Ecke erscheint auch der Großbuchstabe „I“.
      Dann kann der kopierte Code eingefügt werden. Dazu klickt man einfach nur mit der rechten Maustaste (=Paste) im Putty-Fenster und der Inhalt der Zwischenablage wird eingefügt.

      Nun die Taste „ESC“ drücken – das „I“ unten Links verschwindet und es erscheint wieder ein „-“

      Jetzt :wq eingeben (w = write, q = quit) und mit Return bestätigen. Dann wird die Datei geschrieben und der Editor beendet.

    • Okay, aber wenn ich den Code einfüge und i drücke passiert überhaupt nix.

    • Genau, mit einigen Tastenkombinationen wird zum Beispiel nur bis zum Ende des Codes gesprungen und mit Q der Modus zum Beabeiten geändert. Manchmal sieht man sich nichts, weil es keinen cursor gibt.

    • Hallo,
      nachdem man sich in Putty eingeloggt hat und den ersten Code „vi /usr/local/addons/makeBackup.sh“ einfügt soll man ja anschließen die Taste „i“ drücken. Ist das wirklich richtig? Weil er fügt ja ein ein „i“ ein und fertig danach passiert ja nichts mehr.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.