Domoticz : sauvegarde automatique et régulière de votre système domotique

Yo !

Aujourd’hui je vais vous parler de la sauvegarde régulière des informations importantes pour votre installation domotique à travers ce post : « Domoticz : sauvegarde automatique et régulière de votre système domotique ».

Mon installation domotique fonctionne alors que je ne suis pas souvent à la maison. Mon soucis principal est donc la stabilité et la disponibilité de l’installation.

Je préfère ne pas intégrer une nouvelle fonctionnalité si il ne me reste qu’un soupçon de doute concernant l’impacte de celui-ci sur le CPU et la mémoire.

Cependant… il faut bien avancer et comme je n’ai pas d’environnement de test me permettant de tester en grandeur nature, il a bien fallu penser à mettre en place une solution me permettant de repartir de 0 en cas d’incident majeur.

Allez GO, c’est parti !

Domoticz : sauvegarde automatique et régulière de votre système domotique

Pour commencer, je me suis posé la question suivante : Qu’est ce que je dois sauvegarder ?

Après avoir regardé un peu les fichiers présents sur le raspberry mais aussi les forums sur le net, notamment le forum officiel de domoticz, j’ai pris la décision de sauvegarder 3 choses :

  1. la base de donnée domoticz
  2. le répertoire domoticz
  3. le filesystem complet du raspberry

Sauvegarde de la base de donnée domoticz

Pour sauvegarder la base de donnée de domoticz, j’ai trouvé la commande suivante :

Avec la commande curl (man curl), vous allez pouvoir récupérer le résultat de l’action qui est lancée lorsque l’on clique sur le bouton d’export de la base de donnée présent sur l’écran accessible par le chemin : Réglages / Paramètres puis choisir l’onglet « Sauvegarde/restauration« . Dans la commande ci-dessus, le symbole « > » redirige la sortie standard vers le fichier spécifié ensuite.

Sauvegarde du répertoire domoticz

Pour procéder à la sauvegarde du répertoire domoticz, je vais utiliser la commande tar (man tar). Voici la commande que je propose :

Les options choisies spécifient :

  • c : créer une archive
  • z : utiliser la compression gzip
  • f : permet de spécifier le fichier archive, ici : monFichierBackup.tar.gz.

Sauvegarde complète de la carte SD (filesystem)

La première chose à faire est de repérer le chemin utilisé pour notre carte SD. Pour connaitre le chemin vers votre carte SD, on utilise la commande fdisk (man fdisk) :

Avec ce résultat, on peut voir que notre carte se cache derrière le répertoire :

/dev/mmcblk0

La commande à utiliser pour créer une image de votre carte SD est la commande dd (man dd).

Si vous n’avez pas envie de vous casser la tête à lire le manuel de cette commande, voici la commande que j’utilise :

Attention, ce traitement est long et charge beaucoup votre système.

Chez moi ce traitement a mis 7 heures 25 minutes sachant que j’écris le résultat sur un disque USB monté sur un autre RaspberryPi, ce qui n’est pas vraiment optimal étant donné que le réseau Ethernet et l’USB se partagent le même bus… et surtout que le disque de destination est en NTFS (vraiment pas top sous linux niveau consommation de CPU) mais bon à la limite, je ne suis pas pressé :)

Bon voilà :) nous savons désormais sauvegarder chacun des éléments important du système domotique.
Voyons voir comment automatiser la sauvegarde dans le but d’avoir toujours une sauvegarde assez récente des éléments.

Automatisation de la sauvegarde & nettoyage

Pour automatiser la sauvegarde, j’ai décidé d’utiliser la crontab (man cron) qui permet l’exécution de tâches planifiées. Réfléchissons maintenant à quand programmer les sauvegardes.

Pour ce qui est de la sauvegarde de la base de données, j’ai décidé de programmer la sauvegarde tous les matin à 01h, ainsi, si un crash arrive un jour, je repars de ce fichier pour restaurer l’ensemble des informations récupérées pas domoticz tel que l’historique des températures ou encode de l’utilisation des différents périphériques.

Pour ce qui est de la sauvegarde du répertoire domoticz, j’ai décidé de mettre en place une sauvegarde hebdomadaire le lundi matin à 4h. Ainsi, si des éléments de ce répertoire (scripts, icônes perso…) sont corrompus, seule une semaine de travail sera perdue. j’essaierai de lancer une sauvegarde manuelle en cas d’ajout de scripts… ou même d’automatiser ce point plus tard.

Pour ce qui est de la sauvegarde complète du filesystem du RPi, je pense qu’une sauvegarde automatique n’est nécessaire qu’une fois par mois le premier à 2h. Bien que cette sauvegarde soit souvent (toujours?) nécessaire à la restauration complète de votre centre domotique, les modifications effectuées au niveau du système (en gros, autres répertoires que /home) sont relativement rares, c’est pourquoi j’ai décidé de ne pas effectuer souvent cette sauvegarde étant donné le temps d’exécution nécessaire.

