Eigentlich wollte ich anfangs nur die InfluxDB kennenlernen, dabei hab ich mich aber auch gleich noch mit dem HA-Recorder und ein paar anderen Dingen beschäftigt.
Da das alles irgendwie zusammen gehört, hab ich es hier auch entsprechend gemeinsam gepostet.
Wer sich für diese Einleitung nicht interessiert, der kann direkt zu Post 2 weiterspringen, wo die Installation der InfluxDB beschrieben ist.
Teil 1: HA-Recorder, SQLite und Alternativen
Teil 2: InfluxDB - Installation
Teil 3: InfluxDB - erste Queries
Teil 4: InfluxDB - Retention Policies (RPs) und Continuous Queries (CQs)
Teil 5: Grafana
Es gibt ein Community Add-On, um InfluxDB (v1) intern eingebettet in HA zu installieren, inkl. Chronograf & Kapacitor (Verwaltungstool & Verarbeitungs-Engine)
ein Influxdb V2 Repository Add-On von Daniel Oldberg, um InfluxDB (v2) intern zu installieren (da sind Chronograf & Kapacitor nicht mehr getrennte Tools),
und eine Integration, um eine externe InfluxDB (v1 oder v2) mit HA zu verbinden.
InfluxDB speichert die Daten.
Chronograf bietet eine Benutzeroberfläche für die Verwaltung und Visualisierung.
Kapacitor verarbeitet die Daten und löst z.B. Alarme aus.
Bevor ich die InfluxDB installiere, möchte ich mir noch einen Überblick verschaffen, wie HA mit einer DB umgeht.
Informationen dazu erhoffe ich mir vom Recorder, der History, der Statistics Integration, möglicherweise auch noch von der Logbook card.
Der Recorder zeichnet Daten auf und verwendet dafür die integrierte SQLite Datenbank, die aus einer einzigen Datei besteht.
Etwas verwirrend wird überall geschrieben, dass nach 10 Tagen die Daten gelöscht (purged) werden, das ist aber nur die halbe Wahrheit.
Es gibt 2 Datenbereiche, das Kurzzeitgedächtnis, wo jeder Statuswechsel 10 Tage erhalten bleibt,
und das Langzeitgedächtnis (long term statistics) wo die Daten im 1h Intervall unbegrenzt erhalten bleiben.
In der History sieht man daher die letzten 10 Tage fett und die älteren Daten dünn dargestellt.
Laut Doku landen aber nur Sensordaten mit SensorStateClass.MEASUREMENT, TOTAL oder TOTAL_INCREASING in den Langzeit-Statistiken.
Leider hatte ich alle meine Template-Sensoren im alten Format erstellt, und nur das neue unterstützt state_class.
Hier ist eine Anleitung, wie man das ändern kann.
Das 10 tägige Kurzzeitgedächtnis des Recorders kann man ebenfalls sehr leicht ändern, wobei nicht geraten wird, zu viele Tage aufzuheben, da die SQLite-Performance rasch an die Grenze kommt. Ich hab auch noch gleich ein paar Sensoren von der Aufzeichnung ausgenommen, für die ich keine Recorder-Daten benötige.
Neben der Default Datenbank SQLite kann der Recorder auch noch 3 andere Datenbanken verwenden.
MariaDB (deutlich leistungsfähiger als SQLite)
Dafür gibt es sogar ein Add-On, um diese direkt in HA zu installieren, die anderen beiden können nur extern installiert werden.
MySQL (sehr ähnlich zu MariaDB, hat für Privatanwender aber eher Nachteile, z.B. fehlende JSON-Funktionen)
PostgreSQL (mehr Möglichkeiten als MariaDB, z.B. TimescaleDB Erweiterung für Zeitreihen)
Es gibt auch noch ein Add-On für SQLite Web, damit kann man in der internen SQLite Datenbank etwas herumstöbern.
Achtung: Ich würde hier nur lesen und weder auf den Insert-Button und schon gar nicht auf den Drop Button klicken.
Hier ein paar interessante Queries, die man direkt im Query-Bereich von SQLite Web eingeben kann:
Hier kann man recht gut erkennen, welche Sensordaten sich sehr häufig ändern.
Bei mir sind es die Up/Download-Geschwindigkeiten der Fritzbox, die alle 30s geschrieben werden.
Noch deutlicher sieht man die High-Score Sensoren bei dieser Query:
Obwohl ich SQL recht gut beherrsche, hab ich mir diese Queries von ChatGPT erzeugen lassen, das geht einfach viel schneller.
Beim Umstieg von SQLite auf eine der 3 anderen DBs findet man eine Warnung in der Doku: die Daten werden dabei nämlich nicht migriert. Entweder entscheidet man sich also dafür, bevor man HA produktiv einsetzt, oder man muss sich selbst um die Migration der Daten kümmern.
Ich war anfangs etwas verwirrt, warum es zwar ein InfluxDB Add-On gibt, der Recorder aber mit InfluxDB gar nicht umgehen kann.
InfluxDB ist also nicht dafür geeignet, SQLite zu ersetzen, sondern wird parallel dazu eingesetzt - wozu genau, das wollen wir später erkunden.
Noch ein Hinweis zur InfluxDB Version.
Das offizielle Add-On installiert die V1, das ist die Variante, die ich hier beschreibe.
Ein nicht offizielles Add-On installiert die V2, das geht aber nur über ein eigenes Repository
Die Integration spricht mit einer externen V1 oder V2.
Die Abfragesprachen unterscheiden sich, bei V1 wird meist InfluxQL verwendet, bei V2 Flux.
Ein Umstieg von V1 auf V2 ist daher eine etwas größere Aufgabe.
Flux bietet zwar Vorteile bei Datenverarbeitungs-Pipelines, für SQL-kundige ist InfluxQL aber verständlicher.
Es gibt mit Prometheus noch eine weitere bekannte Zeitreihen-DB, diese verwendet PromQL als Abfragesprachen und ist ebenfalls mit Grafana kompatibel. Es gibt dafür auch eine HA-Integration, und es gab auch mal ein Add-On, das jedoch nicht mehr gepflegt wird.
Es gibt auch noch andere Lösungen, um (vor allem Energie-) Daten zu speichern und zu visualisieren, wie z.B. Emoncms mit dessen HA-Integration, aber ich möchte nicht mehr zu viel abschweifen, und wieder zur InfluxDB zurückkommen.
Da das alles irgendwie zusammen gehört, hab ich es hier auch entsprechend gemeinsam gepostet.
Wer sich für diese Einleitung nicht interessiert, der kann direkt zu Post 2 weiterspringen, wo die Installation der InfluxDB beschrieben ist.
Teil 1: HA-Recorder, SQLite und Alternativen
Teil 2: InfluxDB - Installation
Teil 3: InfluxDB - erste Queries
Teil 4: InfluxDB - Retention Policies (RPs) und Continuous Queries (CQs)
Teil 5: Grafana
Es gibt ein Community Add-On, um InfluxDB (v1) intern eingebettet in HA zu installieren, inkl. Chronograf & Kapacitor (Verwaltungstool & Verarbeitungs-Engine)
ein Influxdb V2 Repository Add-On von Daniel Oldberg, um InfluxDB (v2) intern zu installieren (da sind Chronograf & Kapacitor nicht mehr getrennte Tools),
und eine Integration, um eine externe InfluxDB (v1 oder v2) mit HA zu verbinden.
InfluxDB speichert die Daten.
Chronograf bietet eine Benutzeroberfläche für die Verwaltung und Visualisierung.
Kapacitor verarbeitet die Daten und löst z.B. Alarme aus.
Bevor ich die InfluxDB installiere, möchte ich mir noch einen Überblick verschaffen, wie HA mit einer DB umgeht.
Informationen dazu erhoffe ich mir vom Recorder, der History, der Statistics Integration, möglicherweise auch noch von der Logbook card.
Der Recorder zeichnet Daten auf und verwendet dafür die integrierte SQLite Datenbank, die aus einer einzigen Datei besteht.
Etwas verwirrend wird überall geschrieben, dass nach 10 Tagen die Daten gelöscht (purged) werden, das ist aber nur die halbe Wahrheit.
Es gibt 2 Datenbereiche, das Kurzzeitgedächtnis, wo jeder Statuswechsel 10 Tage erhalten bleibt,
und das Langzeitgedächtnis (long term statistics) wo die Daten im 1h Intervall unbegrenzt erhalten bleiben.
In der History sieht man daher die letzten 10 Tage fett und die älteren Daten dünn dargestellt.
Laut Doku landen aber nur Sensordaten mit SensorStateClass.MEASUREMENT, TOTAL oder TOTAL_INCREASING in den Langzeit-Statistiken.
Leider hatte ich alle meine Template-Sensoren im alten Format erstellt, und nur das neue unterstützt state_class.
Hier ist eine Anleitung, wie man das ändern kann.
Das 10 tägige Kurzzeitgedächtnis des Recorders kann man ebenfalls sehr leicht ändern, wobei nicht geraten wird, zu viele Tage aufzuheben, da die SQLite-Performance rasch an die Grenze kommt. Ich hab auch noch gleich ein paar Sensoren von der Aufzeichnung ausgenommen, für die ich keine Recorder-Daten benötige.
HTML-Code:
recorder: purge_keep_days: 15 exclude: entity_globs: - sensor.flightradar* - sensor.spritpreis*
MariaDB (deutlich leistungsfähiger als SQLite)
Dafür gibt es sogar ein Add-On, um diese direkt in HA zu installieren, die anderen beiden können nur extern installiert werden.
MySQL (sehr ähnlich zu MariaDB, hat für Privatanwender aber eher Nachteile, z.B. fehlende JSON-Funktionen)
PostgreSQL (mehr Möglichkeiten als MariaDB, z.B. TimescaleDB Erweiterung für Zeitreihen)
Es gibt auch noch ein Add-On für SQLite Web, damit kann man in der internen SQLite Datenbank etwas herumstöbern.
Achtung: Ich würde hier nur lesen und weder auf den Insert-Button und schon gar nicht auf den Drop Button klicken.
Hier ein paar interessante Queries, die man direkt im Query-Bereich von SQLite Web eingeben kann:
HTML-Code:
SELECT s.state_id, s.state, sm.entity_id, datetime(s.last_reported_ts, 'unixepoch', 'localtime') AS timestamp FROM states s JOIN states_meta sm ON s.metadata_id = sm.metadata_id ORDER BY s.last_reported_ts DESC;
Hier kann man recht gut erkennen, welche Sensordaten sich sehr häufig ändern.
Bei mir sind es die Up/Download-Geschwindigkeiten der Fritzbox, die alle 30s geschrieben werden.
Noch deutlicher sieht man die High-Score Sensoren bei dieser Query:
HTML-Code:
SELECT sm.entity_id, COUNT(s.state_id) AS state_count FROM states s JOIN states_meta sm ON s.metadata_id = sm.metadata_id GROUP BY sm.entity_id ORDER BY state_count DESC LIMIT 10;
Obwohl ich SQL recht gut beherrsche, hab ich mir diese Queries von ChatGPT erzeugen lassen, das geht einfach viel schneller.
Beim Umstieg von SQLite auf eine der 3 anderen DBs findet man eine Warnung in der Doku: die Daten werden dabei nämlich nicht migriert. Entweder entscheidet man sich also dafür, bevor man HA produktiv einsetzt, oder man muss sich selbst um die Migration der Daten kümmern.
Ich war anfangs etwas verwirrt, warum es zwar ein InfluxDB Add-On gibt, der Recorder aber mit InfluxDB gar nicht umgehen kann.
InfluxDB ist also nicht dafür geeignet, SQLite zu ersetzen, sondern wird parallel dazu eingesetzt - wozu genau, das wollen wir später erkunden.
Noch ein Hinweis zur InfluxDB Version.
Das offizielle Add-On installiert die V1, das ist die Variante, die ich hier beschreibe.
Ein nicht offizielles Add-On installiert die V2, das geht aber nur über ein eigenes Repository
Die Integration spricht mit einer externen V1 oder V2.
Die Abfragesprachen unterscheiden sich, bei V1 wird meist InfluxQL verwendet, bei V2 Flux.
Ein Umstieg von V1 auf V2 ist daher eine etwas größere Aufgabe.
Flux bietet zwar Vorteile bei Datenverarbeitungs-Pipelines, für SQL-kundige ist InfluxQL aber verständlicher.
Es gibt mit Prometheus noch eine weitere bekannte Zeitreihen-DB, diese verwendet PromQL als Abfragesprachen und ist ebenfalls mit Grafana kompatibel. Es gibt dafür auch eine HA-Integration, und es gab auch mal ein Add-On, das jedoch nicht mehr gepflegt wird.
Es gibt auch noch andere Lösungen, um (vor allem Energie-) Daten zu speichern und zu visualisieren, wie z.B. Emoncms mit dessen HA-Integration, aber ich möchte nicht mehr zu viel abschweifen, und wieder zur InfluxDB zurückkommen.
Kommentar