Zum Inhalt

InfluxDB - Eigene Werte mithilfe von csv-Dateien importieren

Foto von Mika Baumeister auf Unsplash

Eigene Werte lassen sich in eine InfluxDB schnell und einfach mit einer csv-Datei importieren.

InfluxDB ist eine Datenbank die speziell darauf ausgelegt ist, um Messwerte zu erfassen und effektiv zu verwalten.

Besonders Benutzer der populären Hausautomatisierunglösung Home Assistant kennen die Datenbank.

InfluxDB wird dort sehr gerne zum Langzeitspeichern der Messwerte verwendet und zum Bereitstellen der Werte für Grafana.

Home Assistant bringt im Standard das Add-on InfluxDB mit. Die Installation ist damit sehr einfach durchzuführen.

Wie bekommt man aber eigene Werte in eine InfluxDB?

Abhilfe schafft der kleine "Umweg" über eine csv-Datei.

Für den erfolgreichen Import sind ein paar Dinge zu beachten, die im folgenden Beispiel erläutert werden.

Beispieldateien

Die beiden Beispieldateien können hier heruntergeladen werden:

Beim Import der Dateien mit einem Euro-Betrag kommt es zu einem Fehler. Das liegt an dem Dezimaltrennzeichen , (= Komma).

InfluxDB nimmt beim Import an, dass das , ein Spaltentrennzeichen ist und kann die Werte dieser Zeilen nicht korrekt zuordnen. Die Struktur der Importtabelle wird dadurch "zerstört" und der Import der gesamten csv-Datei verweigert.

Abhilfe schafft das Ersetzen des Kommas , durch einen Punkt . als Dezimaltrennzeichen bei den Euro-Werten. Dafür wird eine kleine Ergänzung der Formel durch die Funktion =WECHSELN() notwendig.

Es darf als Tausendertrennzeichen ebenfalls kein , verwendet werden. Am besten ist diese Formatierung auszuschalten.

Die Zahl in der csv-Datei sollte nur nach diesem Schema formatiert sein 1000.00.

In einem Beispiel Tabelle 1_8_0_EUR, Zelle D1 die Formel wie folgt aus:

=WENN(C1="";"";WENN($Zählerstände.K7="";"value=0 ";"value="&WECHSELN(KÜRZEN($Zählerstände.K7;3);",";".")&" "))

Die Beispieldateien zum Herunterladen wurden entsprechend angepasst.

Use Case

Die Stromverbräuche eines Stromzählers sollen in eine neue InfluxDB Datenbank importiert werden.

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Der Stromzähler verfügt über zwei interne Zähler

  • 1.8.0 = Stromverbrauch
  • 2.8.0 = Einspeisung einer PV-Anlage

Die Messwerte werden (in unregelmäßigen Abständen) manuell ✍️ und fortlaufend in einer Tabelle im xlsx-Format erfasst.

Dort werden die Verbrauchswerte mit anderen Werten verdichtet und weitere Werte, wie Preis pro kWh, Kosten für den Verbrauch in einem Zeitraum, etc., über Formelberechnungen hinzugefügt.

Die Werte werden dann automatisch in eigene Tabellen übertragen und in ein InfluxDB-konformes Format gebracht.

Die einzelnen Tabellen werden als csv-Dateien abgespeichert und anschließend als csv-Datei in InfluxDB importiert.

Sobald die Werte in der InfluxDB gespeichert wurden, können sie dort oder mithilfe von Grafana Dashbords übersichtlich dargestellt und mit anderen Werten verdichtet werden.

Arbeitsmappe

Für das Beispiel wurde eine Arbeitsmappe mit dem Namen influxdb-import.xlsx erstellt.

Dort sind mehrere Tabellen vorhanden, die zur Erfassung und für den Import in die InfluxDB verwendet werden.

  • Zählerstände
  • 1_8_0
  • 1_8_0_EUR
  • 2_8_0
  • 2_8_0_EUR

Liste der Tabellen der Arbeitsmappe

