Kopia bazy danych Domoticza na FTP.

Od jakiegoś czasu jestem szczęśliwym posiadaniu nowego routera. Oprócz rozlicznych nowoczesnych ( w porównaniu  z moim wysłużonym sprzętem ) funkcji, posiada możliwość podłączenia dysku zewnętrznego i ustawienia połączenia FTP. Żal byłoby nie skorzystać z takiej użyteczności do przechowywania kopi Domoticza. Robienie kopi na kartę SD jest proszeniem się o reinstalacje sytemu, więc postanowiłem oddzielić kopie od głównego sytemu plików. Oczywiście można robić je na podłączonym pendrive, ale nie po to  umieściłem malinę w obudowie aby wkładać i wyjmować z niej pendriva.

Skrypt kopiujący dane z odczytów na FTP.

Tworzenie kopi bazy danych zaimplementowane jest w Domoticzu, jednakże nie można zautomatyzować procesu archiwizacji jeżeli chodzi o interwał czasowy i lokalizacje.

screenshot_20170221_132546

Poniższy skrypt kopiuje plik domoticz.db do określonego folderu na dysku lokalnym serwera FTP.

#!/bin/bash

## Parametry sieciowe
SERVER="192.168.x.x" # Adres IP serwera FTP
USERNAME="admin"     # Nazwa użytkownika
PASSWORD="admin"     # Hasło użytkownika
DESTDIR="/opt/backup"
DOMO_IP="192.168.x.x" # Adres IP Domoticza
DOMO_PORT="8080"      # Port Domoticza 

## Konfiguracja parametrów
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILE="domoticz_$TIMESTAMP.db" # plik kopi będzie miał nazwę "domoticz_YYYYMMDDHHMMSS.db.gz"
BACKUPFILEGZ="$BACKUPFILE".gz

### Zatrzymanie Domoticza, utworzenie kopi zip i ponowne uruchomienie
service domoticz.sh stop
/usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /tmp/$BACKUPFILE
service domoticz.sh start
gzip -9 /tmp/$BACKUPFILE

### Przesłanie kopia na serwer FTP
curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEGZ" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/xxx/xxx/" $ # Ścieżka do katalogu na serwerze FTP

### Usunięcie plików tymczasowych
/bin/rm /tmp/$BACKUPFILEDIR

### Zrobione!

Skrypt kopiujący katalog /domoticz na FTP

Jeżeli chcemy wykonać kopie całego katalogu /domoticz i wysłać na serwer możemy użyć tego skryptu.

#!/bin/bash

## Parametry sieciowe
SERVER="192.168.x.x" # Adres IP serwera FTP
USERNAME="admin"     # Nazwa użytkownika
PASSWORD="admin"     # Hasło użytkownika
DESTDIR="/opt/backup"
DOMO_IP="192.168.x.x" # Adres IP Domoticza
DOMO_PORT="8080"      # Port Domoticza 

## Konfiguracja parametrów
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILEDIR="domoticz_x_xxx_$TIMESTAMP.tar.gz" # Zamias xxx możemy wstawić numer kompilacji

### Utworzenie kopi zip
tar -zcvf /tmp/$BACKUPFILEDIR /home/pi/domoticz/domoticz/ 

### Przesłanie kopia na serwer FTP
curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEDIR" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/xxx/xxx/xx/" # Ścieżka do katalogu na serwerze FTP

### Usunięcie plików tymczasowych
/bin/rm /tmp/$BACKUPFILEDIR

### Zrobione!

Skrypt kopiujący katalog /domoticz na kartę SD

Dla odważnych poniżej umieszczam skrypt wykonujący kopie katalogu /domoticz oraz bazy danych na karcie SD. Można dopisać kolejny skrypt przenoszący plik kopi do innej lokalizacji albo wysyłać  mailem, w odpowiednim interwale czasowym.

#!/bin/bash
DOMO_IP="192.168.2.21" # Domoticz IP
DOMO_PORT="8080" # Domoticz port
### Konfiguracja parametrów
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILE="domoticzbackup_$TIMESTAMP.db"
BACKUPFILEGZ="$BACKUPFILE".gz

#Utworzenie kopi w formacie tar
/usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /home/pi/domoticz/kopia/$BACKUPFILE
tar -zcvf /home/pi/domoticz/kopia/domoticz_$TIMESTAMP.tar.gz /home/pi/domoticz/

#Usunięcie kopi starszych niż 31 dni
/usr/bin/find /home/pi/domoticz/kopia/ -name '*.db' -mtime +31 -delete
/usr/bin/find /home/pi/domoticz/kopia/ -name '*.tar.gz' -mtime +31 -delet

Uruchomienie skryptów.

Nadajemy prawa do wykonywania pliku

sudo chmod +x /home/pi/xxx/xxx/backup.sh

Cykliczne wykonywanie skryptu

crontab -e
0 1 * * * sudo ~/domoticz/scripts/domoticz_backup.sh # raz dziennie