Dagelijkse backup van Domoticz naar een externe harddisk 1

Zodra je Domoticz heb geïnstalleerd wil je natuurlijk ook backups kunnen maken. Een dagelijkse backup van Domoticz maken kan eenvoudig via de ingebouwde functie. Deze backup wordt ieder uur, dag en maand automatisch weggeschreven naar de folder /home/pi/domoticz/backups/. Je hoeft hiervoor alleen maar Enable Automatic Backup aan te vinken. Echter, indien de geheugenkaart van de Raspberry Pi crasht kun je deze backups niet meer gebruiken en ben je alsnog het spreekwoordelijke haasje. In dit artikel gaan we in op verschillende backup scripts, allemaal met een eigen functie.

Wat heb je nodig:

Buiten je raspberry Pi heb je een externe schijf nodig, maar beter is een NAS.

Als voorbereiding even het volgende:

  1. Zoek op je Network Attached Storage (NAS) of externe harddisk een folder waar je de backup van Domoticz wilt gaan opslaan.
  2. Zorg ervoor dat FTP ingeschakeld is en dat je de inloggegevens bij de hand hebt.
  3. Stel in Domoticz een gebruikersnaam en wachtwoord in (website protection) en stel Local Networks (no username/password) in.

Plaats het script in /home/pi/domoticz/scripts en pas de parameters naar eigen gebruik aan.

Script voor backup van Domoticz database naar een FTP-server

Dit script backupt een kopie van je ‘domoticz.db’ (database) naar de opgegeven map. Mogelijk wil je ook een paar gebruikte scripts meenemen met de backup, kijk dan naar een script verderop in dit artikel.

Python script: domoticz_backup_database.sh en hier de .zip KLIK

#!/bin/bash
# LOCAL/FTP/SCP/MAIL PARAMETERS
# https://colandino.nl
SERVER="10.0.0.254" # IP of Network disk, used for ftp
USERNAME="pi" # FTP username of Network disk used for ftp
PASSWORD="raspberry" # FTP password of Network disk used for ftp
DESTDIR="/tmp" # used for temorarily storage
DOMO_IP="10.0.0.1" # Domoticz IP
DOMO_PORT="8080" # Domoticz port
### END OF USER CONFIGURABLE PARAMETERS
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILE="domoticz_$TIMESTAMP.db" # backups will be named "domoticz_YYYYMMDDHHMMSS.db.gz"
BACKUPFILEGZ="$BACKUPFILE".gz
### Stop Domoticz, create backup, ZIP it and start Domoticz again
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
### Send to Network disk through FTP
curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEGZ" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/homes/pi/Backups/"
### Remove temp backup file
/bin/rm /tmp/$BACKUPFILEGZ
### Done!

Maak het script uitvoerbaar

Gebruik hiervoor het commando:
sudo chmod +x /home/pi/domoticz/scripts/domoticz_backup_database.sh

Test het script met commando:
sudo sh /home/pi/domoticz/scripts/domoticz_backup_database.sh

Maak een automatisch taak van het script

Login als pi gebruiker en geef commando:
sudo crontab -e

Voeg onderstaande regel toe aan het crontab document:
0 1 * * * sudo ~/domoticz/scripts/domoticz_backup_database.sh

Note: Indien dit niet werk outcomment dan “service domoticz.sh stop” en “service domoticz.sh start” door een ‘#’ ervoor te zetten (bv. “# service domoticz.sh stop”).

Het lijkt erop dat Domoticz op een Raspberry Pi soms niet snel genoeg stopt, wat dan dus resulteert in een leeg database-bestand in je backup.


Script om meerdere mappen te backuppen naar een FTP-server

Het volgende script zal de opgegeven folder (/home/pi/domoticz/xxxx/, verander xxxx naar de folder die je wilt backuppen) naar de FTP-locatie wegschrijven. Dit script maakt geen backup van de domoticz.db database, zie het script hierboven.

Python script: domoticz_backup_mappen.sh en hier de .zip KLIK

