Langzeitdatenspeicherung

Hallo zusammen

Home Assistant speichert die Daten aus den Entitäten ungefähr 20 Tage (oder so) und speichert diese in einer SQLite Datenbank. Diese ist bekanntlich fehleranfällig und sonst nicht so der Hit. Simon zeigte wie man die Daten über die MariaDB speichern kann. Soweit so gut. Es gibt nun mehrere Möglichkeiten die Langzeitdaten zu speichern. Einerseits via ImfluxDB oder via MariaDB. Hierzu müsste im der Configuration.yaml folgende Werte angepasst werden.

recorder:
  db_url: !secret mariaDB_link
  auto_purge: true
  purge_keep_days: 365

Damit speichert MariaDB die Daten für ein Jahr. Die Daten, egal ob über InfluxDB oder MariaDB, können via Grafana ausgewertet und visualisiert werden.

Meine Frage: welche Methode ist zielführender, welche wird von euch bevorzugt und warum?

1 „Gefällt mir“

Diese Frage beschäftigt mich auch sehr!

@guezli Warum beschränkst du es denn auf 1 Jahr?

Ich würde am liebsten alles und für immer speichern, solange man keine Probleme mit dem Speicher bekommt.

Oder eine Funktion bei der man einstellen kann welche Daten wie lange gespeichert bleiben sollen.

Z.B. Temperatur & Luftfeuchtigkeit im Haus ist wirklich max. 1 Jahr sinnvoll, aber Außentemperatur & Luftfeuchtigkeit würde ich schon gerne für immer nutzen.
Aber auch die Daten meiner PVA immer zu haben um über Jahre rückwirkend vergleichen zu können, wäre eine feine Sache.
Die Informationen wann ich welchen Taster betätigt habe, bräuchte ich vermutlich auch nur paar Wochen.

Meine ganze Hardware für das SmartHome ist von Homematic und hierfür habe ich ccu-historian im Container laufen. Dadurch logge ich pauschal alles was in HM steckt. Jetzt habe ich aber so viele Schnittstellen in HA drin und müsste alle Daten "manuell" in HM speichern um diese in ccu-historian zu bekommen.
Das ist nicht so cool.

Mich würde sehr interessieren wie man es schafft die MariaDB von HA dazu zu bekommen alles für so lange wie möglich zu speichern.
Am liebsten würde ich auch alle gespeicherten Daten aus der ccu-historian DB in die HA DB zu überführen.

Gruß
Tower

@tower

Der Default-Wert bei MariaDB ist in HA 20 Tage. Ich dachte mal an ein Jahr ist mal ein Richtwert, bis ich weiss was ich wo speichern möchte. Ich zeichne nun seit gut 8 Wochen auf und die Datenbank ist bereits 2GB schwer. Ein Jahr könnte so um die 24 GB zu Buche schlagen. Ich denke dass man bei dieser Datenmenge sich wirklich gut Gedanken macht, welche Daten es wofür braucht. Nur hapert es bei mir mangels Grundkenntnisse.

Ich habe meine DB mit " auto_purge: false" erstmal dazu gebracht nichts weiter zu löschen.

Ich behaupte mal, dass man manuelle die DB nach 1-2 Jahren bereinigen könnte.
Die Verbindung zur DB und dann mit wenigen Befehlen die unnötigen Daten löschen, sollte sicherlich nicht so schwer sein. Aber bestimmt auch nicht ganz sauber.

Zielt deine Frage darauf hinaus ob InfluxDB oder MariaDB besser ist für die Langzeitauswertung?

@tower ja, genau. Welches der beiden Systeme (oder ein anderes) eignet sich besser.

Ich habe da auch keine Erfahrungen.

Aber wenn ich mir die Doku von HA anschaue, wird es nicht als recorder unterstützt.
Aber Hier scheint es eine Implementation zu geben.
Habe es mir nicht vollständig durchgelesen, aber ich frage mich ob diese Implementation den recorder ablöst, oder parallel läuft (macht vermutlich kein Sinn).

Ich weiß nicht wie "seriös" IONOS ist, aber Hier ließt es sich als würde InfluxDB perfekt für diesen Zweck zu sein.

