Zum Inhalt springen

Korrektur von Messwerten in InfluxDB

Ein Kollektor kann fehlerhafte Messwerte liefern, etwa der MQTT-Collector. Sie landen dann in InfluxDB.

Solche Werte lassen sich vorab abfangen, beispielsweise mit den Min/Max-Optionen des MQTT-Collectors. Eingerichtet werden sie in der Praxis aber erst, wenn ungewöhnliche Werte auffallen. Zu diesem Zeitpunkt liegen die fehlerhaften Daten schon in InfluxDB und verfälschen die historischen Statistiken.

InfluxDB kann Messwerte nicht löschen, wohl aber überschreiben. Das Vorgehen:

Vor der Korrektur eine Sicherung der Datenbank erstellen.

Die Web-Oberfläche von InfluxDB selektiert die Daten im Data Explorer auf unterschiedliche Weise. Am besten eignet sich der Script-Editor mit einer Flux-Query. Flux ist die Abfragesprache von InfluxDB. Damit lassen sich Daten filtern und aggregieren.

InfluxDB speichert Messwerte in folgender Hierarchie: Bucket > Measurement > Field > Value. Ein Bucket ist ein Container für Daten (= Datenbank), ein Measurement ist eine Art Tabelle, ein Field ist eine Spalte in dieser Tabelle und ein Value ist ein Eintrag in dieser Spalte.

Wie genau Bucket, Measurement und Field heißen, hängt von der eigenen Konfiguration ab. Die Beispiele hier verwenden battery und soc, die Vorgabe für den Ladestand des Hausakkus. Beim SENEC-Collector heißen sie stattdessen SENEC und bat_fuel_charge. Nachschlagen lässt sich die Zuordnung in HELIOS unter Konfiguration → Sensoren.

Hier ein Beispiel, um alle Daten zum Ladestand des Hausakkus abzurufen, die einen Wert größer 100 oder kleiner 0 aufweisen (also offensichtlich fehlerhaft sind):

from(bucket: "solectrus")
|> range(start: 0) // Keine zeitliche Einschränkung
|> filter(fn: (r) => r._measurement == "battery")
|> filter(fn: (r) => r._field == "soc")
|> filter(fn: (r) => r._value > 100 or r._value < 0)

Flux-Query im Data Explorer von InfluxDB

Für einen bestimmten Zeitraum sieht die Abfrage so aus (hier am Beispiel für Januar 2024):

from(bucket: "solectrus")
|> range(start: 2024-01-01T00:00:00Z, stop: 2024-02-01T00:00:00Z) // Januar 2024
|> filter(fn: (r) => r._measurement == "battery")
|> filter(fn: (r) => r._field == "soc")
|> filter(fn: (r) => r._value > 100 or r._value < 0)

Die selektierten Messwerte lassen sich als CSV-Datei exportieren. Der zugehörige Knopf CSV erscheint allerdings nur bei einer sicheren HTTPS-Verbindung. Läuft InfluxDB auf einem lokalen Server, ist die Verbindung in der Regel unverschlüsselt und der Knopf fehlt.

Zumindest in Chromium-basierten Browsern (Chrome, Opera, Edge, …) lässt sich das vorübergehend umgehen: Über die URL chrome://flags/#unsafely-treat-insecure-origin-as-secure die Option Insecure origins treated as secure aktivieren und dort die URL der InfluxDB-Web-Oberfläche eintragen (z.B. http://192.168.2.50:8086). Der Browser behandelt die Verbindung dann als sicher.

Chrome-Flags mit der Option „Insecure origins treated as secure"

Die heruntergeladene CSV-Datei enthält Daten in folgender Struktur:

#group,false,false,true,true,false,false,true,true
#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,double,string,string
#default,\_result,,,,,,,
,result,table,\_start,\_stop,\_time,\_value,\_field,\_measurement
,,0,1970-01-01T00:00:00Z,2024-12-08T09:02:04.372836299Z,2024-09-09T06:39:56Z,140,soc,battery
,,0,1970-01-01T00:00:00Z,2024-12-08T09:02:04.372836299Z,2024-09-09T06:40:06Z,140,soc,battery
,,0,1970-01-01T00:00:00Z,2024-12-08T09:02:04.372836299Z,2024-09-09T06:40:15Z,140,soc,battery

Bearbeiten lässt sie sich mit einem Texteditor oder mit Excel. Zu korrigieren sind in diesem Beispiel die Werte von 140, die für einen SOC des Akkus keinen Sinn ergeben. Die Werte werden dabei korrigiert und nicht gelöscht: Sämtliche Zeilen und Spalten bleiben erhalten, denn InfluxDB kann auf diesem Weg keine Daten löschen.

Im Menü der Web-Oberfläche lässt sich über Load Data > Sources > Upload a CSV die korrigierte Datei per Drag-and-Drop in den Bucket von SOLECTRUS laden. InfluxDB überschreibt dabei die vorhandenen Daten.

CSV-Import in der Web-Oberfläche von InfluxDB

Nach dem Import zeigt der Data Explorer die korrigierten Werte.

Zwei Dinge fehlen dann noch, denn SOLECTRUS kennt die alten Werte weiterhin:

  1. Den Redis-Cache leeren. In HELIOS gibt es dafür beim Dienst Redis den Knopf Cache leeren.
  2. Die Tageszusammenfassungen zurücksetzen. Das geht in SOLECTRUS selbst, auf der Seite Einstellungen im Abschnitt Tageszusammenfassungen über den Link Zurücksetzen.