#!/bin/bash
## LOCAL/FTP/SCP/MAIL PARAMETERS
# https://colandino.nl
SERVER="10.0.0.254"             # IP of Network disk, used for: ftp mail scp
USERNAME="pi"                   # FTP username of Network disk used for: ftp mail scp
PASSWORD="raspberry"            # FTP password of Network disk used for: ftp mail scp
DESTDIR="/tmp"                  # used for: local
DOMO_IP="10.0.0.1"              # Domoticz IP used for all
DOMO_PORT="8080"                # Domoticz port used for all
## END OF USER CONFIGURABLE PARAMETERS
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILEDIR="domoticz_x_xxx_$TIMESTAMP.tar.gz" # Change the xxx to yours
     
### Create backup and ZIP it
tar -zcvf /tmp/$BACKUPFILEDIR /home/pi/domoticz/   # Change the xxx to yours    # Or try /home/pi/domoticz/
     
### Send to Network disk through FTP
curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEDIR" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/homes/pi/Backups/"  # Change the ftp to yours !!!
                                                     
### Remove temp backup file
/bin/rm /tmp/$BACKUPFILEDIR
### Done!

Maak het script uitvoerbaar

Gebruik hiervoor het commando:
sudo chmod +x /home/pi/domoticz/scripts/domoticz_backup_mappen.sh

Test het script met commando:
sudo sh /home/pi/domoticz/scripts/domoticz_backup_mappen.sh

Maak een automatisch taak van het script

Login als pi gebruiker en geef commando:
sudo crontab -e

Voeg onderstaande regel toe aan het crontab document:
0 1 * * * sudo ~/domoticz/scripts/domoticz_backup_mappen.sh


Script om te backuppen naar lokale folders (database + meerdere folders)

Dit script kan gebruikt worden om backups te maken en ze weg te schrijven naar een locatie op hetzelfde apparaat. Het is in principe niet aan te raden om voor een doellocatie op hetzelfde apparaat te kiezen, maar ik plaats ze in een bepaalde folder die vervolgens iedere nacht weer naar mijn NAS weggeschreven wordt.

Python script: domoticz_backup_locaal.sh en hier de .zip KLIK

#!/bin/bash
# https://colandino.nl
DOMO_IP="10.0.0.1"  # Domoticz IP 
DOMO_PORT="8080"        # Domoticz port 
### END OF USER CONFIGURABLE PARAMETERS
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILE="domoticzbackup_$TIMESTAMP.db" # backups will be named "domoticz_YYYYMMDDHHMMSS.db.gz"
BACKUPFILEGZ="$BACKUPFILE".gz

#Create backup and make tar archives
/usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /volume1/dataschijf/Domoticz_backup/database/$BACKUPFILE
tar -zcvf /volume1/dataschijf/Domoticz_backup/scripts/domoticz_scripts_$TIMESTAMP.tar.gz /volume1/@appstore/domoticz/var/scripts/
tar -zcvf /volume1/dataschijf/Domoticz_backup/www/domoticz_wwwfolder_$TIMESTAMP.tar.gz /volume1/@appstore/domoticz/www/

#Delete backups older than 31 days
/usr/bin/find /volume1/dataschijf/Domoticz_backup/database/ -name '*.db' -mtime +31 -delete
/usr/bin/find /volume1/dataschijf/Domoticz_backup/scripts/ -name '*.tar.gz' -mtime +31 -delete
/usr/bin/find /volume1/dataschijf/Domoticz_backup/www/ -name '*.tar.gz' -mtime +31 -delete

Maak het script uitvoerbaar

Gebruik hiervoor het commando:
sudo chmod +x /home/pi/domoticz/scripts/domoticz_backup_locaal.sh

Test het script met commando:
sudo sh /home/pi/domoticz/scripts/domoticz_backup_locaal.sh

Maak een automatisch taak van het script

Login als pi gebruiker en geef commando:
sudo crontab -e

Voeg onderstaande regel toe aan het crontab document:
0 1 * * * sudo ~/domoticz/scripts/domoticz_backup_locaal.sh


Script voor backup naar een Synology NAS

