Backup der zigbee2mqtt-Datenbank

Dieser Leitfaden ermöglicht es uns, die Funktionsdateien der zigbee2mqtt-Integration herunterzuladen, zu sichern und bei einer Neuinstallation von Gladys wieder einzuspielen, um das erneute Pairing aller Geräte zu vermeiden. (Ich habe persönlich etwa vierzig Geräte.)

Achtung, dies erfordert einige Manipulationen.
Bisher ist dieser Leitfaden für Benutzer unter einem Windows-System bestimmt.

Voraussetzungen:

  • Eine virtuelle Maschine unter Linux haben
  • Wissen, wie man sich per SSH mit der Gladys-Instanz verbindet

Installation einer virtuellen Linux-Maschine:

Man muss das Windows-Subsystem für Linux aktivieren:

  • Drücken Sie die Windows-Taste + R und geben Sie dann ein: optionalfeatures.exe und drücken Sie die Eingabetaste
  • Blättern Sie nach unten und aktivieren Sie:
    – Windows-Subsystem für Linux
    – Windows-Hypervisor-Plattform
    – Virtuelle Maschinenplattform

Dann auf OK klicken.
Man wird aufgefordert, ein Update durchzuführen, dies muss erfolgen.

Falls Probleme auftreten, können Sie hier nachsehen.

Nach dem Neustart installieren wir WSL2.

  • Laden Sie das Paket herunter:
    WSL2 Linux-Kernel-Update-Paket für x64-Maschinen
  • Führen Sie das gerade heruntergeladene Update-Paket aus.
  • Definieren Sie WSL 2 als Standardversion mit dem folgenden Befehl
    – Drücken Sie die Windows-Taste + R und geben Sie dann ein: wsl --set-default-version 2 und drücken Sie die Eingabetaste.

Jetzt müssen Sie nur noch eine Linux-Distribution im Microsoft Store herunterladen.
Ich habe mich für Ubuntu 18.04 LTS entschieden.

Falls Probleme auftreten, können Sie hier nachsehen.

Jetzt, da Sie Ihre virtuelle Linux-Maschine installiert haben, können wir mit dem Verfahren beginnen.

  1. SSH-Verbindung zur Gladys-Instanz herstellen:
    ssh [Benutzername]@gladys
    Screenshot 2022-05-03 110245

  2. Anhalten des zigbee2mqtt-Containers
    docker stop gladys-z2m-zigbee2mqtt
    Screenshot 2022-05-03 110216

  3. Root-Verbindung
    sudo su
    Dann:
    /home/[Benutzername]
    Screenshot 2022-05-03 110350

  4. Erstellen des komprimierten Archivs des gesamten zigbee2mqtt-Ordners im Ordner /home/benutzer des RPI
    tar -zcvf zigbee2mqtt_z2m.tar.gz /var/lib/gladysassistant/zigbee2mqtt/z2m

  5. Root verlassen:
    exit

  6. Neustart des zigbee2mqtt-Containers:
    docker start gladys-z2m-zigbee2mqtt

Dann von der SSH-Konsole abmelden.

Jetzt, da das Archiv erstellt ist, holen wir es direkt auf unseren PC.
Zum Beispiel in den Ordner « Downloads »
Um den genauen Pfad zu erfahren (mit Großbuchstaben); öffnen Sie Ihren Datei-Explorer und machen Sie einen Rechtsklick auf den Ordner « Downloads », dann « Eigenschaften » und klicken Sie auf die Registerkarte « Speicherort »


Hier ist mein Zugriffspfad:
« C:\Users\vince\Downloads »

  1. Starten Sie Ihre SSH-Konsole neu und navigieren Sie in den Ordner:
    cd /mnt/c/Users/vince/Downloads/
    Für William ist es das, mit dem Ergebnis:
    Screenshot 2022-05-03 113107

  2. Geben Sie dann den Befehl ein:
    scp [Benutzername]@gladys:/home/[Benutzername]/zigbee2mqtt_z2m.tar.gz /mnt/c/Users/willi/Downloads/

