# Konfiguration von Ingest

> Die Umgebungsvariablen von Ingest, vom Hostnamen der InfluxDB über Port und Token bis zur Aufbewahrungsdauer im SQLite-Puffer.

Ingest wird über Umgebungsvariablen konfiguriert.

## Umgebungsvariablen

### `INFLUX_HOST`<span class="badge required"></span>

Hostname des InfluxDB-Servers, an den Ingest die Messwerte weiterreicht. 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. Port und Schema stehen getrennt in `INFLUX_PORT` und `INFLUX_SCHEMA`.

```properties title="Beispiel"
INFLUX_HOST=influxdb
```

> **HELIOS**
>
>
> HELIOS setzt den Hostnamen automatisch auf `influxdb`. Einzustellen gibt es nichts.
>

### `INFLUX_PORT`<span class="badge optional"></span>

Port des InfluxDB-Servers, eine Ganzzahl. Standardwert ist `8086`. Bei einer externen, per TLS abgesicherten InfluxDB ist es oft `443`.

```properties title="Beispiel"
INFLUX_PORT=8086
```

> **HELIOS**
>
>
> HELIOS setzt den Port automatisch auf `8086`. Einzustellen gibt es nichts.
>

### `INFLUX_SCHEMA`<span class="badge optional"></span>

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

```properties title="Beispiel"
INFLUX_SCHEMA=http
```

> **HELIOS**
>
>
> HELIOS setzt `http`, denn innerhalb des Docker-Netzwerks wird nicht verschlüsselt.
>

### `RETENTION_HOURS`<span class="badge optional"></span>

Dauer in Stunden, für die Ingest die eingehenden Messwerte in seiner SQLite-Datenbank aufbewahrt, eine Ganzzahl. Standardwert ist `12`. Ein Hintergrund-Job löscht stündlich alles, was älter ist.

Aus diesem Puffer holt Ingest die Nachbarwerte, mit denen es zwischen zwei Messpunkten interpoliert. Ein größerer Wert lässt Ingest den Hausverbrauch auch dann noch berechnen, wenn ein Kollektor seine Messwerte erst Stunden später nachträgt. Er vergrößert aber die SQLite-Datei auf der Platte. Die Warteschlange zur InfluxDB berührt die Variable nicht: Ist die InfluxDB nicht erreichbar, hält Ingest die ausgehenden Daten so lange vor, bis der Schreibzugriff klappt.

```properties title="Beispiel"
RETENTION_HOURS=36
```

> **HELIOS**
>
>
> HELIOS fragt die Dauer unter _Konfiguration → Grundeinstellungen → Ingest_ ab, vorbelegt mit `12`.
>

### `STATS_PASSWORD`<span class="badge optional"></span>

Passwort für den Zugriff auf die [Web-Oberfläche](/docs/referenz/ingest/web-oberflaeche/). Ohne die Variable ist sie ohne Passwort zu erreichen.

```properties title="Beispiel"
STATS_PASSWORD=my-super-secret-password
```

> **HELIOS**
>
>
> HELIOS setzt hier das Administrator-Passwort ein, dasselbe wie für Dashboard und HELIOS. Festgelegt wird es unter _Konfiguration → Grundeinstellungen → Zugriffsschutz_.
>

### `INFLUX_SENSOR_HOUSE_POWER_CALCULATED`<span class="badge optional"></span>

Ziel für den berechneten Hausverbrauch, in der Schreibweise `Measurement:Field`. Ohne die Variable schreibt Ingest das Ergebnis dorthin, wohin `INFLUX_SENSOR_HOUSE_POWER` zeigt, und überschreibt damit den Wert des Kollektors. Ist sie gesetzt, bleibt der Rohwert des Kollektors erhalten und das Ergebnis landet daneben.

Nützlich ist das zum Vergleich beider Werte. Für den Dauerbetrieb taugt es nicht: Das Dashboard kennt die Variable nicht und liest den Hausverbrauch weiterhin aus `INFLUX_SENSOR_HOUSE_POWER`, also den unkorrigierten Wert.

```properties title="Beispiel"
INFLUX_SENSOR_HOUSE_POWER_CALCULATED=Ingest:house_power_calculated
```

> **HELIOS**
>
>
> HELIOS setzt die Variable nicht. Der berechnete Hausverbrauch überschreibt dort immer den eingehenden Wert.
>

### `TZ`<span class="badge optional"></span>