Ich denke es ist ein Versuch wert es einfach mal auf einer parallelen Instanz einzurichten.

Das möchte ich auch noch implementieren, bin mir aber auch noch nicht sicher wie. Schaue mir hierzu gerade auch videos zu unfluxdb und Grafana an.

Auf der einen Seite möchte ich viele Daten nicht ewig haben.

Auf der anderen Seite interessiert mich aber mein Einschaltverhalten & Nutzungsverhalten.

Ich möchte nicht wissen wann genau meine Wohnzimmerlampe eingeschaltet war.

Andersrum interessiert mich aber wie lange die Lampe gebrannt hat. So kann man sich dann ohne Energiemessung zumindest einen Anhaltspunkt für ein Energie Dashboard erzeugen. Zumindest für so statische Verbraucher.

Also interessiert mich nach ca 30 Tagen nicht mehr wann genau ich ein Fenster geöffnet habe. Aber so ein Counter der die Anzahl pro Monat oder sowas mit schreibt schon wieder.

Da fehlt mir bei influxdb noch der Überblick was ich genau wie anlegen kann. Ich denke ich versuche erst mal das ganze ans laufen zu bringen und logge alles mit. Was ich dann nach dem ersten Jahr noch behalten möchte oder in Zukunft nicht mehr benötige sehe ich dann ja.

Ein bisschen hoffe ich da noch auf ein video von @simon42

Wenn man sich die Doku zur influxDB anschaut dann stolpert man über folgende Notiz:

The influxdb database integration runs parallel to the Home Assistant database. It does not replace it.

und:

There is currently support for the following device types within Home Assistant:

Also zu Testzwecken kann man sich ja die DB wirklich ohne weiteres einrichten...

Aber man kann halt nicht alles speichern.

@meistermolli
Vielleicht kannst du ja den recorder mit 'exclude' oder 'include' so konfigurieren um gezielte Daten zu sammeln, oder ggf. kannst du dir ja ein paar Entitäten erstellen die genau die Daten sammeln die du gerne visualisieren möchtest.

Hallo, das Thema Langzeitspeicherung steht auch noch auf meine ToDo Liste. Ich finde den Gedankenansatz eigentlich sehr gut, meine Langzeitspeicherung auf einer zusätzlichen influxDB auszulagern. Nach meinen Recherchen eignet die sich bezüglich Ihres Platzbedarfes besonders gut für solche Massendaten, weil es eine Zeitreihendatenbank ist, die sich grundsätzlich von einer mariaDB unterscheidet.

