Sauvegarde de la db de zigbee2mqtt

Ce tutoriel va nous permettre de télécharger, sauvegarder, et réinjecter les fichiers de fonctionnement de l’intégration zigbee2mqtt lors d’une réinstallation de Gladys afin d’éviter de réappairer tous vos devices. (perso j’en ai une quarantaine).

Attention cela demande pas mal de manipulations.
Pour l’instant ce tutoriel est destiné aux utilisateur sous un système Windows.

Prérequis:

  • Avoir une machine virtuel sous linux
  • Savoir se connecté en SSH à son instance Gladys

Installation d’une machine virtuel Linux:

Il faut activer le sous-système Windows pour Linux:

  • Appuyez sur la touche Windows + R puis tapez : optionalfeatures.exe puis appuyez sur Entrée
  • Faites défiler vers le bas puis cochez:
    – Sous-système Windows pour Linux
    – PLateforme de l’hyperviseur Windows
    – Plateforme d’ordinateur virtuel

Puis cliquez sur OK.
On vous demande de faire une mise à jour, il faut la faire.

En cas de problème vous pouvez vous allez voir ici.

Après le redémarrage, on va installer WSL2.

  • Téléchargez le package :
    Package de mise à jour du noyau Linux WSL2 pour machines x64
  • Exécutez le package de mise à jour que vous venez de télécharger.
  • définir WSL 2 comme version par défaut avec la commande suivante
    – Appuyez sur la touche Windows + R puis tapez : wsl --set-default-version 2 puis appuyez sur Entrée.

Il ne vous reste plus qu’à télécharger une distribution Linux dans le store de Microsoft.
Mois j’ai choisi Ubuntu 18.04 LTS.

En cas de problème vous pouvez vous allez voir ici..