Zeitzone gemäß [Liste](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Standardwert ist `UTC`.

Sie betrifft ausschließlich die Zeitstempel im Protokoll und in der Web-Oberfläche von Ingest. Die Messwerte selbst speichert InfluxDB immer in UTC, daran ändert `TZ` nichts.

```properties title="Beispiel"
TZ=Europe/Berlin
```

> **HELIOS**
>
>
> HELIOS fragt die Zeitzone unter _Konfiguration → Grundeinstellungen → PV-Anlage_ ab, vorbelegt mit `Europe/Berlin`.
>

## Sensor-Zuordnungen

Für die Berechnung des Hausverbrauchs muss Ingest wissen, wo die beteiligten Messwerte in der InfluxDB liegen. Die Zuordnung steht in `INFLUX_SENSOR_*`-Variablen, je eine pro Sensor, in der Schreibweise `Measurement:Field`.

Ingest liest genau dreizehn davon: `INFLUX_SENSOR_INVERTER_POWER`, `INFLUX_SENSOR_INVERTER_POWER_1` bis `INFLUX_SENSOR_INVERTER_POWER_5`, `INFLUX_SENSOR_GRID_IMPORT_POWER`, `INFLUX_SENSOR_GRID_EXPORT_POWER`, `INFLUX_SENSOR_BATTERY_CHARGING_POWER`, `INFLUX_SENSOR_BATTERY_DISCHARGING_POWER`, `INFLUX_SENSOR_WALLBOX_POWER`, `INFLUX_SENSOR_HEATPUMP_POWER` und `INFLUX_SENSOR_HOUSE_POWER`. Alle anderen `INFLUX_SENSOR_*`-Variablen ignoriert Ingest.

Ignoriert heißt hier nur: Sie gehen nicht in die Berechnung ein. Weitergereicht wird trotzdem alles, denn Ingest schreibt jeden eingehenden Messwert unverändert in die InfluxDB, auch den von Sensoren, die es gar nicht kennt.

Die Namen und ihre Bedeutung sind dieselben wie beim Dashboard, beschrieben unter [Sensor-Konfiguration](/docs/referenz/dashboard/sensor-konfiguration/).

```properties title="Beispiel"
INFLUX_SENSOR_INVERTER_POWER_1=SENEC:inverter_power
INFLUX_SENSOR_INVERTER_POWER_2=Garage:inverter_power
INFLUX_SENSOR_GRID_IMPORT_POWER=SENEC:grid_power_plus
INFLUX_SENSOR_GRID_EXPORT_POWER=SENEC:grid_power_minus
INFLUX_SENSOR_HOUSE_POWER=SENEC:house_power
```

Ein Sensor ohne Variable fehlt in der Strombilanz. Gerechnet wird nur für Zeitpunkte, zu denen jeder konfigurierte Sensor einen Wert hat. `INFLUX_SENSOR_HOUSE_POWER` geht nicht in die Rechnung ein, sondern gibt das Ziel für das Ergebnis vor. Ohne diese Variable hat der berechnete Wert keinen Platz, es sei denn, `INFLUX_SENSOR_HOUSE_POWER_CALCULATED` ist gesetzt.

> **HELIOS**
>
>
> HELIOS übernimmt die Zuordnungen aus _Konfiguration → Sensoren_ und gibt Ingest davon die Sensoren mit, die in die Berechnung eingehen.
>

### `INFLUX_EXCLUDE_FROM_HOUSE_POWER`<span class="badge optional"></span>

Komma-getrennte Liste von Sensoren, ohne das Präfix `INFLUX_SENSOR_`. [Dieselbe Variable steht beim Dashboard](/docs/referenz/dashboard/sensor-konfiguration/#influx_exclude_from_house_power), und beide Dienste brauchen denselben Wert.

Die Liste gehört zum Dashboard: Es zieht die aufgeführten Sensoren bei der Anzeige vom Hausverbrauch ab. Ingest muss das wissen, um richtig zu rechnen. Was das Dashboard später abzieht, lässt Ingest schon in der Formel weg, und der Anteil des Sensors steckt weiterhin im berechneten Hausverbrauch. Ohne die Variable rechnet Ingest mit allen konfigurierten Sensoren.

Bekommen die beiden Dienste verschiedene Werte, zählt der Verbraucher doppelt oder gar nicht.

```properties title="Beispiel"
INFLUX_EXCLUDE_FROM_HOUSE_POWER=HEATPUMP_POWER
```

> **HELIOS**
>
>
> HELIOS setzt die Variable, sobald ein Sensor unter _Konfiguration → Sensoren_ die Option **Aus Hausverbrauch herausrechnen** trägt. Dashboard und Ingest bekommen dieselbe Liste.
>

## Token, Bucket und Organisation

Ingest braucht weder `INFLUX_TOKEN` noch `INFLUX_BUCKET` noch `INFLUX_ORG`. Ein Kollektor schickt seine Messwerte an dieselbe Schnittstelle wie an eine InfluxDB, und dabei liegen Token, Bucket und Organisation im Request. Ingest nimmt sie von dort und reicht sie unverändert an die InfluxDB weiter. Es schreibt also mit dem Token des jeweiligen Kollektors.

## Speicherort der Datenbank

Die SQLite-Datenbank liegt im Container unter `/app/data`. Wohin dieses Verzeichnis auf dem Host zeigt, entscheidet die Docker-Konfiguration. Eine Umgebungsvariable liest Ingest dafür nicht.

> **HELIOS**
>
>
> HELIOS fragt den Speicherort unter _Konfiguration → Grundeinstellungen → Speicherorte_ ab.
>