Dit script maakt backups (Domoticz Database & Domoticz scripts) naar de geselecteerde FTP-locatie. Vergeet niet om het Synology gebruikersaccount FTP-rechten te geven in DSM.

Python script: domoticz_backup_synology.sh en hier de .zip KLIK

#!/bin/bash
# LOCAL/FTP/SCP/MAIL PARAMETERS
# https://colandino.nl
# Backup Domotics database, scripts en config
#
SERVER="10.0.0.254" # IP of Synology NAS, used for ftp
USERNAME="pi" # FTP username of Network disk used for ftp
PASSWORD="raspberry" # FTP password of Network disk used for ftp
DESTDIR="/tmp" # used for temorarily storage
DESTDIRNAS="/homes/pi/Backups/" # Path to your Synology NAS backup folder
DOMO_IP="10.0.0.1" # Domoticz IP
DOMO_PORT="8080" # Domoticz port
### END OF USER CONFIGURABLE PARAMETERS
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILE="domoticz_$TIMESTAMP.db" # backups will be named "domoticz_YYYYMMDDHHMMSS.db.gz"
BACKUPFILEGZ="$BACKUPFILE".gz
### Create backup and ZIP it
/usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /tmp/$BACKUPFILE
gzip -9 /tmp/$BACKUPFILE
tar -zcvf /tmp/domoticz_scripts_$TIMESTAMP.tar.gz /home/pi/domoticz/scripts/
tar -zcvf /tmp/telegram_scripts_$TIMESTAMP.tar.gz /home/pi/domoticz/Config/
### Send to Network disk through FTP
curl -u "$USERNAME:$PASSWORD" --ftp-create-dirs "ftp://$SERVER/$DESTDIRNAS/$TIMESTAMP/"
curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEGZ" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/$DESTDIRNAS/$TIMESTAMP/"
curl -s --disable-epsv -v -T"/tmp/domoticz_scripts_$TIMESTAMP.tar.gz" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/$DESTDIRNAS/$TIMESTAMP/"
curl -s --disable-epsv -v -T"/tmp/domoticz_config_$TIMESTAMP.tar.gz" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/$DESTDIRNAS/$TIMESTAMP/"
### Remove temp backup file
/bin/rm /tmp/backup.db
/bin/rm /tmp/$BACKUPFILEGZ
/bin/rm /tmp/domoticz_scripts_$TIMESTAMP.tar.gz
/bin/rm /tmp/domoticz_config_$TIMESTAMP.tar.gz
### Done!

Maak het script uitvoerbaar

Gebruik hiervoor het commando:
sudo chmod +x /home/pi/domoticz/scripts/domoticz_backup_synology.sh

Test het script met commando:
sudo sh /home/pi/domoticz/scripts/domoticz_backup_synology.sh

Maak een automatisch taak van het script

Login als pi gebruiker en geef commando:
sudo crontab -e

Voeg onderstaande regel toe aan het crontab document:
0 1 * * * sudo ~/domoticz/scripts/domoticz_backup_synology.sh


Hierboven staat dat iedere dag om 01.00 uur een backup gemaakt moet worden. Je kunt dit zelf naar wens instellen.

 *     *     *   *    *        commando dat uitgevoerd moet worden
 -     -     -   -    -
 |     |     |   |    |
 |     |     |   |    +--------------------- dag van de week (0 - 6) (zondag=0)
 |     |     |   +-------------------- maand (1 - 12)
 |     |     +--------- dag van de maand(1 - 31)
 |     +----------- uur (0 - 23)
 +--------- minuten (0 - 59)

Sla tot slot de cronjob op.

Update: Crontab afsluiten geeft voor sommige gebruikers problemen, de oplossing:

  1. In VI, druk op escape ‘esc’ en type dan :wq (w is opslaan, en q is afsluiten)

  2. In NANO, druk op control+x ‘ctrl+x’ en geef dan y voor yes.

Je maakt nu dagelijks een backup van je Domoticz Database en/of bestanden op je NAS of externe schijf.


One Response to Dagelijkse backup van Domoticz naar een externe harddisk 1

  1. top, bedankt voor deze info, helpt me weer een stuk verder!!!