Zum Inhalt springen

Ausführung des CSV-Importers

Der CSV-Importer läuft nur einmalig, er ist kein dauerhafter Dienst.

In HELIOS steht er unter Konfiguration → Datenquellen → Historische Daten importieren.

Dort werden die exportierten Dateien hochgeladen, einzeln als CSV oder gebündelt als ZIP-Archiv (empfohlen, maximal 100 MB). HELIOS entpackt sie und startet den Container. Um welches Format es sich handelt, erkennt der Importer selbst: Er liest die Kopfzeile jeder Datei und sucht darin die Spalten, die er kennt.

Identische Datenpunkte werden überschrieben statt doppelt angelegt. Ein zweiter Import derselben Datei erzeugt also keine Dubletten.

Erwartet werden die Dateien so, wie der jeweilige Anbieter sie exportiert. Erkannt wird das Format an der Kopfzeile:

QuelleZeitspalteErkennungsmerkmal in der Kopfzeile
SENEC (mein-senec.de)UhrzeitNetzbezug [kW] bzw. [kWh]
Sungrow (iSolarCloud)Zeit
SolarEdge (Monitoring)Time

Beim SENEC-Export trennt ein Semikolon die Spalten, die Werte stehen in Kilowatt mit Komma als Dezimaltrennzeichen. Der Importer rechnet sie in Watt um. Die Spalte mit dem Ladestand des Speichers (Akku Füllstand [%]) darf fehlen.

Beispiel (SENEC)
Uhrzeit;Stromerzeugung [kW];Netzbezug [kW];Netzeinspeisung [kW];Akku Füllstand [%]
01.03.2024 00:00:00;0,00;0,42;0,00;53,20
01.03.2024 00:05:00;0,00;0,39;0,00;52,80

Die Zeitstempel liest der Importer in der Zeitzone, die TZ angibt.

Durch den Import kommen Messwerte aus der Vergangenheit dazu. Deshalb leert HELIOS anschließend den Redis-Cache und setzt die Tageszusammenfassungen zurück. Beides passiert automatisch.

Diese Variablen wertet der CSV-Importer aus.

Die sieben INFLUX_SENSOR_*-Variablen ordnen jeden Messwert einem Ziel in InfluxDB zu, in der Form Measurement:Field. Jede hat einen Standardwert, der zum SENEC-Speicher passt. Bei einem Tippfehler im Variablennamen greift dieser Standardwert. Der Import bricht dann nicht ab, sondern schreibt still auf das SENEC-Measurement.

Hostname des InfluxDB-Servers, in den der Importer die Messwerte schreibt. Läuft InfluxDB im selben Docker-Netzwerk, ist das der Name des Docker-Services, also influxdb. Es kann aber auch ein externer Server sein, etwa influxdb.example.com.

Hier gehört nur der Host hin, kein http:// oder https:// und keine Portnummer. Ohne die Variable bricht der Importer beim Start ab, denn die URL, die er aus Schema, Host und Port zusammensetzt, ist dann ungültig.

Beispiel
INFLUX_HOST=influxdb

Schema für die Verbindung zu InfluxDB, http oder https. Standardwert ist http. Bei einer externen InfluxDB mit TLS gehört hier https hin.

Ein anderer Wert lässt den Importer beim Start abbrechen.

Beispiel
INFLUX_SCHEMA=https

Port für die Verbindung zu InfluxDB, eine Ganzzahl. Standardwert ist 8086. Bei einer externen, per TLS abgesicherten InfluxDB ist es oft 443.

Beispiel
INFLUX_PORT=443

Token, mit dem sich der Importer bei InfluxDB anmeldet. Er muss dort existieren und das Recht haben, in den angegebenen Bucket zu schreiben. Mehr braucht der Importer nicht: Er schickt Messwerte hin und liest nie etwas zurück.

Alternativ liest der Importer den Token aus INFLUX_TOKEN. Gesetzt sein muss einer der beiden, INFLUX_TOKEN_WRITE hat Vorrang. Passt der Token nicht, weist InfluxDB den ersten Schreibzugriff ab und der Import bricht ab.

Beispiel
INFLUX_TOKEN_WRITE=my-super-secret-write-token

Organisation in InfluxDB, unter der die Messwerte gespeichert werden. In einer SOLECTRUS-Installation heißt sie solectrus.

Der Name muss zu der Organisation passen, die in InfluxDB tatsächlich existiert. Sonst lehnt InfluxDB die Schreibzugriffe ab und der Import bricht ab.