/home/william/ => durch den Pfad des zuvor auf dem RPI erstellten Archivs ersetzen
/mnt/c/Users/willi/Downloads/ => Pfad, in den Sie Ihr Archiv kopieren möchten
Screenshot 2022-05-03 115656

Hier ist das Ergebnis in Ihrem Ordner:

Nächster Schritt: Übertragen Sie Ihre Dateien in Ihre neue Gladys-Instanz.

In meinem Fall gehe ich von einer SD-Karte zu einem SSD über.
Achtung, Sie müssen die Gladys-Datenbank wiederherstellen. Entweder mit Gladys Plus oder indem Sie Ihre Datenbank gesichert haben.

Ich empfehle Ihnen dringend, Gladys Plus für mehr Benutzerfreundlichkeit zu verwenden.
Siehe dieses Thema Offre limitée : Gladys Plus à -50% pendant 1 an ! 🤩

In Ihrer neuen Instanz stellen Sie Ihre Gladys-Datenbank wieder her, aktivieren Sie aber die zigbee2mqtt-Integration nicht.

  1. Starten Sie das Ubuntu-Terminal von Windows neu

  2. Zuerst mit dem Ubuntu-Terminal von Windows in den Ordner wechseln, in dem das zigbee2mqtt-Archiv gespeichert ist. Im Fall von William der "Downloads“-Ordner seines PCs.
    Bild

  3. Geben Sie den Befehl ein

scp ordner.tar.gz [benutzername]@ip-adresse:~/

~/ => entspricht dem Ordner /home/benutzer von Linux

Was ergibt
Bild

Der Ordner wird in den Ordner /home/benutzer kopiert, es bleibt nur noch, ihn in den richtigen Ordner zu entpacken, d. h. in \var\lib\gladysassistant\zigbee2mqtt\z2m
Um die Sache zu vereinfachen, werden wir das Archiv zunächst entpacken und nur die 3 Dateien kopieren. Es ist nicht notwendig, alle Logs zu kopieren.

  1. SSH-Verbindung zur Gladys-Instanz erneut herstellen:
    ssh [Benutzername]@gladys
    Screenshot 2022-05-03 110245

  2. Um zu überprüfen, ob Ihr Archiv vorhanden ist:
    ls
    Bild
    Das Archiv wurde erfolgreich kopiert

  3. Geben Sie den Befehl zum Entpacken des Archivs ein

tar -zxvf zigbee2mqtt_z2m.tar.gz

Jetzt kopieren wir nur die 3 Dateien configuration.yaml, coordinator_backup.json und database.db in den Ordner \var\lib\gladysassistant\zigbee2mqtt\z2m\

  1. Im Terminal als Root mit dem Befehl wechseln
sudo su
  1. Erstellen Sie die Ordner zigbee2mqtt und z2m mit den folgenden Befehlen:
mkdir /var/lib/gladysassistant/zigbee2mqtt

mkdir /var/lib/gladysassistant/zigbee2mqtt/z2m
  1. Kopieren Sie die 3 Dateien mit den folgenden Befehlen:
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. Jetzt den Zigbee-Key anschließen und den Dienst aktivieren

Dieser Leitfaden wurde mit Hilfe von @Will_71 erstellt.
Diese Lösung muss angepasst werden, wenn Sie ein NAS oder Ähnliches verwenden, aber ich kann Ihnen nicht sagen, was zu tun ist.

Zögern Sie nicht, Fragen zu stellen, wir werden versuchen, sie zu beantworten.

Top, danke für das Tutorial :slight_smile:

Ich werde schauen, wie ich das alles automatisieren kann. Aber @pierre-gilles, wäre es nicht gut, wenn man dieses tar.gz direkt in Gladys Plus hochladen könnte?

