Domoticz auto-backup naar (S)FTP – Versie 1.3

Status: Dit is de laatste versie van dit script.

Beschrijving

Script voor het automatisch maken van een backup van Domoticz en het wegschrijven hiervan naar een (S)FTP-locatie (bijvoorbeeld naar een NAS).

Van de volgende onderdelen wordt een backup gemaakt:

  1. Domoticz database
  2. Domoticz Script folder
  3. Cronjobs

Middels deze drie items is het mogelijk om Domoticz volledig te herstellen, bijvoorbeeld na de herinstallatie van Raspbian op je Raspberry Pi.

Update

Verbeterde versie van versie 1.2 van dit script. Support toegevoegd voor SFTP, aangezien ik liever geen FTP meer actief heb staan op mijn NAS i.v.m. de onveiligheid daarvan.

Code

# Steenderen.NET
# Domoticz auto-backup naar (S)FTP – Versie 1.3

#!/bin/bash

# Setup
DOMOTICZ_SERVER="x.x.x.x:yy"	# IP-adres:Poort van je Domoticz server
FTP_SERVER="x.x.x.x:yy"		# IP-adres:Poort van je FTP server
FTP_SFTP="yes"			# Vul "yes" i.g.v. SFTP in
FTP_USERNAME="username"		# Gebruikersnaam voor FTP
FTP_PASSWORD="password"		# Wachtwoord voor FTP
FTP_DIRECTORY="/map/map"	# Locatie op je FTP voor de Backup

# No need to edit below here.
echo "Start running backup script."

TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`

# Create temp-directory if it does not already exists.
TEMP_DIR="/home/pi/temp"

if [ -d $TEMP_DIR ] ; then
    echo "- Temp-directory already exists, no need to create it."
else
    echo "- Temp-directory does not exists, creating it now."
    /bin/mkdir $TEMP_DIR
fi

# Create backup file for database.
echo "- Creating backup file for database."
BACKUP_DB=$TIMESTAMP"_db.db"
BACKUP_DB_GZ=$BACKUP_DB".gz"
/usr/bin/curl -s http://$DOMOTICZ_SERVER/backupdatabase.php > $TEMP_DIR/$BACKUP_DB

# TEST URL WITH 512MB DUMMY FILE TO CHECK IF LARGE BACKUP FILES ARE A PROBLEM.
#/usr/bin/curl -s  http://ipv4.download.thinkbroadband.com/512MB.zip > $TEMP_DIR/$BACKUP_DB

gzip -9 $TEMP_DIR/$BACKUP_DB

# Create backup file for scripts directory.
echo "- Creating backup file for scripts-directory."
BACKUP_SCRIPTS=$TIMESTAMP"_scripts.tar.gz"
tar -zcf $TEMP_DIR/$BACKUP_SCRIPTS /home/pi/domoticz/scripts/

# Create backup file for crontab.
echo "- Creating backup file for crontab."
BACKUP_CRONTAB=$TIMESTAMP"_crontab.txt"
crontab -l > $TEMP_DIR/$BACKUP_CRONTAB

# Send backup files to FTP or SFTP location.
if [ $FTP_SFTP = "yes" ] ; then
	echo "- Sending backup files to SFTP location."
	curl -k -s --disable-epsv -T "{$TEMP_DIR/$BACKUP_DB_GZ,$TEMP_DIR/$BACKUP_SCRIPTS,$TEMP_DIR/$BACKUP_CRONTAB}" -u "$FTP_USERNAME:$FTP_PASSWORD" "sftp://"$FTP_SERVER$FTP_DIRECTORY"/"
else
	echo "- Sending backup files to FTP location."
	curl -s --disable-epsv -T "{$TEMP_DIR/$BACKUP_DB_GZ,$TEMP_DIR/$BACKUP_SCRIPTS,$TEMP_DIR/$BACKUP_CRONTAB}" -u "$FTP_USERNAME:$FTP_PASSWORD" "ftp://"$FTP_SERVER$FTP_DIRECTORY"/"
fi

# Remove temp backup file
echo "- Removing temp files."
/bin/rm $TEMP_DIR/$BACKUP_DB_GZ
/bin/rm $TEMP_DIR/$BACKUP_SCRIPTS
/bin/rm $TEMP_DIR/$BACKUP_CRONTAB

# Domoticz logging
echo "- Writing log to Domoticz."
wget -q --delete-after "http://$DOMOTICZ_SERVER/json.htm?type=command&param=addlogmessage&message=Backup to (S)FTP script finished with timestamp ID $TIMESTAMP."

# Done!
echo "Done running backup script."

Installatie-instructies

Script plaatsen in configureren

Persoonlijk heb ik dit script opgeslagen onder /home/pi/domoticz/scripts/backup_ftp.sh. Ik plaats hier al mijn scripts in, zodat die mee worden genomen in de backup die gemaakt worden middels dit script.

In het begin van het script zijn er zes variabelen die je zelf dient in te vullen;

Bij DOMOTICZ_SERVER vul je op de plaats van x.x.x.x:yy het IP-adres of hostname van Domoticz in en de gebruikte poort. Draai je dit script op de Raspberry Pi waarop je ook Domoticz draait en werk je op de standaard poort van Domoticz, dan kan je hier localhost:8080 invullen.

Achter FTP_SERVER vul je op de plaats van x.x.x.x:yy het IP-adres en de gebruikte poort in van de (S)FTP-locatie waar je de backup naar toe wilt schrijven.

Bij FTP_SFPT vul je “yes” in als jouw backup-locatie SFTP ondersteund. Bijvoorbeeld de meeste moderne NAS’en ondersteunen dit wel. Wellicht moet je dit wel apart aanzetten. Mocht je de mogelijkheid voor SFTP hebben, dan is het advies om dat ook vooral te gebruiken. FTP is in principe namelijk geen veilig protocol, aangezien encryptie hierbij ontbreekt.

Voor FTP_USERNAME en FTP_PASSWORD zijn uiteraard de gebruikersnaam en het wachtwoord nodig om in te loggen op de (S)FTP-locatie.

Tot slot is FTP_DIRECTORY het pad op de (S)FTP-locatie waarop je de backup-bestanden opgeslagen wilt hebben.

Testen

Heb je het script opgeslagen, test dan in ieder geval even of het netjes draait en ook daadwerkelijk 3 backup-bestanden oplevert op je (S)FTP-locatie.

Handmatig draaien kan met het volgende commando;

bash /home/pi/domoticz/scripts/backup_ftp.sh

Schedulen van het script

Mocht je niet bekend zijn met crontab, dan adviseer ik je hier even op te Googlen. Voor het aanpassen van je cronjobs gebruik je het volgende commando;

crontab -e

Voor bijvoorbeeld het dagelijks laten draaien van dit script om 23:00 uur gebruik je onderstaande rule;

0 23 * * * /home/pi/domoticz/scripts/backup_ftp.sh

19 reacties

  1. bij testen krijg ik dit:

    pi@RPI-4:~ $ bash /home/pi/domoticz/scripts/backup_ftp.sh
    Start running backup script.
    /home/pi/domoticz/scripts/backup_ftp.sh: regel 56: syntaxfout: onverwacht bestandseinde

    heeft u een oplossing?

    • Hallo Hans,

      Klinkt alsof de code niet helemaal correct is overgekomen. Ik zou dus nog een keer proberen om de code in z’n geheel te copy & pasten. Kijken of je dan dezelfde fout krijgt.

      Verder betreft regel 56 de regel waarin de backup middels FTP wordt geupload. Weet je zeker dat de FTP locatie goed werkt, en de credentials OK zijn?

      Gr. Jos

  2. Hallo Jos,
    Dank voor het script. Ik heb het bijna volledig werkend. Alleen het wegschrijven van de logging naar Domoticz lukt nog niet, althans ik zie niets in /var/log/syslog .
    Heb jij enig idee wat er fout kan gaan? Moet ik misschien poort 8080 gebruiken? Of wordt de logging naar een andere file geschreven?
    Dank al vast voor je reactie.
    Gr, Paul

    • Hi Paul,

      Sorry voor de late reactie, door het verhuizen van mijn website, loop ik nog wat achter.
      De logging komt niet terecht in de syslog, maar in de log van Domoticz zelf.
      Dus die kan je in Domoticz zelf bekijken.
      Nu werk ik zelf inmiddels niet meer met Domoticz, dus ik kan je even niet zeggen waar je ook alweer moet kijken.

      Gr. Jos

  3. Goedemiddag,

    Ik heb uw script als test gedraaid, de backup file van de database die wordt op dat moment keurig gemaakt en geplaatst op de juiste SFTP locatie.

    Als ik de Cronjob toevoeg werkt dit echter niet, ik heb een “test regel” er bij gezet om te kijken of de cron taak werkt, dit is wel het geval. De testfile wordt keurig elke minuut vernieuwd in de tmp map. Het backup script start helaas niet elk half uur op. Heb deze ook op * * * * * gezet, om hem geforceerd elke minuut te laten draaien, zonder succes,

    30 * * * * /home/pi/domoticz/scripts/backup_ftp.sh
    * * * * * /bin/echo “cron works” >> /tmp/testfilemaken

    Ik zie in de service cron status keurig de regel terug.

    Wellicht heeft u nog een idee wat er mis gaat?

    • Hallo Spanky,

      Sorry voor de late reactie, door het verhuizen van mijn website, loop ik nog wat achter.
      Op welke wijze heb je crontab geopend?
      Heb je genoeg ruimte op je geheugenkaart voor het wegschrijven van de temp bestanden voordat deze worden geupload?
      En hoe groot is je totale hoeveelheid aan bestanden? Hoe lang deed de handmatige job er precies over?

      Gr. Jos

      • Goedenavond Jos,

        Ben er even uit geweest, sorry voor late reactie.
        de 3 aangemaakte bestanden zijn ongeveer 4 Mb. Handmatige job was binnen 30 seconden voltooid.

        Zodra ik het script via Bash draai, komt alles zoals het script voorschrijft op de juiste plek. (ftp, sftp werkt niet op mijn netwerkshare).

        Ik draai vanaf een 256GB ssd ruim voldoende vrije schijfruimte.

        Zodra ik het via crontab laat lopen gaat het niet goed.
        Ik heb Crontab geopend met commando : crontab -e (optie 1 nano viewer)

        De backup van de domoticz file (backup.db) die zie ik niet vernieuwd worden in de TMP map, dit gebrut dus wel bij bash commando. Er wordt vervolgens niets ingepakt en verplaatst naar de eind bestemming, daarentegen zie ik wel de regel in het domoticz log verschijnen.

  4. goedenavond

    ik heb dit script geinstalleerd maar de scripts in de mappen van domoticz krijg ik de melding toegang geweigerd

    EnergieKosten.lua: Functie open() is mislukt: Toegang geweigerd

    bij elk scrip heb ik deze melding .

    heeft u enig idee wat ik fout doe

    mvg leon

    • oke dit probleem heb ik opgelost maar nu loop ik dus tegen het volgende aan krijg onderstaande melding maar er staat niks op mijn nas server .

      Start running backup script.
      – Temp-directory already exists, no need to create it.
      – Creating backup file for database.
      – Creating backup file for scripts-directory.
      tar: Leidende ‘/’ wordt uit lidnamen weggelaten
      – Creating backup file for crontab.
      no crontab for root
      – Sending backup files to SFTP location.
      – Removing temp files.
      – Writing log to Domoticz.
      Done running backup script.

      hoe is dit mogelijk

      mvg leon

  5. ik heb deze fouten

    bash /home/pi/domoticz/scripts/backup_ftp.sh
    /home/pi/domoticz/scripts/backup_ftp.sh: regel 3: $’\r’: opdracht niet gevonden
    /home/pi/domoticz/scripts/backup_ftp.sh: regel 5: $’\r’: opdracht niet gevonden
    /home/pi/domoticz/scripts/backup_ftp.sh: regel 13: $’\r’: opdracht niet gevonden
    Start running backup script.
    /home/pi/domoticz/scripts/backup_ftp.sh: regel 16: $’\r’: opdracht niet gevonden
    /home/pi/domoticz/scripts/backup_ftp.sh: regel 18: $’\r’: opdracht niet gevonden
    /home/pi/domoticz/scripts/backup_ftp.sh: regel 21: $’\r’: opdracht niet gevonden
    /home/pi/domoticz/scripts/backup_ftp.sh: regel 71: syntaxfout: onverwacht bestan dseinde
    Bij de opdracht regels heb ik een # voorgezet dit probleem is opgelost
    Maar de syntaxfout krijg ik niet opgelost

  6. is opgelost met deze aktie
    Waarschijnlijk is het bestand nog weggeschreven in DOS-format. Heb je het al geconverteerd met Notepad++ (Bewerken -> Regeleinde-conversie -> Unix (LF))?

  7. Dag Jos,

    Wil even laten weten heel blij te zijn met dit script. Iets dergelijks zocht ik al lange tijd.
    Ik moet alleen de crontab nog instellen maar de handmatige test is meer dan goed verlopen.
    Voor test draai ik het script niet op de pi waarop domoticz draait maar met de juiste parameters werkt het prima (alleen de scripts worden niet gebackupt van de domoticz pi maar van de pi waarop het backupscript is geplaatst. Gaat dus ook wel goedkomen.
    Dank voor dit prachtig stuk code. Ik ga het uitvlooien om het goed te kunnen begrijpen.

    Mvgr.
    -Bart

  8. Dag Jos,
    Toch nog een vraagje.
    Ik heb wat dzVents scripts toegevoegd.
    Deze scripts maken o.a. gebruik van de mappen script/dzVents/Generated_scripts
    en
    script/dzVents/data
    Tijdens het runnen gaat het fout. Foutmeldingen:

    tar: Leidende ‘/’ wordt uit lidnamen weggelaten
    tar: /home/pi/domoticz/scripts/dzVents/generated_scripts/Afzonderlijke meterstanden.lua: Functie open() is mislukt: Toegang geweigerd
    tar: /home/pi/domoticz/scripts/dzVents/generated_scripts/domo2excel.lua: Functie open() is mislukt: Toegang geweigerd
    tar: /home/pi/domoticz/scripts/dzVents/data/__data_Afzonderlijke meterstanden.lua: Functie open() is mislukt: Toegang geweigerd
    tar: Gestopt in fouttoestand vanwege eerdere fouten

    Heb je die eerder gezien?

    Mvgr.
    -Bart

  9. Vraagje…
    Notepad++ geopend en alles gekopieerd.
    Notepad++ (Bewerken -> Regeleinde-conversie -> Unix (LF) gekozen zoals aanbevolen door Theo.
    Opgeslagen als backup_ftp.sh
    Versie 1.3 draait en de benodigde files worden naar de ftp map op een NAS gekopieerd.
    Maar alle files zijn 0kB of 1kB en dat klopt niet natuurlijk.
    Geen foutmeldingen in de console.
    Mijn huidige Domoticz database file als ik die via Domoticz in Windows zelf back up is 1.8 mB.
    De Domoticz database files in de domoticz back up directory op de home/pi/domotics/backups/daily zijn ook1.8 mB
    Wat zie ik over het hoofd?

    Paco

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.