Ermittlung der Gesamtverbräuche
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
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.
- Verbindet sich mit der InfluxDB-Datenbank unter
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.
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
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}×tamp={timestamp}&prettyPrint
setzt einen bestimmten Datenpunkt im ioBroker.
Datenverarbeitung und Senden:
- Die Schleife durchläuft die Ergebnisse der Flux-Abfrage, extrahiert die Werte mit
get_value()
und die Timestamps mitget_time()
, und sendet diese an den ioBroker.
- Die Schleife durchläuft die Ergebnisse der Flux-Abfrage, extrahiert die Werte mit
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
- source venv/bin/activate:
- Aktiviert die virtuelle Umgebung, in der die benötigten Python-Pakete installiert sind.
- python3 influx_daten.py:
- Führt das Python-Skript
influx_daten.py
aus.
- Führt das Python-Skript
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
Columns (Spalten):
- Jede Spalte hat einen Namen und einen Datentyp.
- Typische Spalten sind
_time
,_value
,_field
,_measurement
und Tag-Spalten (benutzerdefinierte Metadaten).
Rows (Zeilen):
- Jede Zeile repräsentiert einen einzelnen Datensatz.
- Die Werte in den Zeilen entsprechen den Spaltenüberschriften.
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
odertags
).
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 | _measurement | tag1 | tag2 |
---|---|---|---|---|---|
2024-06-14T10:00:00Z | 500 | value | Verbrauch | val1 | val2 |
2024-06-14T10:01:00Z | 510 | value | Verbrauch | val1 | val2 |
2024-06-14T10:02:00Z | 520 | value | Verbrauch | val1 | val2 |
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.