Dieser Abschnitt bezieht sich auf den als pdf-Datei eingefügten Python-Code zum integrieren in einer InfluxDB:
https://www.xplore-dna.net/pluginfile.php/24527/mod_page/content/6/influx_daten.pdf

Übersicht

Das Programm influx_daten.py hat die Aufgabe, Daten aus einer InfluxDB-Datenbank abzufragen und diese in ioBroker zu schreiben. Dies geschieht mittels des influxdb_client und des urllib.request Pakets.

Komponenten im Detail

  1. InfluxDBClient:

    • Verbindet sich mit der InfluxDB-Datenbank unter http://127.0.0.1:8086 mit einem Access Token für die Authentifizierung.
    • url: Lokale InfluxDB-Instanz.
    • token: Authentifizierungs-Token für den Zugriff auf die Datenbank.
    • bucket: Der spezifische Dateneimer, aus dem die Daten abgefragt werden.
    • org: Die Organisation, zu der die Datenbank gehört.
  2. Datenabfrage mit Flux:

    • Flux ist die Abfragesprache von InfluxDB, die zur Datenmanipulation und -abfrage verwendet wird.
    • Die Abfrage sammelt Daten aus dem angegeben Zeitraum und filtert nach dem Verbrauch-Messwert.
    • Die query_api-Methode führt die Abfrage aus und gibt ein Ergebnis zurück, das in einem Fluxtable-Format vorliegt.
  3. Verwendung des Unix-Timestamps:

    • Jeder Datensatz in InfluxDB hat einen zugehörigen Unix-Timestamp, der die genaue Zeit angibt, zu der der Datensatz erfasst wurde.
    • record.get_time(): Extrahiert den Unix-Timestamp aus dem Datensatz.
    • Dieser Timestamp gibt den zu integrierenden Zeitraum an
  4. urllib.request:

    • Wird verwendet, um HTTP-Anfragen zu erstellen und Daten an den ioBroker zu senden.
    • urlopen: Öffnet die URL, die eine einfache API des ioBroker nutzt, um die Daten zu schreiben.
    • Der Aufruf http://127.0.0.1:8087/set/0_userdata.0.SP-Daten.{record.get_field()}?value={value}&timestamp={timestamp}&prettyPrint setzt einen bestimmten Datenpunkt im ioBroker.
  5. Datenverarbeitung und Senden:

    • Die Schleife durchläuft die Ergebnisse der Flux-Abfrage, extrahiert die Werte mit get_value() und die Timestamps mit get_time(), und sendet diese an den ioBroker.

https://www.xplore-dna.net/pluginfile.php/24527/mod_page/content/6/start_influx_daten.pdf

Übersicht

Das Skript start_influx_daten.sh dient dazu, das Python-Skript influx_daten.py innerhalb einer virtuellen Python-Umgebung auszuführen.

Komponenten im Detail

  1. source venv/bin/activate:
    • Aktiviert die virtuelle Umgebung, in der die benötigten Python-Pakete installiert sind.
  2. python3 influx_daten.py:
    • Führt das Python-Skript influx_daten.py aus.

Systemtimer

Ein Systemtimer auf dem Raspberry Pi ist so konfiguriert, dass er dieses Skript alle 60 Sekunden ausführt. Dadurch wird sichergestellt, dass die InfluxDB-Daten regelmäßig abgefragt und die Ergebnisse in den ioBroker geschrieben werden.


Fluxtable-Format in InfluxDB

Das Fluxtable-Format ist eine zentrale Komponente des Flux-Abfragesystems in InfluxDB. Es bietet eine strukturierte Art und Weise, die Ergebnisse einer Abfrage darzustellen. Ein Fluxtable besteht aus mehreren Zeilen (Rows) und Spalten (Columns), ähnlich wie eine Tabelle in einer relationalen Datenbank. Jede Abfrage in Flux kann eine oder mehrere Tabellen zurückgeben, die in einem Fluxtable-Format organisiert sind.

Komponenten eines Fluxtables

  1. Columns (Spalten):

    • Jede Spalte hat einen Namen und einen Datentyp.
    • Typische Spalten sind _time, _value, _field, _measurement und Tag-Spalten (benutzerdefinierte Metadaten).
  2. Rows (Zeilen):

    • Jede Zeile repräsentiert einen einzelnen Datensatz.
    • Die Werte in den Zeilen entsprechen den Spaltenüberschriften.
  3. Tables (Tabellen):

    • Eine Flux-Abfrage kann mehrere Tabellen zurückgeben.
    • Jede Tabelle enthält Daten, die aufgrund gemeinsamer Eigenschaften zusammengefasst wurden (z.B. gleicher measurement, field oder tags).

Beispiel einer Flux-Abfrage und des resultierenden Fluxtables

Angenommen, wir haben eine Flux-Abfrage, die Daten aus einem SPX-Data-Bucket abruft, wie folgt:

from(bucket: "SPX-Data") 

 |> range(start: -1h) 

 |> filter(fn: (r) => r._measurement == "Verbrauch") 

 |> integral(unit: 1h)

Diese Abfrage filtert Daten des letzten Stundenzeitraums und integriert die Werte über eine Stunde, um den Gesamtenergieverbrauch zu berechnen.

Beispielhafter Fluxtable

_time_value_field_measurementtag1tag2
2024-06-14T10:00:00Z500valueVerbrauchval1val2
2024-06-14T10:01:00Z510valueVerbrauchval1val2
2024-06-14T10:02:00Z520valueVerbrauchval1val2

Erklärung der Spalten

  • _time: Der Zeitpunkt, zu dem der Datensatz erfasst wurde.
  • _value: Der Wert des Datensatzes. Hier wäre es der integrierte Energieverbrauch.
  • _field: Das Feld des Datensatzes. In diesem Fall value.
  • _measurement: Der Name der Messung, in diesem Fall Verbrauch.
  • tag1, tag2: Beispielhafte benutzerdefinierte Tags, die zusätzliche Metadaten enthalten können.

Arbeiten mit Fluxtables in Python

In Python, insbesondere wenn man mit dem influxdb-client arbeitet, sind Fluxtables in der Regel als Objekte organisiert, die die Tabellen und deren Datensätze kapseln.

Beispiel: Verarbeiten von Fluxtables in influxdb_client

https://www.xplore-dna.net/pluginfile.php/24527/mod_page/content/6/Fluxtable_Beispiel.py


Zusammenfassung

  • Fluxtable: Ein strukturiertes Format, das die Ergebnisse einer Flux-Abfrage in InfluxDB organisiert.
  • Columns (Spalten): Definieren die Struktur der Daten (z.B. _time, _value, _field).
  • Rows (Zeilen): Enthalten die tatsächlichen Datenwerte.
  • Tables (Tabellen): Eine Flux-Abfrage kann mehrere Tabellen zurückgeben, basierend auf den gefilterten Daten.





Zuletzt geändert: Freitag, 14. Juni 2024, 12:03