Beispiel
INFLUX_ORG=solectrus

Bucket in InfluxDB, in den der Importer die Messwerte schreibt. Es muss derselbe sein, aus dem das Dashboard liest, sonst bleiben die importierten Zeiträume dort leer. In einer SOLECTRUS-Installation heißt er solectrus.

Beispiel
INFLUX_BUCKET=solectrus

Ziel für die Wechselrichterleistung. Standardwert ist SENEC:inverter_power.

Beispiel
INFLUX_SENSOR_INVERTER_POWER=SENEC:inverter_power

Ziel für den Hausverbrauch. Standardwert ist SENEC:house_power.

Bei SolarEdge-Dateien steht der Hausverbrauch nicht im Export. Der Importer rechnet ihn aus Erzeugung, Netzbezug und Einspeisung aus.

Beispiel
INFLUX_SENSOR_HOUSE_POWER=SENEC:house_power

Ziel für den Netzbezug. Standardwert ist SENEC:grid_power_plus.

Beispiel
INFLUX_SENSOR_GRID_IMPORT_POWER=SENEC:grid_power_plus

Ziel für die Netzeinspeisung. Standardwert ist SENEC:grid_power_minus.

Beispiel
INFLUX_SENSOR_GRID_EXPORT_POWER=SENEC:grid_power_minus

Ziel für die Batterieladung. Standardwert ist SENEC:bat_power_plus.

Beispiel
INFLUX_SENSOR_BATTERY_CHARGING_POWER=SENEC:bat_power_plus

Ziel für die Batterieentladung. Standardwert ist SENEC:bat_power_minus.

Beispiel
INFLUX_SENSOR_BATTERY_DISCHARGING_POWER=SENEC:bat_power_minus

Ziel für den Ladestand des Speichers. Standardwert ist SENEC:bat_fuel_charge.

Nur SENEC-Dateien enthalten den Ladestand, und auch dort ist die Spalte optional. Fehlt sie, überspringt der Importer den Sensor. Sungrow- und SolarEdge-Dateien liefern ihn gar nicht.

Beispiel
INFLUX_SENSOR_BATTERY_SOC=SENEC:bat_fuel_charge

Zeitlimit für den Verbindungsaufbau zu InfluxDB, in Sekunden. Standardwert ist 30.

Beispiel
INFLUX_OPEN_TIMEOUT=60

Zeitlimit fürs Lesen von InfluxDB, in Sekunden. Standardwert ist 60.

Beispiel
INFLUX_READ_TIMEOUT=120

Zeitlimit fürs Schreiben nach InfluxDB, in Sekunden. Standardwert ist 30.

Der Importer schickt die Messwerte in Blöcken zu 500 Datenpunkten. Läuft ein Block in das Zeitlimit, versucht er es dreimal erneut, mit wachsender Wartezeit dazwischen.

Beispiel
INFLUX_WRITE_TIMEOUT=60

Ordner, in dem der Importer nach CSV-Dateien sucht, samt Unterordnern. Standardwert ist /data.

Beispiel
IMPORT_FOLDER=/data

Pause nach jeder importierten Datei, in Sekunden. Standardwert ist 0, der Importer arbeitet die Dateien also ohne Unterbrechung ab.

Ein größerer Wert entlastet eine InfluxDB auf schwacher Hardware, verlängert aber den Import.

Beispiel
IMPORT_PAUSE=5

Messwerte, die der Importer nicht nach InfluxDB schreibt. Nötig, wenn einzelne Messwerte (etwa die Netzeinspeisung) aus einer anderen Quelle stammen. Ohne die Variable schreibt der Importer alle Messwerte.

Einzutragen sind die Field-Namen aus der Sensor-Zuordnung, also etwa grid_power_minus, nicht der Sensorname GRID_EXPORT_POWER. Mehrere Felder werden durch Kommas getrennt, ohne Leerzeichen. Die Liste wirkt nur beim SENEC-Format, Sungrow- und SolarEdge-Dateien importiert der Importer vollständig.

Beispiel
SENEC_IGNORE=grid_power_minus,bat_fuel_charge

Zeitzone gemäß Liste. Standardwert ist Europe/Berlin.

In dieser Zeitzone liest der Importer die Zeitstempel der CSV-Dateien. Die Portale exportieren sie ohne Zeitzonenangabe, ein falscher Wert verschiebt daher alle importierten Messwerte. Gespeichert werden sie anschließend wie immer in UTC.

Beispiel
TZ=Europe/Rome