Home Assistant verwendet eine Datenbank, um Ereignisse und Parameter für den Verlauf und die Verfolgung der Entitäten zu speichern. Die bei einer Neuinstallation verwendete Standarddatenbank ist SQLite. Die Datenbank findest du im Konfigurationsverzeichnis (z. B. config/home-assistant_v2.db) deines Home Assistant Programms. Um die Standard-Datenbankbibliothek zu ändern, musst du die Recorder-Komponente in Home Assistant einstellen. In diesem Tutorial werde ich zeigen, wie du MariaDB als Haupt-SQL-Recorder-Datenbank einrichtest. In diesem Tutorial werde ich zeigen, wie du MariaDB als Haupt-SQL-Recorder-Datenbank einrichtest.
Sie sehen gerade einen Platzhalterinhalt von YouTube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenInhaltsverzeichnis
Warum die Standarddatenbank ändern und optimieren?
Du fragst dich vielleicht, warum die Standarddatenbank geändert werden sollte? Warum bestimmte Entitäten in die Datenbank aufnehmen oder ausschließen, wenn ich sie alle erfassen kann? Die Antwort hängt von deiner Home Assistant-Installationsmethode, der Anzahl der Geräte, die du in HA integriert hast, und der Datenmenge ab, die du für einen bestimmten Zeitraum speichern möchten.
Obwohl die Standard-SQLite für den durchschnittlichen Benutzer in Ordnung ist und fein abgestimmt werden kann, um Entitäten für die Aufbewahrung von Aufzeichnungen einzuschließen oder auszuschließen, empfehle ich, zu einer besseren, optimierteren Datenbankbibliothek wie MariaDB zu wechseln. Sowohl SQLite als auch MariaDB sind beide relationale DBMS und dienen demselben Zweck, aber MariaDB ist besser in der Handhabung großer Datensätze , einfacherer Extraktion von Daten/Integrationen und schneller bei der Anzeige des Verlaufs.
Standardmäßig speichert Home Assistant Daten für etwa 10 Tage zur Verwendung in der Verlaufs- und Logbuch-Integration mit SQLite. Wenn du viele Geräte hast, die wiederum viele Entitäten erstellen, schreibt Home Assistant viele Ereignisse und Parameter in die .db-Datei. Dies belastet dein Speichermedium (insbesondere SD-Karten) sehr stark, da es viele E/A-Zyklen erzeugt.
Wenn du beispielsweise dein Home Assistant auf einem Raspberry Pi mit einer SD-Karte ausführst, ist der Kartenausfall keine Frage von WIRD ES AUSFALLEN, sondern eine Frage von WANN WIRD ES AUSFALLEN? Der Recorder ist der Hauptschuldige für den Absturz einer Home Assistant-Instanz, die von einer SD-Karte ausgeführt wird.
In erster Linie empfehle ich Home Assistant durch häufige Backups zu speichern.
Zweitens empfehle ich den Wechsel zu einem SSD-Laufwerk anstelle einer SD-Karte. Da der Raspberry Pi kein integriertes SSD-Dock im Inneren hat, musst du ihn extern mit einem USB-zu-SATA-Adapter installieren. Oder du verwendest, so wie ich, eine virtuelle Maschine, auf der du Home Assistant betreibst.
Rekorder vs. Historie vs. Logbuch
Bevor ich mit diesem Tutorial fortfahre, halte ich es für wichtig, den Unterschied zwischen der Recorder, der Historie und der Logbuch – Integration von Home Assistant zu verdeutlichen.
- Die Recorder -Integration ist für das Speichern von Ereignissen, Zuständen und Daten in der Haupt-SQL-Datenbank verantwortlich.
- Die Historie -Integration ist für die Anzeige von Daten aus dem Rekorder in der Benutzeroberfläche mithilfe von Google Graphs verantwortlich
- Die Logbuch- Integration ist dafür zuständig, Änderungen und Ereignisse in einer rückwärts chronologisch sortierten Liste anzuzeigen
Die wichtigsten Dinge, die du daraus mitnehmen kannst, sind:
- Wenn der Rekorder für eine bestimmte Entität deaktiviert wird, sind der Verlauf und das Logbuch ebenfalls nicht verfügbar.
- Wenn der Rekorder für eine bestimmte Entität aktiviert ist, kannst du den Verlauf oder das Logbuch selektiv aus der Anzeige von Daten in der Benutzeroberfläche deaktivieren.
Jede dieser Komponenten verwendet dieselbe Filterlogik, um Entitäten in die Integration selbst einzuschließen/auszuschließen.
Installation und Einrichtung
MariaDB
Um MariaDB zu installieren, klickst du auf Einstellungen -> Add-ons -> Add-on Store -> MariaDB. Hier klickst du auf „Installieren“ und aktivierst die Schalter „Beim Booten starten“ und „ Watchdog “.
Öffne die Registerkarte Konfiguration, um deinen Datenbanknamen und dein Passwort einzurichten. Danach startest du Home Assistant über die die Entwicklertools neu.
Terminal und SSH
Nun startest du das Add-on Terminal und SSH (Terminal und HACS). Im Terminal installierst du Python und SQLite to Mysql mit folgendem Code:
apk add python3
apk add py3-pip
pip3 install sqlite3-to-mysql
Anschließend wird die SQLite Datenbank mit folgendem Code in die MariaDB migriert:
sqlite3mysql \
--sqlite-file /config/home-assistant_v2.db \
--mysql-database homeassistant \
--mysql-host core-mariadb \
--mysql-user homeassistant \
--mysql-password '[Passwort deiner MariaDB]' \
--ignore-duplicate-keys
Das Passwort deiner MariaDB ist einzutragen.
Nachdem der Vorgang abgeschlossen ist, kopierst du den Recorder Code und fügst diesen in der Configuration.yaml bzw. Recorder.yaml Datei ein.
db_url: mysql://homeassistant:Passwort@core-mariadb/homeassistant?charset=utf8mb4
Das Passwort deiner MariaDB ist einzutragen.
Danach startest du Home Assistant neu.
Nun kannst du überprüfen, ob deine Migration deiner Daten erfolgreich war.
Hallo,
danke für Deine Mühen. Ich wollte gerade die Datenbank migrieren. Diese Fehlermeldung bekomme ich.
2023-01-08 19:00:55 ERROR 1045 (28000): Access denied for user ‚homeassistant’@’172.30.33.1‘ (using password: YES)
Kannst Du damit etwas anfangen? Ich habe es 3x probiert.
Gruß und Danke
Robert
jetzt scheint es zu funktionieren.
Ich bin Anfang und habe zwar das Passwort ausgetauscht, aber die eckigen Klammern stehen lassen.
Danke
Habe deine Nachricht leider erst jetzt gelesen. Schön, dass es nun funktioniert.
Vielen Dank, das war sehr hilfreich!
Vielen Dank für das Feedback.
Guten Tag
Erstklassige Anleitung, vielen Dank dafür erst einmal! Wenn das Backup gleich fertig ist werde ich nach dieser Anleitung arbeiten.
Ich hätte allerdings noch ein paar Fragen…
Wie viele Tage kann bzw. sollte man Maximal speichern?
Ich hätte gerne die Daten des Stromverbrauches (Shelly3EM) ohne Speicherbegrenzung, damit ich in ein paar Jahren auch eine Statistik im Energy Tab anschauen kann.
Kann man bestimmte Logs auch für lange Zeit behalten?
Die Meisten Aufzeichnungen, wann und wie oft eine Lampe eingeschaltet wurde sind natürlich auf lange Zeit total unwichtig.
Ich habe jetzt Parallel noch die InfluxDB installiert, diese Datenbank sollte ja für die Langzeit Speicherung zuständig sein. Ich vermute aber das der Energie Tab in HomeAssistant nicht auf die Datenbank zugreift und ich nur mit z.B. Grafana die Daten auswerten könnte, ist das so korrekt?
Hallo,
Ich habe nach dieser Anleitung den Umstieg der Datenbank geschafft, allerdings sieht der Verlauf von Entitäten sehr gewöhnungsbedürftig aus es sind nur noch senkrechte bzw. waagrechte Linien erkennbar früher hatten die eher eine Kurvenform. Oder muss ich jetzt noch influx und grafana nachinstallieren?
Dieses Problem hatte ich auch gehabt. Es ist wichtig, dass keinerlei Werte in die Mariadb geschrieben werden bevor nicht migriert wurde. Ansonsten stimmen die Werte nicht.
Hallo,
Danke für die Rückmeldung, wie kann ich es beheben? gibt es da einen Tipp?
Ich habe einfach noch einmal neu gestartet. Mariadb gelöscht. Hole Assistant neu gestartet. Dann habe ich wieder mit dem Überspielen begonnen. Könntest natürlich auch vom Backup die Daten in die Datenbank migrieren.
Vielen Dank für die Beschreibung des Prozesses und das begleitende Video! Die Migration läuft ohne Fehler durch, allerdings endet es bei mir immer in einer seltsamen Darstellung der Daten, wie es oben ein anderer User schon beschrieben hat.
Ich habe es nun schon fünfmal probiert, jedes Mal das MariaDB-Addon deinstalliert, nach jeder Aktion neugestartet und drauf geachtet, dass nach dem erstmaligen Start der neu installierten MariaDB bis zum Start des Migrationsskriptes nur wenige Sekunden vergehen, damit die Datenbank noch „frisch“ ist (weil das ja wohl ein Problem zu sein scheint). Hilft aber nichts.
Gibt es noch eine bekannte Ursache, die dazu führt, dass die migrierten Daten sehr grob wirken, fast nur horizontale und vertikale Striche?
Gruß, Jochen
Komisch. Ich konnte das Problem lösen, indem ich keine Daten in die Mariadb schreiben lassen habe.
Hallo, bin auch grad dabei die Datenbank zu wechseln, Mariadb installiert, neu gestartet, dann python installiert und die sqlite3-to-mysql, allerdings beim kopieren der Daten sagt er mir „Error: Missing option ‚-f‘ / ‚–sqlite-file‘. Wenn ich die Argumente -f, -d, -h, -u, -p für file, database, host, user, passwort einfüge dann meckert er auch mit „Error: Got unexpected extra arguments (sqlit mysql mysql mysql mysql-password ignore-duplicate-keys)
Weißt du woran es liegen könnte?
Hat sich erledigt, wie immer saß das Problem vor dem Bildschirm, nun läuft es, danke für die Anleitung!
Hallo,
ich wollte die Daten nach MariaDB übernehmen und bekomme diese Fehlermeldung:
Access denied for user ‚homeassistant’@’172.30.33.1‘ (using password: YES)
Woher kommt die IP-Adresse? Kann es daran liegen?
Ich benutze das SSH & WEB Terminal. Kann das die Ursache sein?
Hast du einen Tipp für mich?
Danke
Michael
Ich hatte das Problem auch.
Es lag an Sonderzeichen im MariaDB-Passwort.
Mit einem „einfacheren“ Passwort ging es ohne Probleme
Danke für die Anleitung. Hat alles funktioniert aber leider ist meine ganze History jetzt etwas merkwürdig.
Sie sehen gerade einen Platzhalterinhalt von Standard. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen
Habs erstmal wieder zurück auf die andere Datenbank gewechselt, da die Daten mir so nicht wirklich was bringen.
Es ist wichtig, dass die Mariadb noch nicht gestartet wurde. Du kannst Mariadb löschen und alle Schritte neu durchführen.
Hallo und vielen Dank für den tollen Beitrag und das Tutorial-Video.
Ich habe versucht, die Daten zu übertragen aber leider gehen auch bei mir immer die Daten kaputt.
Ich habe folgendes gemacht:
MariaDB installiert, Skript ausgeführt (>1Std), Recorder eingeschaltet, Restart HA –> Energie Daten waren kaputt und hatten komische Uhrzeiten
sqltite Datenbank reduziert (weniger Daten aufgehoben)
MariaDB deinstalliert, MariaDB installiert, db-File dupliziert (damit dort nicht rein geschrieben wird während dem lesen), Skript mit duplika ausgeführt (~30min), Recorder eingeschaltet, Restart HA –> Energie Daten waren kaputt und hatten komische Uhrzeiten
Nun habe ich keine Idee mehr, was ich noch tun kann. Hast du noch eine Idee?
Ich hatte ja auch die Probleme. Ich konnte sie Probleme beheben, indem ich keine Daten in die Mariadb geschrieben habe.
Guten Abend 🙂
Erst einmal herzlichen Dank für das Tutorial.
Bei mir scheint es bisher (seit ca 3 Stunden) einwandfrei zu laufen.
Wie schalte ich denn den Recorder ein? Was bedeutet „keine Daten in die Mariadb geschrieben“?
Ist die db nicht dazu da, dass man Daten reinschreiben lässt?
VG
Hallo,
mein HA läuft schon eine Weile. Gerne würde ich meine Energy History (Dashboard) beim Umzug auf MariaDB behalten wollen. Bei der Migration bleibt aber der Script bei „Transferring table states“ hängen. HA hängt sich vollständig auf und man kann nur noch per hartem reboot (Netzstecker ziehen) das HA wieder zum Leben bringen. Die SQLLite DB ist ca 900MB groß.
Hat jemand einen Tipp, was hier schief läuft? Oder ist die DB einfach zu groß?
Gruß,
Dirk
Hallo,
Danke für deine tolle Anleitung. ich wollte heute meine DB migrieren scheitere aber leider schon bei der installation im terminal.
ich bekomme die Meldung:
Installing collected packages: unidecode, typing-extensions, tqdm, tabulate, simplejson, pytimeparse2, protobuf, packaging, click, mysql-connector-python, sqlite3-to-mysql
Attempting uninstall: packaging
Found existing installation: packaging 21.3
ERROR: Cannot uninstall ‚packaging‘. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
hier noch alles was angezeigt wird:
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/community/x86_64/APKINDEX.tar.gz
(1/5) Installing libbz2 (1.0.8-r4)
(2/5) Installing gdbm (1.23-r0)
(3/5) Installing mpdecimal (2.5.1-r1)
(4/5) Installing sqlite-libs (3.40.1-r0)
(5/5) Installing python3 (3.10.12-r0)
Executing busybox-1.35.0-r29.trigger
OK: 147 MiB in 103 packages
(1/7) Installing py3-six (1.16.0-r3)
(2/7) Installing py3-retrying (1.3.3-r3)
(3/7) Installing py3-parsing (3.0.9-r0)
(4/7) Installing py3-packaging (21.3-r2)
(5/7) Installing py3-setuptools (65.6.0-r0)
(6/7) Installing py3-pip (22.3.1-r1)
(7/7) Installing py3-pip-bash-completion (22.3.1-r1)
Executing busybox-1.35.0-r29.trigger
OK: 169 MiB in 110 packages
Collecting sqlite3-to-mysql
Downloading sqlite3_to_mysql-2.0.3-py3-none-any.whl (18 kB)
Collecting typing-extensions
Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)
Collecting pytimeparse2
Downloading pytimeparse2-1.7.1-py3-none-any.whl (6.1 kB)
Collecting packaging>=23.1
Downloading packaging-23.1-py3-none-any.whl (48 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.9/48.9 kB 7.2 MB/s eta 0:00:00
Collecting mysql-connector-python>=8.0.33
Downloading mysql_connector_python-8.0.33-py2.py3-none-any.whl (390 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 390.1/390.1 kB 12.4 MB/s eta 0:00:00
Collecting click>=8.1.3
Downloading click-8.1.3-py3-none-any.whl (96 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 13.2 MB/s eta 0:00:00
Collecting tqdm>=4.65.0
Downloading tqdm-4.65.0-py3-none-any.whl (77 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.1/77.1 kB 7.2 MB/s eta 0:00:00
Collecting unidecode>=1.3.6
Downloading Unidecode-1.3.6-py3-none-any.whl (235 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 235.9/235.9 kB 23.9 MB/s eta 0:00:00
Collecting tabulate
Downloading tabulate-0.9.0-py3-none-any.whl (35 kB)
Collecting simplejson>=3.19.1
Downloading simplejson-3.19.1-cp310-cp310-musllinux_1_1_x86_64.whl (142 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.0/143.0 kB 19.0 MB/s eta 0:00:00
Collecting protobuf=3.11.0
Downloading protobuf-3.20.3-py2.py3-none-any.whl (162 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.1/162.1 kB 20.8 MB/s eta 0:00:00
Installing collected packages: unidecode, typing-extensions, tqdm, tabulate, simplejson, pytimeparse2, protobuf, packaging, click, mysql-connector-python, sqlite3-to-mysql
Attempting uninstall: packaging
Found existing installation: packaging 21.3
ERROR: Cannot uninstall ‚packaging‘. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
Hallo, auch von mir danke für deine Anleitungen,
wollte heute auf MariaDb umstellen, bekomme aber genau die gleiche Meldung wie mein Vorgänger Rudi:
Installing collected packages: unidecode, typing-extensions, tqdm, tabulate, simplejson, pytimeparse2, protobuf, packaging, click, mysql-connector-python, sqlite3-to-mysql
Attempting uninstall: packaging
Found existing installation: packaging 21.3
ERROR: Cannot uninstall ‚packaging‘. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
Ich schaue mir das Problem noch einmal zu einem späteren Zeitpunkt an.
Hallo ihr lieben,
Erst einmal ganz Großen Danke für deine tolle Anleitung.
ich habe leider das selbe Problem wie Rudi und Christian P. bei der Installation findet er bereits installierte Packaging.
Mein Homeassistant läuft in einer VM auf einem Qnap.
Gruß
Alex
Hollo und erst einmal Vielen Dank für die Anleitung. Ich hatte die gleiche Fehlermeldung wie Rudi, Christian und Alex.
Was bei mir geholfen hat:
Die Pakete, wleche nciht installiert wurden manuell installieren. Bei mir z.B. mit ‚pip install mysql-connector-python‘ und ‚pip install click‘.
Das Paket packaging-23.1 ist bei mir schon installiert (HAOS).
Dann mit ‚pip install –no-deps sqlite3-to-mysql‘ das noch fehlende Paket installieren und den Check unterdrücken.
Danach sollte sqlite3mysql installiert sein und laufen. Bei mir ging es jedenfalls.
Viel Erfolg!
Gruß
Torsten
Install MariaDB and set password in HA
Start MariaDB
Make complete backup of homeassistant, copy to youre pc and unpack so you get the „home-assistant_v2.db“ file, rename it to „home-assistant_v3.db“
Install Samba and set password, start samba.
Then copy „home-assistant_v3.db“ to /config/ folder in homeassistant.
Install Terminal and SSH
Go to Terminal and SSH in HA
apk add python3
apk add py3-pip
pip3 install sqlite3-to-mysql # dit not work for me
# I use this one:
pip3 install sqlite3-to-mysql –break-system-packages
# Anschließend wird die SQLite Datenbank mit folgendem Code in die MariaDB migriert:
sqlite3mysql \
–sqlite-file /config/home-assistant_v3.db \
–mysql-database homeassistant \
–mysql-host core-mariadb \
–mysql-user homeassistant \
–mysql-password ‚[Passwort deiner MariaDB]‘ \
–ignore-duplicate-keys
image of error