Die Tabellen werden verwendet für

  • Zählerstände = manuelle Erfassung und weitere Anreicherung der Daten mit Formeln
  • 1_8_0 = Messwerte des Stromverbrauchs in kWh werden aufbereitet.
  • 1_8_0_EUR = Die Koste für den Stromverbrauch werden für den Import vorbereitet
  • 2_8_0 = Die Einspeisung in kWh wird für den Import in die InfluxDB vorbereitet
  • 2_8_0_EUR = Die Erträge der Einspeisung werden in Euro aufbereitet für den Import.

Tabelle - Zählerstände

Die Verbrauchswerte werden manuell ✍️ und fortlaufend in der Tabelle Zählerstände erfasst.

Tabelle Zählerstand - zeigt die Struktur nd den Aufbau der Tabelle und welche Daten on welche Spalten einzutragen sind. Die Spalten sind gelb markiert.

Die Daten sind in die gelb markierten Spalten manuell einzutragen.

Die Berechnung der restlichen Werte erfolgt auf Grundlage der hinterlegten Formeln.

Tabelle - 1_8_0

Die Tabelle 1_8_0 dient dazu die Werte aus der Tabelle Zählerstände so vorzubereiten, dass die Tabelle als csv gespeichert und in InfluxDB importiert werden kann.

Tabelle 1_8_0 - Aufbau und Struktur der Tabelle, wie die Werte für den Import in die InfluxDB aufbereitet werden müssen

Für den Import in InfluxDB müssen die Werte in eine bestimmte Reihenfolge und mit "Spaltennamen" versehen werden.

kWh,electric_meter=1emh12345678901_1_8_0,friendly_name=stromzaehler_haushaltsstrom_verbrauch, value=500 1711929600

Übersetzt für InfluxDB bedeuten die Spalten:

  • kWh = measurement
  • electric_meter = tag set
  • friendly_name = tag set
  • value = field set
  • 1711929600 = Zeit im UNIX-Format

Danger

Es ist zwingend darauf zu achten, dass Kommas und Leerzeichen korrekt gesetzt werden ‼️ 2

measurement,tag,tag field time

kwh,electric_meter,friendly_name value UNIXtime

Das Ergebnis nach dem Import in InfluxDB sieht dann so aus

kWh
  - electric_meter-1
    - 1emh12345678901_1_8_0

  - friendly_name-1
    - stromzaehler_haushaltsstrom_verbrauch

Das Bild zeigt die Struktur und die Daten nach dem Import in der InfluxDB

Die Daten lassen sich in einem Tabellenbearbeitungsprogramm, wie LibreOffice Calc, sehr gut jonglieren und für den Export in das csv-Format vorbereiten.

In der Tabelle 1_8_0 werden die Daten für den Import aufbereitet und mit den entsprechenden zusätzlichen Informationen versehen.

Info

In der Spalte E wird das lesbare Datumsformat dd.mm.jjjj in das UNIX Zeitformat (Unix timestamp) umgewandelt. Das ist ZWINGEND notwendig, damit die Daten in InfluxDB importiert werden können.

In diesem Beispiel wird die Zeit in Sekunden mit der Formel umgerechnet.

=($Zählerstände.B7 - 25569) * 86400

Möchte man anstatt Sekunden Millisekunden (ms) ist die Formel entsprechend anzupassen.

=($Zählerstände.B7 - 25569) * 86400 * 1000

Tabelle - Aufbau und Struktur der Daten

Die Tabelle wird im csv-Format abgespeichert. Dazu wird die im Menü Datei - Speichern unter ... anklicken.

Tabelle 1_8_0 - Die Datei wird über Datei - Speicher unter ... als csv-Datei gespeichert. Der Button Filtereinstellungen bearbeiten ist angeklickt.

Es ist wichtig, dass alle Trennzeichen entfernt werden. Die Trennzeichen und Leerzeichen werden in der Tabelle durch die hinterlegten Formeln eingefügt.

Beim Speichern der Datei sind alle Feldtrennzeichen und Texttrennzeichen zu entfernen.

Nach dem Speichern arbeitet man nun in der csv-Datei. Die eigentliche Arbeitsmappe influxdb-import.xlsx wurde geschlossen!