Maintenant que vous avez installer votre poste virtuel linux, on va commencer la procédure.

  1. Se connecter en SSH à son instance Gladys:
    ssh [Nom d'utilisateur]@gladys
    Capture d’écran 2022-05-03 110245

  2. Arrêt du container zigbee2mqtt
    docker stop gladys-z2m-zigbee2mqtt
    Capture d’écran 2022-05-03 110216

  3. Connection root
    sudo su
    Puis:
    /home/[Nom d'utilisateur]
    Capture d’écran 2022-05-03 110350

  4. Création de l’archive compressé du dossier complet zigbee2mqtt dans le dossier /home/utilisateur du RPI
    tar -zcvf zigbee2mqtt_z2m.tar.gz /var/lib/gladysassistant/zigbee2mqtt/z2m
    Capture d’écran 2022-05-03 110814

  5. sortir du root:
    exit

  6. Re-démarrage du container zigbee2mqtt:
    docker start gladys-z2m-zigbee2mqtt

Puis se déconnecter de la console SSH.

Maintenant que l’archive est créé, on va la récupérer directement dans notre PC.
Par exemple dans le dossier « Téléchargement »
Pour connaître le chemin d’accès exacte (avec les majuscules); ouvrez votre explorateur de fichiers et faite un clic droit sur le dossier « Téléchargements », puis « Propriétés » et cliquez sur l’onglet « emplacement »
Capture d’écran 2022-05-03 112744
Voici mon chemin d’accés:
« C:\Users\vince\Downloads »

  1. Redémarrer votre console SSH et se positionner dans le dossier:
    cd /mnt/c/Users/vince/Downloads/
    Pour William c’est ça, avec comme résultat:
    Capture d’écran 2022-05-03 113107

  2. Ensuite entrer la commande:
    scp [Nom d'utilisateur]@gladys:/home/[Nom d'utilisateur]/zigbee2mqtt_z2m.tar.gz /mnt/c/Users/willi/Downloads/

/home/william/ => remplacer par le chemin de l’archive créer précédemment sur le RPI
/mnt/c/Users/willi/Downloads/ => chemin où tu veut copier ton archive

Voici le résultat dans votre dossier:

Prochaine étape, transférer vos fichiers dans votre nouvelle instance Gladys.

Pour ma part, je passe d’une carte SD vers un SSD.
Attention, il va falloir restaurer la base de données de Gladys. Soit avec Gladys plus soit en ayant sauvegarder votre base de données.

Je vous conseil vivement d’utiliser Gladys plus pour plus de facilité.
Voire ce topic Offre limitée : Gladys Plus à -50% pendant 1 an ! 🤩

Sur votre nouvelle instance restaurer votre base de données de Gladys mais ne pas réactiver l’intégration zigbee2mqtt.

  1. Redémarrer le terminal Ubuntu de Windows

  2. Dans un premier temps avec le terminal Ubuntu de Windows se placer dans le dossier où est stocké l’archive zigbee2mqtt. Dans le cas de William le dossier "téléchargements de son pc.
    image

  3. Entrez la commande

scp dossier.tar.gz [nomutilisateur]@adresseip:~/

~/ => correspond au dossier /home/utilisateur de linux

Ce qui donne

Le dossier est copié dans le dossier /home/utilisateur, il reste plus qu’à le décompresser dans le bon dossier c’est à dire dans \var\lib\gladysassistant\zigbee2mqtt\z2m
Pour simplifier la chose on va déjà décompresser l’archive et copier uniquement les 3 fichiers. Pas besoin de copier tous les logs.

  1. Se reconnecter en SSH à son instance Gladys:
    ssh [Nom d'utilisateur]@gladys
    Capture d’écran 2022-05-03 110245

  2. Pour vérifier si votre archive est bien présente:
    ls
    image
    L’archive à bien été copier

  3. Entrez la commande pour décompresser l’archive

tar -zxvf zigbee2mqtt_z2m.tar.gz

Maintenant on va juste copier les 3 fichiers configuration.yaml, coordinator_backup.json et database.db dans le dossier \var\lib\gladysassistant\zigbee2mqtt\z2m\

  1. Dans le terminal passer en root avec la commande
sudo su
  1. Création des dossiers zigbee2mqtt et z2m avec les commandes suivantes:
mkdir /var/lib/gladysassistant/zigbee2mqtt

mkdir /var/lib/gladysassistant/zigbee2mqtt/z2m
  1. Copier les 3 fichiers avec les commandes suivantes:
cp var/lib/gladysassistant/zigbee2mqtt/z2m/configuration.yaml /var/lib/gladysassistant/zigbee2mqtt/z2m/

cp var/lib/gladysassistant/zigbee2mqtt/z2m/coordinator_backup.json /var/lib/gladysassistant/zigbee2mqtt/z2m/

cp var/lib/gladysassistant/zigbee2mqtt/z2m/database.db /var/lib/gladysassistant/zigbee2mqtt/z2m/
  1. Maintenant brancher votre clef zigbee et activer le service

Ce tuto a été rédiger avec l’aide de @_Will_71.
Cette solution, est à adapter si vous utiliser un NAS ou autre mais je ne suis pas en mesure de vous dire quoi faire.

N’hésitez pas à poser vos questions on essayera d’y répondre.

3 « J'aime »

Top, merci pour le tuto :slight_smile:

Je vais regarder pour automatiser tout ça, par contre @pierre-gilles, ça pourrait être pas mal de pouvoir balancer ce tar.gz directement dans Gladys plus ?

Je pensais par exemple à un endpoint gladys plus ou on post le fichier directmeent via un curl ?

On pourrait faire une image docker toute simple qui tar gz et poste directement sur un endpoint gladys plus. Qui lui va backuper tout bien comme tu le fais pour la bdd actuel ?

On pourrait donc remettre la tar gz avec ce même script si on veut restorer ?

Tu en penses quoi ?

C’est exactement l’idée voulu.
En espérant qu’il soit vite obsolète.

La suite va arriver.
Merci à @_Will_71 de son aide.

1 « J'aime »

Si j’ai le temps je fais la suite ce soir en partant d’une nouvelle installation Gladys.

1 « J'aime »

Je vais te sortir ma phrase favorite au travail, « c’est pas aussi simple que ça » :smiley: (aha)

Je suis pour que Zigbee2mqtt soit inclus dans les backups Gladys Plus (c’est un vieux sujet!), en revanche ce n’est pas aussi simple que de juste faire un .tar.gz :slight_smile:

Zigbee2mqtt est un projet à part entière séparé de Gladys, projet qui a un cycle de vie différent du notre, qui est régulièrement mis à jour, qui redémarre, qui fait sa tambouille dans son coin.

Quand Gladys Plus fait un backup de Gladys, on ne fait pas juste un .tar.gz du volume, il y a tout un process pour que la sauvegarde soit faite correctement, et ne soit pas corrompue.

Pour la DB de Gladys, on utilise SQLite, et donc je passe par l’utilitaire sqlite3 .backup pour faire une sauvegarde qui soit cohérente, et non corrompue. Pendant la sauvegarde, on LOCK la DB en écriture pour que le backup ne soit pas infini (si tu écris pendant que tu backup, c’est le chat et la souris, ça peut continuer éternellement)

Chez Zigbee2mqtt, ils utilisent il me semble des fichiers JSON + une DB sqlite. Faire un gzip d’un dossier avec de multiples fichiers pendant que les fichiers sont écrits, c’est le meilleur moyen d’avoir des fichiers corrompu et pas cohérents entre eux.

Aussi, rien ne nous dit que Zigbee2mqtt va garder ces noms de fichiers à l’avenir. Leur projet évolue sans cesse, et ils sont assez brutaux dans leur changement. Je ne considèrerais pas leur filesystem comme étant quelque chose de stable dans le temps.

La solution à mon sens

Ce que je propose, c’est que plutôt que d’essayer de construire un utilitaire de sauvegarde de Zigbee2mqtt, c’est de le faire en sens inverse: faire en sorte que Gladys soit capable de relancer un nouveau container Zigbee2mqtt de zéro, en lui redonnant le strict minimum pour restaurer un réseau existant, sans avoir à ré-appairer tout.

Pour cela, il faut enregistrer 3 trucs en DB et être capable de re-créer un container Zigbee2mqtt avec les mêmes paramètres:

network_key / channel / pan_id

La discussion originale est ici:

Oui après quand je dis faire un tar gz il pouvait y avoir une solution un peu plus clean et réfléchi la c’est sans avoir creuser à fond le sujet :smiley:

Mais pour le coup je savais pas qu’on pouvait faire ça donc clairement une solution bien meilleure. :slight_smile:

Et pour le coup, ma solution n’a rien à voir avec Gladys Plus, c’est une solution agnostique de ce moyen de backup.

A développer, tout se passe dans l’intégration Zigbee2mqtt, et quelqu’un qui fait sa sauvegarde manuellement a juste à faire un backup du fichier gladys-production.db et l’intégration pourra retomber sur ces pattes.

Maintenant, il faut le développer.

Toute PR est la bienvenue :slight_smile:

Yep, l’avantage bien sur de Gladys plus c’est de plus se soucier du backup :smiley:

1 « J'aime »

C’est que je dit a mes collègues commerciaux😀

Après oui ma façon fonctionne pour l’instant et est très dépendante de z2m, donc si il y a des modifications alors cela ne fonctionnera plus.

Ce que j’ai fait c’est uniquement pour test et si cela pouvait aider des personnes en attendant une solution bien meilleure.

1 « J'aime »

j’ai hate de voir la suite pour le restore :stuck_out_tongue:

Ca arrive, je test et je mets la procédure.

1 « J'aime »

Backup sur rpi nickel
Je compte le restore sur le nas ensuite j’ai vu deux trois truc dans la config a reverifié avant le restore de mon côté ^^

Je viens de finir le tuto pour sauvegarde la BD de l’intégration zigbee sur Raspeberry.

A vous de jouer si vous ne voulez pas réappairer tous vos devices.

2 « J'aime »

Cest parfait cela a tres bien fonctionné !

Sur NAS pas de commande supplémentaire à faire, c’est cool.

Absolument pas apres on peut le faire a la mano aussi en passant par dsm et en copiant les fichiers extrait ^^

Bonjour, j’ai fait une tentative de sauvegarde des 3 informations nécessaires à restaurer après un backup sur z2m.
Je pense que pour tester il suffit de :

  1. Configurer une instance Gladys avec z2m
  2. Arrêter Gladys
  3. Supprimer/arrêter le container docker z2m
  4. Déplacer/supprimer les informations du container
  5. Démarrer Gladys
  6. Vérifier que le fichier /var/lib/gladysassistant/zigbee2mqtt/z2m/configuration.yaml contient les mêmes « network_key / pan_id / channel » qu’avant
  7. Vérifier que les devices déjà enregistrés répondent toujours

N’ayant pas de dongle z2m, j’ai fait le dev à l’aveugle.
Je recommande de tester sur un environnement de test, plutôt que sacrifier votre « prod ».

L’image : atrovato/galdys:zigbee2mqtt

Merci, bon chance.

6 « J'aime »

:heart_eyes: ça va faire plaisir à du monde ça ! Merci beaucoup @AlexTrovato.

Au besoin, si personne se dévoue je ferais un test de mon côté, c’est vraiment une fonctionnalité importante.

Est-ce que tu gère le cas des instances existantes qui ont pas les paramètres en DB pour l’instant mais qui suite à une mise à jour devront sauvegarder cette clé ?

En théorie :

  1. le container z2m n’existe pas
  • si aucune information n’est stockée en DB : création du container avec des valeurs générées par l’image, puis lecture de ces valeurs pour sauvegarde en DB
  • si les valeurs sont en DB : création du container avec les valeurs stockées
  1. si le container z2m existe
  • sauvegarde en DB (override si les variables existent déjà)

La PR est pour l’instant uniquement sur mon espace perso

j’en ai profité pour modifier quelques lourdeurs dans les tests, et quelque logs.

1 « J'aime »

On en sait plus ici ?