Ich dachte zum Beispiel an ein Gladys Plus-Endpoint, auf das man die Datei direkt per curl posten kann?

Man könnte ein einfaches Docker-Image erstellen, das tar gz erstellt und direkt auf ein Gladys Plus-Endpoint postet. Das würde dann alles schön sichern, so wie du es für die aktuelle Datenbank machst?

Könnte man dann mit demselben Skript die tar.gz wiederherstellen, wenn man möchte?

Was denkst du?

Das ist genau die gewünschte Idee.
In der Hoffnung, dass sie schnell veraltet sein wird.

Der nächste Teil kommt noch.
Danke an @Will_71 für seine Hilfe.

Wenn ich Zeit habe, mache ich heute Abend die Fortsetzung, ausgehend von einer neuen Gladys-Installation.

Ich werde dir meinen Lieblingssatz bei der Arbeit sagen, « es ist nicht so einfach, wie es scheint » :smiley: (aha)

Ich bin dafür, dass Zigbee2mqtt in die Gladys Plus-Backups einbezogen wird (das ist ein altes Thema!), aber es ist nicht so einfach, einfach nur ein .tar.gz zu erstellen :slight_smile:

Zigbee2mqtt ist ein eigenständiges Projekt, das von Gladys getrennt ist, mit einem eigenen Lebenszyklus, das regelmäßig aktualisiert wird, neu startet und seine eigene Sache macht.

Wenn Gladys Plus ein Backup von Gladys erstellt, erstellen wir nicht einfach ein .tar.gz des Volumes, es gibt einen ganzen Prozess, damit das Backup korrekt erstellt wird und nicht beschädigt wird.

Für die Gladys-Datenbank verwenden wir SQLite und nutzen den Befehl sqlite3 .backup, um eine konsistente und nicht beschädigte Sicherung zu erstellen. Während der Sicherung wird die DB für Schreibvorgänge gesperrt, damit das Backup nicht endlos dauert (wenn du während des Backups schreibst, ist das wie die Katze und die Maus, es kann ewig so weitergehen).

Bei Zigbee2mqtt, glaube ich, verwenden sie JSON-Dateien und eine SQLite-Datenbank. Ein gzip eines Ordners mit mehreren Dateien während die Dateien geschrieben werden, ist der beste Weg, um beschädigte und inkonsistente Dateien zu erhalten.

Außerdem gibt es keine Garantie, dass Zigbee2mqtt diese Dateinamen in Zukunft beibehält. Ihr Projekt entwickelt sich ständig weiter, und sie sind ziemlich radikal in ihren Änderungen. Ich würde ihr Dateisystem nicht als etwas Stabilen über die Zeit betrachten.

Die Lösung aus meiner Sicht

Was ich vorschlage, ist nicht zu versuchen, ein Backup-Tool für Zigbee2mqtt zu erstellen, sondern das Gegenteil: Gladys sollte in der Lage sein, einen neuen Zigbee2mqtt-Container von Grund auf neu zu starten, indem sie ihm das absolute Minimum gibt, um ein bestehendes Netzwerk wiederherzustellen, ohne alles neu paaren zu müssen.

Dafür müssen drei Dinge in der Datenbank gespeichert und ein neuer Zigbee2mqtt-Container mit denselben Parametern erstellt werden:

network_key / channel / pan_id

Die ursprüngliche Diskussion findet ihr hier:

Ja, wenn ich sage, dass man ein tar.gz erstellen soll, könnte es eine etwas sauberere und durchdachtere Lösung geben. Das hier ist ohne das Thema wirklich vertieft zu haben. :smiley:

Aber in diesem Fall wusste ich nicht, dass man das so machen kann, also definitiv eine viel bessere Lösung. :slight_smile:

Und in diesem Fall hat meine Lösung nichts mit Gladys Plus zu tun, es ist eine Lösung, die unabhängig von diesem Backup-Mittel ist.

