knuspermagier.de
Hallo. Ich bins! Philipp!

Feinstaub-Sensor über InfluxDB in Home Assistant integrieren

Heute hatte ich mal wieder so ein typisches Problem, das am Ende tausend neue Probleme eröffnete, aber der Reihe nach:

Vor etwa einem Jahr kaufte ich einen Bausatz für einen Feinstaubsensor. Ich baute das auch alles erfolgreich zusammen, aber ich schaffte es nicht, das Ding ins WLAN zu kriegen.

Nun, fiel mir das Ding wieder in die Hände und ich entschied mich, es noch einmal an zu gehen, vor allem, da ich ja gerade Home Assistant aufgesetzt hatte und mich also über jeden weiteren Sensor freue. Mittlerweile hatte ich auch ein anders WLAN und vielleicht klappt es ja damit! Erfolg! Juchu!

Nun funktionierte der Sensor und es wirkte auch so, als würde er erfolgreich regelmäßig seine Daten an die Sensor.Community-Karte pushen. Für Home Assistant gibt es nun eine Integration, bei der man die SensorID eingibt und die dann die Daten entsprechend wieder zurück holt und speichert. Nachdem das erstmal gut lief, zeigte es nur noch “unknown” und “Sensor nicht verbunden” an, in dem Moment, als ich meinen Erfolg gerade vorzeigen wollte.

Probleme

Hier offenbarten sich mehrere Probleme:

  1. Home Assistant ist nicht gut darin, einfach z.B. den letzten Erfolgreich abgefragten Wert anzuzeigen, wenn ein Sensor kurzzeitig mal weg ist
  2. Der Sensor hatte zwischendurch ein paar Probleme, die Daten an den WebService zu übertragen, weshalb er dort aus der Auflistung entfernt wurde, was dazu führte, dass die Integration keine Daten abrufen konnte.

Das erste Problem kann man Lösen, in dem man wilde Sachen in YAML-Dateien schreibt, die irgendwie einen temporären Sensor erzeugen, der die alten Daten zwischenspeichert, oder so, aber ich wollte erstmal das andere lösen, damit das erste vielleicht gar nicht erst auftritt!

InfluxDB to the rescue?

Die Firmware vom Feinstaubsensor kann die Daten jedenfalls auch in eine InfluxDB speichern. Hach, InfluxDB, was haben wir schon alles gemeinsam erlebt. Wie viele Daten, die ich danach nie anschaute, habe ich schon in dir gespeichert, weil es so einfach ging. Ich installierte also kurz die aktuelle Version auf dem Home Assistant-Server und musste leider feststellen, dass Version 2 überhaupt nicht mehr so einfach und schnell funktioniert wie die alte Version.

Das mag natürlich daran liegen, dass ich mich nicht großartig damit beschäftigt habe, aber ich bekam es in fünf Minuten jedenfalls nicht hin, dass der Sensor seine Daten erfolgreich speichern konnte. Keine Ahnung, ob sich der write-Endpunkt irgendwie geändert hat und nun einen anderen Syntax erwartet, oder woran es lag. Auf jeden Fall gibt es nun Organizations und Buckets und das klingt schon schlimm genug.


Änderungen in InfluxDB v2

Tatsächlich gab es einige Breaking Changes mit InfluxDB v2, das 2021 erschien. Zum Beispiel sind Kapacitor und Chronograf, also die Alerting- und Visualisiungsplattformen, die vorher einzelne Binaries waren, direkt integriert. Außerdem gibt es nun Organisations und Buckets (eine Kombination aus Database und Retention Policy aus v1) und man muss nun Flux statt InfluxQL benutzen. Mehr Informationen gibt's zum Beispiel bei sqlpac.com.

Eigentlich sollten die alten Schnittstellen weiterhin abwärtskompatibel sein, so lang man zumindest einen Benutzeraccount benutzt (in v1 ging es ohne) – warum die Verbindung mit der AirRohr-Firmware also nicht mehr funktionierte, konnte ich leider nicht herausfinden.


Zum Glück gibt es noch InfluxDB 1.8 zum Download. Puh, Tag gerettet. Installiert, mit dem Sensor verbunden, Daten werden gespeichert. Durchatmen.

Nun bin ich also wieder zurück in Home Assistant und will gerade herausfinden, wie ich die Daten aus der InfluxDB nun in einem Dashboard anzeigen kann, als mir auffällt, dass… es mittlerweile wieder Daten aus der Sensor.Community anzeigt. Na toll.

InfluxDB als Sensor in Home Assistant

Auch wenn es jetzt erstmal wieder funktionierte, wollte ich natürlich auf Nummer sicher gehen und die Daten doch aus der InfluxDB ziehen. Das ist leider wieder etwas umständlich, aber was solls. Also zunächst muss man eine sensor.yaml erstellen. Ich benutze die Docker-Variante von Home Assistant, also lege ich sie dorthin, wo auch die configuation.yaml liegt.

Anscheinend kann man in dieser Datei diverse Sensoren definieren, die man nicht über eingebaute Integrationen im Klicki-Bunti-Interface erstellt hat.

Die Datei sieht bei mir so aus:

- platform: influxdb
  host: IP-Adresse
  api_version: 1
  queries:
    - name: feinstaub_pm10
      where: 'time > now() - 7d'
      measurement: '"feinstaub"'
      field: "SDS_P1"
      group_function: last
      database: feinstaub
    - name: feinstaub_pm25
      where: 'time > now() - 7d'
      measurement: '"feinstaub"'
      field: "SDS_P2"
      group_function: last
      database: feinstaub

Das erstellt zwei Sensoren. In die configuration.yml kommt noch folgendes:

sensor: !include sensor.yaml

influxdb:
  exclude:
    entity_globs: "*"

Keine Ahnung, wozu man den letzten Teil braucht, aber es steht so in allen Tutorials! Insgesamt aber nett, dass Home Assistant überhaupt InfluxDB-Support hat und man nichts extra installieren muss.

screenshot-2022-11-06-at-23.07.31.png

Wie auch immer, es funktioniert nun. Mal sehen, wie lange.