Warnung - Es wird nur die aktuelle Tabelle 1_8_0 als csv gespeichert.

Eine Kontrolle in einem Texteditor der csv-Datei zeigt, dass die Formatierung für den Import in InfluxDB korrekt ist.

Die neue csv-Datei wird in einem Texteditor geöffnet und kontrolliert.

InfluxDB - csv-Datei importieren

Die gerade erstellte csv-Datei soll in eine neue InfluxDB-Datenbank importiert werden.

Neue Datenbank erstellen.

InfluxDB - Eine neue Datenbank wird angelegt.

Neue Datenbank testdb benennen und erstellen.

InfluxDB - Eine neue Datenbank wird angelegt.

Datenbank testdb wurde korrekt erstellt und kann verwendet werden.

InfluxDB - Die neue Datenbank wurde angelegt und wird in der Übersicht angezeigt.

In den Explorer wechseln, um den Import zu starten.

InfluxDB - wechsel in das Menü Explore

Auf Write Data klicken.

InfluxDB - Klick auf den Button Write Data

Die neue Datenbank testdb auswählen.

Beim Zeitformat sind Sekunden s zu wählen.

Info

Wird ein anderes Zeitformat verwendet, dann ist das entsprechend aus dem Dropdown auszuwählen.

Datenbank auswählen und die Zeit für den Import wird über Dropdowns festgelegt.

Die Datei influxdb-import.csv kan mit Drag&Drop in Position gezogen werden. Mit einem Klick auf Write this File werden die Daten importiert.

Die csv-Datei wird mit einem Klick auf Write this file eingelesen.

Sucess!

Das Bild zeigt die Struktur und die Daten nach dem Import in der InfluxDB

Die importierten Werte werden umgehend in der neuen Datenbank angezeigt.

InfluxDB - Aufbau und Struktur der Daten

Werden keine Werte trotz korrekter Auswahl angezeigt, kann das am eingestellten Zeitraum liegen.

InfluxDB - Es wird darauf verwiesen, den Zeitraum so zuwählen, dass die Daten angezeigt werden. Auswahl oben rechts

Tabelle - 2_8_0 und restliche

Für die anderen Tabellen

  • 1_8_0_EUR
  • 2_8_0
  • 2_8_0_EUR

ist nach dem gleichen Schemata für den Import zu verfahren.

Kann die gleiche Datei mehrfach importiert werden?

Ja, die Datei influxdb-import.xlsx kann fortlaufend mit neuen Werten befüllt und auf dem beschriebenen Weg für den Import in InfluxDB vorbereitet werden.

Ist der gleiche Wert in InfluxDB bereits vorhanden, passiert nichts. Neue Werte werden einfach hinzugefügt.

Bei geänderten Werten wird lt. Dokumentation wie folgt verfahren:

Duplicate points Ein Punkt wird eindeutig durch den Messungsnamen, das Tag-Set und den Zeitstempel identifiziert. Wenn Sie ein Linienprotokoll mit derselben Messung, demselben Markierungssatz und demselben Zeitstempel, aber mit einem anderen Feldsatz einreichen, wird der Feldsatz zur Vereinigung des alten Feldsatzes und des neuen Feldsatzes, wobei Konflikte zugunsten des neuen Feldsatzes auftreten. 1

Aus diesem Grund sollten vor dem Einspielen geänderter Werte in InfluxDB die alten Werte gelöscht werden, um Konflikte zu vermeiden. Wie das gemacht wird, beschreibe ich in einem späteren Blogpost.

Fazit

Der Import über eine csv-Datei stellt eine schnelle und einfache Möglichkeit dar, um eigene Werte in InfluxDB zu importieren.

Es werden keine Programmierkenntnisse benötigt.

Die Aufbereitung der Daten kann in einem Tabellenbearbeitungsprogramm, wie LibreOffice Calc, erfolgen.

Das Tool ist bekannt, einfach zu handhaben und alle Werte lassen sich sofort darstellen und auf Korrektheit prüfen.

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source

Foto von Mika Baumeister auf Unsplash