Home-Assistant Sensorwerte in einer InfluxDB abspeichern und mit Grafana visualisieren

Wer sich wie ich länger mit Home-Assistant beschäftigt, mehr und mehr Sensoren hinzufügt und somit eine größere Menge an Daten sammelt, möchte diese vielleicht auch außerhalb von Home-Assistant visualisieren können. Home-Assistant speichert die Messdaten standardmäßig in einer SQLite Datenbank ab. Ich nutze hier schon eine SQL Datenbank (mariaDB auf einem NAS) anstelle der SQLite Datenbank, einfach um die SSD des Home-Assistant Hosts nicht übermäßig zu belasten.
Man könnte bereits die Daten der SQL Datenbank mit einem Programm, wie zb. Grafana visualisieren, allerdings speichert HA die Daten nur für einen begrenzten Zeitraum (im Standard werden glaube ich 7 Tage gespeichert). Der Zeitraum kann natürlich vergrößert werden, das führt aber zum einen dazu, dass die Datenbank sehr schnell sehr groß werden würde und zum anderen würde HA beim darstellen des Logbuchs oder des Verlaufs sehr lange laden.
Für Mess- oder Sensordaten eigenen sich daher Time-Series Datenbanken wie InfluxDB, Graphite oder auch Prometheus besser. Sie speichern den Mess- oder Sensorwert inklusive des Messzeitpunkts ab. Ein großer Vorteil dieser Datenbanken ist die Geschwindigkeit in der sie die Daten verarbeiten können. Meist handelt es sich auch um einfache Tabellen mit wenigen Datenpunkten.

Sensor Wert Zeit
Sensor 1 8,3 2022-01-10@10:00
Sensor 2 11,3 2022-01-10@10:00
Sensor 1 9,5 2022-01-10@10:05
Sensor 2 -3,4 2022-01-10@10:05

Hier werden ledglich drei Datenpunkte erfasst: der Name des Sensors, der Messwert und der Zeitpunkt. Zudem kann man in einer InfluxDB auch den Zeitraum über den die Daten gespeichert werden sollen festlegen.
Aber nun erst mal genug zur Theorie. Ich möchte euch heute zeigen, wie man eine InfluxDB Datenbankanwendung erstellt, die eigentliche Datenbank anlegt und diese mit HA verbindet. Danach werden wir mittels Grafana die Daten visualisieren.

Einrichtung InfluxDB

Zu erst benötigen wir natürlich eine Datenbank in der die Daten gespeichert werden können. Ich habe die DB auf meinem NAS (QNAP) liegen und in der Container-Station eine "App" erstellt. Die Datenbank kann natürlich auch auf jedem anderen Server / Rechner laufen, auf dem ebenfalls Docker installiert ist. Wenn ihr nicht die Container-Station benutzt, erstellt eine docker-compose.yaml mit folgendem Inhalt:

version: '2'

services:
  influxdb:
    image: influxdb:1.8
    container_name: influx_db
    restart: unless-stopped
    volumes:
      - /pfad-zur-datenbank:/var/lib/influxdb
    ports:
      - 8086:8086
    networks:
      influxdb:

  chronograf:
    image: chronograf:1.8
    container_name: chronograf
    restart: unless-stopped
    volumes:
      - /pfad-zur-config:/var/lib/chronograf
    ports:
      - 8888:8888
    command:
      "--influxdb-url=http://influxdb:8086"
    networks:
      influxdb:

networks:
  influxdb:
    external: false

Die Pfade auf dem Host müsst ihr natürlich wieder entsprechend anpassen. Wenn alles angepasst wurde, startet ihr die beiden Anwendungen mit docker-compose up -d bzw. in der Container-Station mit dem "Erstellen" Button. Docker wird nun zum einen einen Container für die Datenbankanwendung und einen für die grafische Benutzeroberfläche Chronograf - diese dient zur Verwaltung der Datenbank - erstellen.
Ich muss noch dazu sagen, dass ich InfluxDB "nur" in der Version 1.8 verwende. Die Version 2 bringt einige Änderungen mit, die ich mir noch nicht näher angeschaut habe. Es ist daher wichtig, dass das korrekte Image für InfluxDB ausgewählt wird. Mit der "latest" Version von InfluxDB wird das so ohne Anpassungen nicht funktionieren. Wenn das Erstellen der Container beendet ist, ruft man mit http://host-ip:8888 Chronograf auf:

Chronograf

Bild 1 von 1

Wechselt nun zur "InfluxDB-Admin" Seite. Hier erstellt ihr nun eine Datenbank für HA und auch einen User samt Passwort. Außerdem legen wir auch für Grafana einen Benutzer an. Beim Anlegen der Datenbank könnt ihr die sogenannte "Retention Policy" festlegen. Diese legt fest wie lange die Daten gespeichert werden sollen. Standardmäßig steht die Policy auf Unendlich, das habe ich auch so belassen. Ihr könnt die Daten natürlich auch nur ein Jahr, ein Monat, ein Tag, etc. behalten. Nach dem Anlegen des Users müsst ihr diesem noch die Rechte einstellen, ansonsten kann HA nicht in die Datenbank schreiben.

Create-database

Bild 1 von 2

Damit ist die Einrichtung der Datenbank abgeschlossen und wir können diese in HA einbinden.

Einbindung der Datenbank in HA

Damit HA die Daten in der InfluxDB ablegen kann, muss diese in der configuration.yaml angegeben werden:

# InfluxDB Storage
influxdb:
  host: nas-ip
  port: 8086
  database: datenbank
  username: user
  password: !secret influxdb_pwd
  ssl: false
  max_retries: 3
  default_measurement: state
  exclude:
    domains:
      - automation
      - weblink
      - updater
    entities:
     - sun.sun
     - sensor.moon
     - sensor.date_time
     - sensor.daylight
  include:
    domains:
      - sensor
      - switch
      - binary_sensor

Über die "Parameter" exclude und include bestimmt ihr dann welche Werte in der Datenbank landen und welche nicht. Ich speichere hauptsächlich Sensorwerte ab. Nach einem Neustart von HA sollten die Daten jetzt in der Datenbank landen. Falls HA die Datenbank nicht erreichen kann, oder nicht in die Datenbank schreiben kann, erfahrt ihr dies in den Logs
😉

Einrichtung von Grafana und Visualisierung der Daten

Als nächstes richten wir Grafana ein. Bei mir läuft die Anwendung auf dem Raspberry Pi auf dem auch HA läuft, prinzipiell kann die Anwendung aber auch wieder überall da laufen, wo Docker läuft. Als erstes müssen wir ein Volume für Grafana und seine Daten anlegen docker volume create grafana_data, danach könnt ihr Grafana mit dem Befehl docker run -d -p 3000:3000 --name=grafana -v grafana_data:/var/lib/grafana grafana/grafana starten. Ihr könnt natürlich auch eine Compose Datei verwenden:

version: "3.3"
services:
  grafana:
    container_name: grafana
    image: grafana/grafana
    ports:
      - 3000:3000
    user: "1000"
    volumes:
      - grafana_data:/var/lib/grafana
    environment:
      - "GF_INSTALL_PLUGINS=grafana-piechart-panel"

Ich habe noch die ID des Users Pi angegeben. Der ist aber glaube nur notwendig, wenn man anstatt eines Volumes einen Order auf dem Host verwenden möchte. Wenn ihr nun Grafana aufruft werdet ihr nach einem User und einem Passwort gefragt. Hier gibt ihr beides Mal "admin" ein und vergebt anschließend ein eigenes Passwort.

Grafana-Starrtseite

Bild 1 von 1

Nun müssen wir Grafana zunächst die Datenquelle bekannt machen. Dazu wechseln wir in die Einstellungen (Zahnradsymbol) und geben hier die Daten der InfluxDB ein.

Add-data-source

Bild 2 von 3

Wenn alle Daten eingetragen sind, zeigt ein Klick auf "Save & test" auch direkt ob die Verbindung funktioniert.
Nun können wir unser erstes Dashboard erstellen. Dazu klicken wir auf das "+" Symbol links in der Menüleiste und wählen "Dashboard" aus. Im nun geöffneten Fenster wählen wir "Add new Panel" aus und landen auf folgender Seite:

Grafana-add-new-panel

Bild 1 von 1

Wir wollen nun also unser erstes Dashboard mit Daten befüllen. Dazu ist zu sagen, dass die Daten in der influxDB nach den sogenannten "Measurements" sortiert, bzw. gruppiert werden. Wir würden es wohl als "Einheit" bezeichnen. Sprich alle Sensoren, die eine Temperatur messen, laden unter dem Measurement "°C" und alle Luftdrucksensoren findet man im Measurement "hPa" (= Hektopascal = Einheit für Druck), usw.
Wir erstellen jetzt also eine Dashboard für ein paar Temperatursensoren. Dazu wählen wir als erstes das Measurement "°C" aus, Grafana zeigt nun bereits ein Diagramm an - welchen Sensor es gewählt hat wird allerdings nicht klar. Daher klicken wir auf das "+" Symbol hinter "where" und wählen "entity_id" aus. Danach können wir uns einen speziellen Temperatursensor aus einer Dropdown-Liste auswählen:

Grafana-edit-panel

Bild 1 von 2

Grafana verbindet die Datenpunkte leider nicht automatisch mit einander, das lässt sich aber im rechten Einstellungsmenü ändern, indem ihr bei "Connect null values" den Wert von "Never" auf "Always" ändert:

Grafana-connect-null-values

Bild 1 von 1

Wenn ihr jetzt auf "Apply" und "Save" klickt habt ihr euer erstes Dashboard erstellt. Das sieht dann so aus:

Grafana-Dashboard

Bild 1 von 1

Ihr könnt in dieser Ansicht die Größe des Diagramms verändern, indem ihr mit der Maus an die Ränder fahrt, es wird euch nun eine Pfeil anstelle des Mauszeigers angezeigt und mit einem rechts Klick könnt ihr nun die Größe beliebig verändern.
Es können natürlich auch mehrere Sensorwerte in einem Diagramm dargestellt, dazu fahrt ihr mit der Maus auf den Titel des Diagramm, klickt auf den nun erscheinenden Pfeil rechts neben dem Titel und wählt "edit". Jetzt könnt ihr die bestehende Query kopieren (roter Rahmen), oder eine neue erstellen (blauer Rahmen):

Grafana-zweiter-Sensor

Bild 1 von 1

Soweit erst mal zum Einstieg. In einem weiteren Beitrag möchte ich euch zeigen, wie ihr euch Ober- oder Untergrenzen für bestimmte Werte erstellen könnt und bei über- oder unterschreiten dieser Grenzen eine Benachrichtigung erhaltet.

Ich hoffe, dass euch der Beitrag gefallen hat. Lasst gerne einen Kommentar dar und wenn ihr Lust auf weitere Spannende Projekte rund um Home-Assistant habt, oder einfach mit mir und anderen Smart-Hommies diskutieren wollt, dann schaut doch mal in diesem Forum vorbei.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.