Der sinnvollste Weg müsste eigentlich sein, nur ausgewählte Daten in die in die influxDB zu schreiben (Infos zu diesem Thema https://smarthomescene.com/guides/optimize-your-home-assistant-database/), um die aktive mariaDB nicht aufzublasen, bis sie immer träger wird oder später die influxDB aufräumen zu müssen, weil zu viel Müll gespeichert wurde.

Da stellt sich mir dann noch die Frage kann ich mit Grafana ggf. aus zwei DB´s Daten für eine Grafik parallel nutzen oder muss ich für den Zeitraum indem ich in der maraDB die Daten halten, alles doppelt speichern?

Es scheint auf jeden Fall ein Thema zu sein, in dem man aktuell für die manuell Umsetzung sehr viel Zeit investieren muss. Eine fertige Lösung konnte ich noch nicht finden. Vielleicht haben ja andere mehr Glück.

1 „Gefällt mir“

Also tendierst du auf InfluxDB für die Langzeitdatenspeicherung. Wie lange würdest du die Daten auf der MariaDB vorhalten? 60 Tage? 90 Tage? Ein Jahr? Die 20 Tage als Default finde ich persönlich etwas mager.

Die Frage kann ich dir so nicht beantworten. Ich selbst habe noch keine Datensammlung über 30, 60 Tage oder mehr, da ich gerade selber in das Thema HA einsteige.

Ich glaub auch nicht, dass man diese Frage so einfach beantworten kann, da die Antwort von mehreren Faktoren abhängig ist. Zunächst müsste man mal betrachten, wie viele Entitäten in meinem HA laufen. So wie ich das bis jetzt verstanden habe, werden im HA immer alle Entitäten geloggt. Da könnte man sich mal ansehen, was für einen DB Zuwachs man in 24 Std. oder 7 Tagen hat. Dann muss ich mir überlegen, was z.B. in den nächsten 12 Monaten noch an Hardware dazu kommen wird. Wobei je nach Hardware die Menge der Entitäten sehr unterschiedlich ausfallen kann. Damit hätten wir erst einmal eine Einschätzung der laufenden Daten Zuwachses in der DB.

Als nächstes stellt sich die Frage, wie ist das Geschwindigkeitsverhalten einer mariaDB auf der eingesetzten Hardware. Braucht die DB mehr Hauptspeicher, wenn sie größer wird? In meiner Installation, auf einer VM ist das kein Problem, aber auf anderen Plattformen könnte das natürlich ein Problem werden. Ich gehe davon aus, dass wenn die DB träger wird, durch die Menge der gehaltenen Daten, auch der HA darunter leiden wird, da in der DB ja nicht nur die Logs gespeichert werden und die CPU nicht unendlich Power hat.

Vielleicht gibt es ja User, die in der mariaDB, Daten von einem oder mehreren Jahren haben und mal hier berichten können.

@mickysoft

Ich speichere bereits seit einem Monat die Daten. Die Datenbank ist inzwischen knapp 2.GB gross. Hochgerechnet wären dies 24 GB im Jahr... Ich könnte also knappe 10 Jahre Daten speichern bis die Disk voll wäre. Power sollte ich eigentlich genügend haben. Meine NUC hat einen i5 Prozessor und 16 GB Ram und eine 240GB SSD.

image.png

Hallo, @Guezli,

damit man Vergleichswerte für seinen eigenen Speicherbedarf ermitteln kann, wäre es interessant zu wissen, wie viele Entitäten in deinem HA laufen. Dann könnte man für seinen eigene HA Installation eine Verhältnisrechnung erstellen.

Wenn man die je nach Hardwareplattform ggf. auftretenden Probleme mit RAM oder Speicherplatz außer Betracht lässt, stellt sich mir direkt weitere Fragen.

Kann ich die über die Zeit auflaufenden Datensätze mit Grafana auf meiner Hardware überhaupt auswerten?

Nehmen wir mal an, dass wir 150 Entitäten im HA haben, die jede pro Minute jeweils einen Datensatz mit einer Reihe von Attributen speichern. Dann wären das am Tag 216.000 Sätze, in der Woche 1.5 Millionen und im Jahr 78 Mil. Datensätze.

Mit Grafana selber habe ich keine Erfahrung. Bezüglich dem, was ich darüber gelesen habe, gehe ich davon aus, dass Grafana solche Datenmengen verarbeiten kann. Aber auf unserer Hardware? Was hilft es, wenn ich eine riesige Menge von Daten habe, die ich dann doch nicht in meiner HA Oberfläche auswerten kann, weil die CPU die Flügel streckt?

Da kommt dann auch wieder die Frage, wie gut ist eine mariaDB gegenüber der InfluxDB in der Zusammenarbeit mit Grafana, bei diesen Datenmengen abschneidet, da diese DB ja speziell für die Erfassung von Zeitreihen ist und sehr oft im Zusammenspiel mit Grafana genannt wird.

Da ich erst seit kurzem meinen HA aufbaue, stelle ich natürlich die Frage, ob mein Gedankenansatz überhaupt richtig ist. Vielleicht sind meine Befürchtungen ganz fehl am Platz? Gibt es hier Grafana-Spezialisten, die schon mal solche Datenmengen in einer HA Hardwareumgebung visualisiert haben?

@mickysoft

Ich bin auch absoluter Neuling. Letzten August begann ich mich mit HA auseinanderzusetzen und in Betrieb zu nehmen.

Wenn die eingegebene Formel richtig war, sind bei mir 1251 Entitäten aktiv (inkl. Automationen). Meine Erfahrungen mit Grafana sind Null. Ich richtete dort die InfluxDB und die MariaDB ein und erstellte mal eine Darstellung. Damit bin ich aber schon überfordert. Mein nächstes Ziel wäre mich in dieses Thema einzuarbeiten. Bis dann, sammle ich mal Daten. 😊

Grob überschlagen produziert mein System ungefähr 150 Datenpunkte die Minute. (7.** Mio / 34 Tage / 24 / 60). Da liegst du mit deinen mit deinen 78 Mio Einträge pro Jahr nicht falsch.

So hab ich das auch gemacht.

Zum Jahreswechsel InfluxDB installiert und konfiguriert um erstmal alle Daten zu sammeln.

InfluxDB verfeinern und Grafana zur Auswertung können erstmal warten.

Hauptsache die Daten sind safe.

Es scheint hier ja leider noch keinen User zu geben, der mit dem Thema Erfahrung hat. Daher werde ich auch erstmal die influxDB installieren und weiter nach einer umsetzbaren bzw. umgesetzten Lösung suchen. Die 30 Tage doppelte Datenhaltung sind nicht schön, aber zu verschmerzen.

Hallo @tower,

hier gibt es die Möglichkeit Einzugrenzen was du in der InfluxDB an Daten speicherst https://youtu.be/X9kxywKX48E?t=424

@Mickysoft
Ich sehe in deinem letzten Post tatsächlich nur den Text.
Vermutlich blockt mein Pihole den Inhalt.

Unabhängig davon tendiere ich eher dazu so viel wie möglich zu loggen, da Speicherplatz nicht so teuer ist. Was mich stören würde wäre wenn die Performance darunter leidet.

Ich habe mir jetzt auch die InfluxDB + Grafana im Docker eingerichtet und die Daten trudeln auch schon fleißig ein.

Doppelte Datenhaltung wäre für mich jetzt auch nicht das Problem. In Home Assistant vielleicht für 6 Monate und in der InfluxDB dann alles.

Nochmal kurz zu meiner Erfahrung mit CCU-Historian.
Ich nutze es schon über 2,5 Jahre und ich habe jede Menge Aktoren und Sensoren und Variablen usw. (Wieviel insgesamt müsste ich mal erfassen, ist jedenfalls ein komplettes Haus) und die Datenbank liegt jetzt bei 4,12GB. Also sehr überschaubar.

Das Tool nutzt eine nette Funktion (Vorverarbeitung aller Wertaktualisierungen).

Die Wertaktualisierungen aller Datenpunkte durchlaufen eine Vorverarbeitung bevor sie in der Datenbank abgelegt werden. Die Vorverarbeitung dient dazu, die anfallende Datenmenge zu reduzieren indem unnötige Wertaktualisierungen verworfen werden und/oder bestimmte Bereinigungsfunktionen auf den Werteverlauf eines Datenpunktes anzuwenden.

So eine Funktion für die HA Datenbanken wäre 1A!

Das mit den ganzen Datenpunkten hat mich zum Nachdenken angeregt.

Kann man diese Daten nicht bereinigen?

Es bringt mir ja nichts wenn in der Datenbank ein Fensterkontakt niedergeschrieben ist und da für jede Minute der Wert geschlossen steht. und das Diagramm dann entsprechend viele Datenpunte mit dem identischen Wert geschlossen hat.

In der Theorie würde ich dann ja gerne erst die nächste Statusmeldung erst wieder in die Datenbank schreiben?

@meistermolli,

Nachdem ich mit anderen Leuten über Messdatenerfassung gesprochen habe, gehe ich nicht mehr davon aus, dass zwingend von jeder Entität jede Minute ein Datensatz erzeugt wird, sondern nur pro Minute ein Datensatz von den Entitäten kommt, deren Werte sich geändert haben. Weitere Daten zu erfassen, macht keinen Sinn, da diese ja keine Veränderung des Messwertes oder des Zustandes dokumentieren.

Ich gehe davon aus, dass man die Logdatei schon bereinigen kann, kann dir aber mangels Wissen nicht weiterhelfen, weil man je nach DB wissen muss, wie man filtert und löscht. Außerdem sollte man schon genau wissen, was man da löscht. Vielleicht ist es erst einmal sinnvoll, das weitere Speichern von Messwerten auf sinnvoll einzuschränken.