Alles passiert in der Zigbee2mqtt-Integration, und jemand, der sein Backup manuell erstellt, muss nur eine Sicherungskopie der Datei gladys-production.db erstellen, und die Integration kann dann wieder auf die Beine kommen.

Jetzt muss es nur noch entwickelt werden.

Alle Pull Requests sind willkommen :slight_smile:

Ja, der Vorteil von Gladys ist natürlich, dass man sich nicht mehr um Backups kümmern muss :smiley:

Das sage ich meinen Vertriebskollegen​:grinning_face:

Ja, meine Methode funktioniert im Moment und ist sehr abhängig von z2m, daher wird es nicht mehr funktionieren, wenn es Änderungen gibt.

Was ich gemacht habe, war nur zum Testen und könnte vielleicht einigen Leuten helfen, bis eine viel bessere Lösung verfügbar ist.

ich kann es kaum erwarten, den Rest der Wiederherstellung zu sehen :stuck_out_tongue:

Das kommt vor, ich teste es und setze das Verfahren um.

Backup auf dem Raspberry Pi (rpi) ist okay
Ich werde es auf dem NAS wiederherstellen, aber ich habe ein paar Dinge in der Konfiguration gesehen, die ich vor der Wiederherstellung auf meiner Seite noch überprüfen muss ^^

Ich habe gerade das Tutorial zum Sichern der Zigbee-Integrationsdatenbank auf dem Raspberry Pi beendet.

Jetzt seid ihr dran, wenn ihr nicht alle eure Geräte neu paarweise verbinden wollt.

Das ist perfekt! Es hat super funktioniert!

Auf NAS muss man keine zusätzlichen Befehle ausführen, das ist cool.

Auf gar keinen Fall, danach kann man es auch per Hand machen, indem man über DSM geht und die extrahierten Dateien kopiert ^^

Hallo, ich habe versucht, die 3 für die Wiederherstellung nach einem Backup auf z2m notwendigen Informationen zu sichern.
Ich denke, zum Testen reicht es, wenn man:

  1. Eine Gladys-Instanz mit z2m konfiguriert
  2. Gladys stoppt
  3. Den Docker-Container z2m löscht/stoppt
  4. Die Informationen des Containers verschiebt/löscht
  5. Gladys startet
  6. Überprüft, ob die Datei /var/lib/gladysassistant/zigbee2mqtt/z2m/configuration.yaml dieselben « network_key / pan_id / channel » wie vorher enthält
  7. Überprüft, ob die bereits registrierten Geräte weiterhin reagieren

Da ich keinen z2m-Dongle habe, habe ich blind entwickelt.
Ich empfehle, dies in einer Testumgebung zu testen, anstatt Ihre « prod » zu opfern.

Das Image: atrovato/galdys:zigbee2mqtt

Danke, viel Glück.

:heart_eyes: Das wird vielen Leuten Freude bereiten! Vielen Dank @AlexTrovato.

Falls sich niemand freiwillig meldet, werde ich es auf meiner Seite testen, es ist wirklich eine wichtige Funktion.

Behandelst du den Fall bestehender Instanzen, die die Parameter nicht in der Datenbank haben, aber nach einem Update diese Schlüssel sichern müssen?

In der Theorie:

  1. der Container z2m existiert nicht
  • wenn keine Informationen in der DB gespeichert sind: Erstellung des Containers mit Werten, die vom Image generiert werden, dann Lesen dieser Werte zur Sicherung in der DB
  • wenn die Werte in der DB sind: Erstellung des Containers mit den gespeicherten Werten
  1. wenn der Container z2m existiert
  • Sicherung in der DB (Überschreiben, wenn die Variablen bereits existieren)

Der PR ist vorerst nur in meinem persönlichen Bereich

Ich habe die Gelegenheit genutzt, um einige Schwere in den Tests und einige Logs zu ändern.

Weiß man hier mehr?