Pour éditer votre crontab, utiliser la commande crontab -e. Voici à quoi doit correspondre notre crontab :

Bon, maintenant que ce point est résolu, il faut maintenant réfléchir au nombre de version de chaque type de sauvegarde à conserver et par la même occasion au nettoyage du répertoire de sauvegarde.

Vu les périodicités fixées précédemment, je choisis de conserver 7 jours (soit 7 fichiers) de sauvegarde de la base de donnée, 1 mois de sauvegarde du répertoire Domoticz (soit 4 fichiers), et 2 mois de FILESYSTEM (soit 2 fichiers).

Avec cette commande, j’affiche puis supprime les fichiers correspondant à myFile qui sont plus vieux que temps.

Pour parler de volume, actuellement le poids des fichiers est de :

  • DB : 5,5MB
  • DOMOTICZ : 150 MB
  • FILESYSTEM : 7,7Go

L’espace libre nécessaire pour que la sauvegarde se déroule bien est donc d’un peu plus de 16Go.

Ecriture du script de sauvegarde

Et voila :)

Vous avez maintenant toutes les billes pour mettre vous aussi en place une sauvegarde automatique de l’ensemble des éléments importants de votre installation domotique.

Perso je stocke les sauvegardes sur mon petit NAS fait maison (à base de RaspberryPi aussi et de la solution OpenMediaVault) comme ça .. en cas de soucis : 1 heure suffit pour relancer l’installation complète depuis une carte SD neuve.

N’hésitez pas à me dire si ce point vous intéresse !

Pour aller plus loin

On peut maintenant sauvegarder tranquillement l’ensemble de son installation mais en développant ce script je me suis demandé si je n’aurais pas du partir du nombre de fichiers modifiés depuis une date donnée pour déclencher une sauvegarde. Peut-être que les sauvegardes serait plus significative et moins nombreuses. Enfin bref, une première solution est maintenant en place, il faut lui laisser sa chance et on verra plus tard si il y a des choses à modifier/améliorer/revoir :)

J’espère que ce post « Domoticz : sauvegarde automatique et régulière de votre système domotique » pourra vous être utile et bien sûr, comme d’hab, si vous avez des questions, remarques, ou encore précisions à apporter, n’hésitez pas à laisser un commentaire !

4 réflexions au sujet de « Domoticz : sauvegarde automatique et régulière de votre système domotique »

  1. GD

    Hello,
    j’adore votre script, que j’ai mis en place, mais j’ai détecté une petite erreur sur la fin.
    pour faire marcher, j’ai changé quelques lignes pour la partie nettoyage.
    Merci.

    #Nettoyage des sauvegarde de DB
    myDBFile= »${BACKUP_DIRECTORY} »
    DB_to_be_deleted=find $myDBFile -name '*.db' -type f -mtime +$TTL_DB
    echo « DB_to_be_deleted : $DB_to_be_deleted »
    find $myDBFile -type f -name ‘*.db’ -mtime +$TTL_DB -exec rm {} \;

    #Nettoyage des sauvegardes de répertoire domoticz
    myDIRECTORYFile= »${BACKUP_DIRECTORY} »
    DIRECTORY_to_be_deleted=find $myDIRECTORYFile -name '*.tar.gz' -type f -mtime +$TTL_DOMOTICZ
    echo « DIRECTORY_to_be_deleted : $DIRECTORY_to_be_deleted »
    find $myDIRECTORYFile -type f -name ‘*.tar.gz’ -mtime +$TTL_DOMOTICZ -exec rm {} \;

    #Nettoyage des sauvegardes du filesystem
    myFSFile= »${BACKUP_DIRECTORY} »
    FS_to_be_deleted=find $myFSFile -name '*.gzip' -type f -mtime +$TTL_FILESYSTEM
    echo « FS_to_be_deleted : $FS_to_be_deleted »
    find $myFSFile -type f -name ‘*.gzip’ -mtime +$TTL_FILESYSTEM -exec rm {} \;

    Répondre
  2. GD

    Bonjour,
    merci pour le script que j’ai installé 😉
    cependant, je me demande un peu comment faire pour restaurer la sauvegarde de la SD Card si elle venait à tomber en panne ?
    Une petite indication svp ?

    Répondre
  3. Seb

    Pas mal… pas mal LOL…

    J’ai adapté avec ma Freebox Revolution (NAS)

    Je vais laisser en place pour l’instant pour voir comment il se comporte mais je pense que je vais mettre rapidement la compression des fichiers pour la db et faire un seul script pour gérer les 3 qui se lanceront à la suite, je n’aurai qu’une ligne dans le crontab.

    Bref… c’est une bonne base pour commencer…

    Bravo!

    Répondre
  4. Ced

    Très bon script que j’ai réussi à réadapter sur mon NAS Synology.
    En revanche peux t’on changer l’envoi de SMS par un commande de notification prowl ?
    D’autre part en ligne de commande j’ai systématiquement l’erreur invalid date qui s’affiche.

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">