LXCCU / CCU2 Backup Script

um von einem anderen Linux System aus Remote ein Zeitgesteuertes Backup von der CCU2 zu erstellen.

Voraussetzungen

ein LXCCU auf einem Einplatinencomputer oder eine CCU2 und ein Einplatinencomputer (oder ein anderes Linux System auf dem wget und ein Cronjob eingerichtet werden kann)

Warum

Warum braucht man eine Sicherung?

Erstellen eines Backup Benutzers auf der LXCCU /CCU2

Auf der LXCCU / CCU2

Offnet dazu das Homematic Web UI und wählt dort:

Einstellungen / Benutzerverwaltung

und erstellt einen Benutzer wie folgt:

Benutzername: backup
Passwort: *
Berechtigungsstufe: Administrator

* ein sehr sicheres Kennwort das ihr euch nicht merken aber notieren solltet!

Auf dem Linux System (z.B. LXCCU Host)

Öffnet eine SSH Sitzung als root zu dem Linux System (nicht die LXCCU oder CCU2 Selbst sondern im Fall der LXCCU eine Sitzung zum Raspbian darunter!).

Erstellt einen script Ordner:

mkdir /etc/backup
mkdir -p /var/backup/ccu

Erstellt ein Backup script:

vi /etc/backup/backup-ccu.sh

Mit folgendem Inhalt (durch Drücken der Taste [i] kommt ihr in den einfüge Modus und könnt das Script hineinkopieren):

Variante 1: Wöchentliche Rollierende Sicherung

#!/bin/bash
# Homematic CCU Backup Script fuer crontab
# Erstellt am 13.03.11 von Danny B.
# Angepasst am 05.08.14 von PaulG4H
 
# Parameter
backupdir="/var/backup/ccu"
host="<ip der ccu>"
user="backup"
password="<das passwort des backup benutzers>"
 
############### Es sind keine weiteren Anpassung ab hier Notwendig
 
run=$0.lastrun
 
# Homematic Login
wget --post-data '{"method":"Session.login","params":{"username":"'$user'","password":"'$password'"}}' http://$host/api/homematic.cgi -O hm.login.response -q >$run 2>&1
 
# Login-Pruefung
loginerror=`cat hm.login.response|cut -d "," -f3|awk '{print $2}'`
if [ "$loginerror" != "null}" ]; then
echo "Fehler beim Homematic-Login !"|tee -a $run
cat hm.login.response|grep message|cut -d '"' -f4|tee -a $run
exit 1
fi
sessionid=`cat hm.login.response|cut -d "," -f2|awk '{print $2}'|cut -d '"' -f2`
 
# Backupdatei herunterladen
wget "http://$host/config/cp_security.cgi?sid=@$sessionid@&action=create_backup" -O $backupdir/$host-backup_$(date +%V).tar.sbk -q >>$run 2>&1
 
# Homematic Logout
wget --post-data '{"method":"Session.logout","params":{"_session_id_":"'$sessionid'"}}' http://$host/api/homematic.cgi -O hm.logout.response -q >>$run 2>&1
 
# temp. Dateien loeschen
rm hm.login.response hm.logout.response >>$run 2>&1

Passt alle Daten in dem Script die in <spizen klammern> stehen durch eure an und verlasst den einfügemodus durch drücken der Taste [ESC] und speichert und schliest den vi durch drücken der folgenden Tastenkombination [:][wq][enter].

Damit diese Datei auch ausgeführt werden darf müst ihr sie noch ausführbar machen mit:

chmod +x /etc/backup/backup-ccu.sh

Nun muss noch ein Cronjob (Zeitsteuerung) angelegt werden, dies macht ihr mit:

crontab -e

Kopiert am besten folgende Zeile ans ende der Datei:

9 2 * * 3 /etc/backup/backup-ccu.sh

Dieser Cronjob läuft nun um 02:09 jeden Dienstag und da der Dateiname der Sicherung die Wochennummer enthält werden maximal 53 Sicherungen vorgehalten und dann wieder Überschrieben. Um Das genaue Datum der Dateien zu sehen muss mann nur das Erstellungsdatum nutzen!

Variante 2: Tägliche Sicherung

hier wird die Sicherung mit der Wochentagsnummer abgelegt, dadurch wird es maximal 31 Sicherungen eben!

#!/bin/bash
# Homematic CCU Backup Script fuer crontab
# Erstellt am 13.03.11 von Danny B.
# Angepasst am 05.08.14 von PaulG4H
 
# Parameter
backupdir="/var/backup/ccu"
host="<ip der ccu>"
user="backup"
password="<das passwort des backup benutzers>"
 
############### Es sind keine weiteren Anpassung ab hier Notwendig
 
run=$0.lastrun
 
# Homematic Login
wget --post-data '{"method":"Session.login","params":{"username":"'$user'","password":"'$password'"}}' http://$host/api/homematic.cgi -O hm.login.response -q >$run 2>&1
 
# Login-Pruefung
loginerror=`cat hm.login.response|cut -d "," -f3|awk '{print $2}'`
if [ "$loginerror" != "null}" ]; then
echo "Fehler beim Homematic-Login !"|tee -a $run
cat hm.login.response|grep message|cut -d '"' -f4|tee -a $run
exit 1
fi
sessionid=`cat hm.login.response|cut -d "," -f2|awk '{print $2}'|cut -d '"' -f2`
 
# Backupdatei herunterladen
wget "http://$host/config/cp_security.cgi?sid=@$sessionid@&action=create_backup" -O $backupdir/$host-backup_$(date +%d).tar.sbk -q >>$run 2>&1
 
# Homematic Logout
wget --post-data '{"method":"Session.logout","params":{"_session_id_":"'$sessionid'"}}' http://$host/api/homematic.cgi -O hm.logout.response -q >>$run 2>&1
 
# temp. Dateien loeschen
rm hm.login.response hm.logout.response >>$run 2>&1

Passt alle Daten in dem Script die in <spizen klammern> stehen durch eure an und verlasst den einfügemodus durch drücken der Taste [ESC] und speichert und schliest den vi durch drücken der folgenden Tastenkombination [:][wq][enter].

Damit diese Datei auch ausgeführt werden darf müst ihr sie noch ausführbar machen mit:

chmod +x /etc/backup/backup-ccu.sh

Nun muss noch ein Cronjob (Zeitsteuerung) angelegt werden, dies macht ihr mit:

crontab -e

Kopiert am besten folgende Zeile ans ende der Datei:

9 2 * * * /etc/backup/backup-ccu.sh

Dieser Cronjob läuft nun um 02:09 jeden Tag und da der Dateiname der Sicherung den Tag des Monats enthält werden maximal 31 Sicherungen vorgehalten und dann wieder Überschrieben. Um Das genaue Datum der Dateien zu sehen muss mann nur das Erstellungsdatum nutzen!

Test der Sicherung

Zu testzwecken könnt ihr das Script auch manuell durch den Aufruf von:

/etc/backup/backup-ccu.sh

Ausführen, aber dies dauert je nach größe und Auslastung des Systems einige Minuten!

Damit sollte für die Zukunft immer eine einigermaßen Aktuelle Sicherung zur verfügung stehen!

Wer jetzt noch von seinem Desktop Bequem auf die Sicherungen Zugreifen möchte kanns ich ja einen Samba Server einrichten welcher das /var/backup Verzeichniss Freigibt…