Manueller Datenumzug zwischen zwei Instanzen/Installationen

  • Moin zusammen,

    ich bin stolz auf mich [aj]

    Ich habe mir am Wochenende ne neue Installation von Home Assistant hoch gezogen, da ich mein Tinker Board in Rente schicken werde ( darkside40 ist das Altersheim) und auf nem Lenovo M720q weiter fahren werde. Nun habe ich vorbildlich wie ich bin natürlich ein Backup erstellt und wollte dies in der neuen HA Instanz importieren....schlug fehl. Habe hier aber nun auch nicht lange rum gesucht und mir gesagt, was solls. Also hab ich die yaml-Dateien und Co. rüber kopiert und die Anpassung bzgl. der sich geänderten IDs über das WebUI gemacht, soweit so gut.

    (Am Rande erwähnt: Ich war sehr froh das mein zigbee2mqtt Netz mit dem kopieren der Dateien Plug&Play wieder anlief)

    Nun hatte ich aber das Problem, dass meine Statistik-Daten für bspw. den Stromzähler oder das Balkonkraftwerk nicht so einfach umzuziehen sind/waren, da diese in der Standardinstallation in der HA eigenen SQL-Datenbank stecken.
    Tante Google ist ja zum Glück meine Freunding und so bin ich auf ihn gestoßen: https://www.youtube.com/watch?v=c36dj1z78j8. Tatsächlich kannte ich das Video schon, da ich ihn öfter schaue, hatte nur die Existenz des Videos vergessen. Leider bin ich auf das Problem gestoßen, dass die Menge an Daten die ich importieren möchte (ca. 2 Jahre je Entität) zu viel für das SQLite Web Addon ist und so bin ich beim guten Onkel ChatGPT gelandet und habe mich viel mit ihm unterhalten und dabei ist folgender Ablauf draus entstanden:

    Moment mal! [bb]

    Folgendes brauchen wir um meinen langen steinigen Weg zu folgen:

    • SQLite Web Add-on in beiden HA Instanzen
    • Eine Python Umgebung, ich habe in meinem Fall Python in der Power-Shell benutzt und bin bei Windows geblieben.
    • Das Programm DB Browser forr SQLite um die HA Datenbank mit unseren fehlenden Daten füllen zu können.
    • Arbeitet am besten mit mehreren Tabs/Browser fenstern
    • Legt eure json-Exporte in einem Ordner ab und tragt diesen Pfad im Skript unter "watch_directory" ein. Das kleine r vor der Pfadangabe ist dafür da, dass Phyton unter Windows die "\" als Pfadangaben erkennt.


    Okay, jetzt können wir aber wirklich los legen und es geht wie folgt:

    • In beiden HA-Instanzen folgenden Query ausführen: (natürlich die Entität nach euren vorliegenden Sensoren entsprechend anpassen)
    SQL
    SELECT id, statistic_id
    FROM statistics_meta
    WHERE statistic_id = 'sensor.stromzahler_bkw_produced_energy';
    • Beide IDs brauchen wir. Die ID der alten HA-Instanz müssen wir in den nächsten Query-Befehl einfügen um die alten Werte zu bekommen und die ID der neuen HA-Instanz benötigen wir um die gleich exportierten Daten mit den Entitäten in HA zu verknüpfen. Der nächste Query Befehl lautet:
    SQL
    SELECT *
    FROM statistics
    WHERE metadata_id = 85;
    • Nun die angezeigten Werte als JSON-Datei exportieren und in dieser Datei die ID mit Suchen & Ersetzen austauschen und speichern.
    • Nun könnte ihr das beigefügte Python Skript benutzen (die Dateiendung von .txt noch auf .py ändern) und alle JSON-Dateien in einem Ordner in die richtigen SQL Befehle umwandeln lassen. Hierbei wird für jede JSON-Datei eine SQL-Datei erstellt, den Inhalt der SQL-Dateien brauchen wir dann gleich.
    • Nun brauchen wir die SQL-Datenbank von der neuen HA-Instanz um die Dateien dort einfügen zu können. Hierfür solltet ihr HA beenden, müsst aber natürlich noch an die Datenbank ran kommen. Je nachdem wie ihr HA laufen habt müsst ihr schauen wie ihr das am besten bewerkstelligt. Ich habe den Weg gewählt mich per SSH mit root Zugriff einzuwählen und mit dem Befehl ha core stop den Dienst "Home Assistant" zu beenden und die Datenbank frei zu geben.
    • Ihr öffnet die Datenbank nun im DB Browser for SQLite und fügt die Inhalte der erstellten SQL-Dateien (die INSERT-Befehle) einfach in dem Reiter "SQL ausführen" ein und klickt dann auf den blauen Play-Button.
    • Sobald er aufhört zu rödeln könnt ihr die Datenbank speichern (Änderungen schreiben oder Strg + S) und über Datei --> Datenbank schließen die Datenbank wieder frei geben.
    • Nun kopiert ihr die angepasste Datenbank wieder auf eure HA Instanz und startet mit ha core start den Dienst wieder
    • Voilà ihr habt eure historischen Werte in der neuen HA Instanz --> Hinweis: Es könnte sein das ihr euren Browsercache leeren müsst/das WebUI mit leerem Cache neu laden müsst, da die Anzeigen gecached werden.


    Auf diesem Weg könnt ihr natürlich auch Dateien zusammen führen. Wie im verlinkten Video könnte es ja sein, dass ihr für ein und dieselbe Aufgabe mal ein neues Gerät besorgt habt, sich die Entitäts-IDs aber unterscheiden und ihr für historische Daten immer auf eine andere Entität umschwenken müsst. Hiermit könntet ihr die alten Daten auf die neue Entität schreiben und die Altlast entsorgen [aq]

    Viel Spaß euch damit, sofern es jemals jemand braucht xD

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!