Ausführung des CSV-Importers
Der CSV-Importer läuft nur einmalig, er ist kein dauerhafter Dienst.
Import starten
Abschnitt betitelt „Import starten“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.
Unterstützte Formate
Abschnitt betitelt „Unterstützte Formate“Erwartet werden die Dateien so, wie der jeweilige Anbieter sie exportiert. Erkannt wird das Format an der Kopfzeile:
| Quelle | Zeitspalte | Erkennungsmerkmal in der Kopfzeile |
|---|---|---|
SENEC (mein-senec.de) | Uhrzeit | Netzbezug [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.
Uhrzeit;Stromerzeugung [kW];Netzbezug [kW];Netzeinspeisung [kW];Akku Füllstand [%]01.03.2024 00:00:00;0,00;0,42;0,00;53,2001.03.2024 00:05:00;0,00;0,39;0,00;52,80Die Zeitstempel liest der Importer in der Zeitzone, die TZ angibt.
Nach dem Import
Abschnitt betitelt „Nach dem Import“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.
Umgebungsvariablen
Abschnitt betitelt „Umgebungsvariablen“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.
INFLUX_HOST
Abschnitt betitelt „INFLUX_HOST“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.
INFLUX_HOST=influxdbINFLUX_SCHEMA
Abschnitt betitelt „INFLUX_SCHEMA“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.
INFLUX_SCHEMA=httpsINFLUX_PORT
Abschnitt betitelt „INFLUX_PORT“Port für die Verbindung zu InfluxDB, eine Ganzzahl. Standardwert ist 8086. Bei einer externen, per TLS abgesicherten InfluxDB ist es oft 443.
INFLUX_PORT=443INFLUX_TOKEN_WRITE
Abschnitt betitelt „INFLUX_TOKEN_WRITE“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.
INFLUX_TOKEN_WRITE=my-super-secret-write-tokenINFLUX_ORG
Abschnitt betitelt „INFLUX_ORG“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.
INFLUX_ORG=solectrusINFLUX_BUCKET
Abschnitt betitelt „INFLUX_BUCKET“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.
INFLUX_BUCKET=solectrusINFLUX_SENSOR_INVERTER_POWER
Abschnitt betitelt „INFLUX_SENSOR_INVERTER_POWER“Ziel für die Wechselrichterleistung. Standardwert ist SENEC:inverter_power.
INFLUX_SENSOR_INVERTER_POWER=SENEC:inverter_powerINFLUX_SENSOR_HOUSE_POWER
Abschnitt betitelt „INFLUX_SENSOR_HOUSE_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.
INFLUX_SENSOR_HOUSE_POWER=SENEC:house_powerINFLUX_SENSOR_GRID_IMPORT_POWER
Abschnitt betitelt „INFLUX_SENSOR_GRID_IMPORT_POWER“Ziel für den Netzbezug. Standardwert ist SENEC:grid_power_plus.
INFLUX_SENSOR_GRID_IMPORT_POWER=SENEC:grid_power_plusINFLUX_SENSOR_GRID_EXPORT_POWER
Abschnitt betitelt „INFLUX_SENSOR_GRID_EXPORT_POWER“Ziel für die Netzeinspeisung. Standardwert ist SENEC:grid_power_minus.
INFLUX_SENSOR_GRID_EXPORT_POWER=SENEC:grid_power_minusINFLUX_SENSOR_BATTERY_CHARGING_POWER
Abschnitt betitelt „INFLUX_SENSOR_BATTERY_CHARGING_POWER“Ziel für die Batterieladung. Standardwert ist SENEC:bat_power_plus.
INFLUX_SENSOR_BATTERY_CHARGING_POWER=SENEC:bat_power_plusINFLUX_SENSOR_BATTERY_DISCHARGING_POWER
Abschnitt betitelt „INFLUX_SENSOR_BATTERY_DISCHARGING_POWER“Ziel für die Batterieentladung. Standardwert ist SENEC:bat_power_minus.
INFLUX_SENSOR_BATTERY_DISCHARGING_POWER=SENEC:bat_power_minusINFLUX_SENSOR_BATTERY_SOC
Abschnitt betitelt „INFLUX_SENSOR_BATTERY_SOC“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.
INFLUX_SENSOR_BATTERY_SOC=SENEC:bat_fuel_chargeINFLUX_OPEN_TIMEOUT
Abschnitt betitelt „INFLUX_OPEN_TIMEOUT“Zeitlimit für den Verbindungsaufbau zu InfluxDB, in Sekunden. Standardwert ist 30.
INFLUX_OPEN_TIMEOUT=60INFLUX_READ_TIMEOUT
Abschnitt betitelt „INFLUX_READ_TIMEOUT“Zeitlimit fürs Lesen von InfluxDB, in Sekunden. Standardwert ist 60.
INFLUX_READ_TIMEOUT=120INFLUX_WRITE_TIMEOUT
Abschnitt betitelt „INFLUX_WRITE_TIMEOUT“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.
INFLUX_WRITE_TIMEOUT=60IMPORT_FOLDER
Abschnitt betitelt „IMPORT_FOLDER“Ordner, in dem der Importer nach CSV-Dateien sucht, samt Unterordnern. Standardwert ist /data.
IMPORT_FOLDER=/dataIMPORT_PAUSE
Abschnitt betitelt „IMPORT_PAUSE“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.
IMPORT_PAUSE=5SENEC_IGNORE
Abschnitt betitelt „SENEC_IGNORE“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.
SENEC_IGNORE=grid_power_minus,bat_fuel_chargeZeitzone 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.
TZ=Europe/Rome