# Konfiguration von InfluxDB

> Die Umgebungsvariablen von InfluxDB, von der Ersteinrichtung beim ersten Start bis zu den Zugangsdaten der übrigen Dienste.

InfluxDB wird über Umgebungsvariablen konfiguriert. Der Container stammt allerdings nicht von SOLECTRUS, sondern ist das offizielle InfluxDB-2-Image.

## Umgebungsvariablen

### `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 von InfluxDB. 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`.
>

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

Schaltet die Ersteinrichtung ein. Erlaubt sind `setup` für eine neue Datenbank und `upgrade` für die Migration einer InfluxDB 1.x. SOLECTRUS verwendet `setup`.

`setup` greift nur, solange es noch keine Datenbank gibt. Liegt unter [`INFLUX_VOLUME_PATH`](#influx_volume_path) bereits eine, überspringt InfluxDB die Einrichtung und startet einfach mit den vorhandenen Daten. Der Wert darf also dauerhaft stehen bleiben, er richtet kein zweites Mal etwas ein.

Fehlt die Variable dagegen ganz, richtet InfluxDB auch auf einem leeren Datenpfad nichts ein. Die übrigen `DOCKER_INFLUXDB_INIT_*`-Variablen bleiben dann wirkungslos.

```properties title="Beispiel"
DOCKER_INFLUXDB_INIT_MODE=setup
```

> **HELIOS**
>
>
> HELIOS setzt den Wert fest auf `setup`. Einzustellen gibt es nichts.
>

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

Benutzername des Administrators für den Login an der [Web-Oberfläche](/docs/referenz/influxdb/direktzugriff/). InfluxDB legt den Administrator beim ersten Start an.

Im Setup-Modus verlangt InfluxDB den Benutzernamen. Fehlt er, bricht der Container mit einer Fehlermeldung ab. Nach dem ersten Start ändert die Variable nichts mehr.

```properties title="Beispiel"
DOCKER_INFLUXDB_INIT_USERNAME=admin
```

> **HELIOS**
>
>
> HELIOS setzt den Benutzernamen fest auf `admin`. Einzustellen gibt es nichts.
>

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

Passwort des Administrators für den Login an der [Web-Oberfläche](/docs/referenz/influxdb/direktzugriff/). Im Container heißt die Variable `DOCKER_INFLUXDB_INIT_PASSWORD`. Auch das Passwort verlangt InfluxDB im Setup-Modus, ohne bricht der Container ab.

InfluxDB übernimmt das Passwort beim ersten Start. Wer es später in der Konfiguration überschreibt, ändert damit nicht das Passwort, sondern verliert nur die Notiz, wie es lautet. Ändern lässt es sich in der Web-Oberfläche von InfluxDB.

```properties title="Beispiel"
INFLUX_PASSWORD=ExAmPl3PA55W0rD
```

> **HELIOS**
>
>
> HELIOS erzeugt das Passwort bei der Installation. Einzustellen gibt es nichts.
>

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

Organisation, mit der InfluxDB Benutzer, Buckets und Tokens gruppiert. SOLECTRUS verwendet `solectrus`, weitere Organisationen braucht es nicht. Im Container heißt die Variable `DOCKER_INFLUXDB_INIT_ORG`.

Angelegt wird die Organisation beim ersten Start. Ein späterer Name benennt sie nicht um. Die anderen Dienste lesen `INFLUX_ORG` direkt und greifen dann ins Leere.

```properties title="Beispiel"
INFLUX_ORG=solectrus
```

> **HELIOS**
>
>
> HELIOS gibt `solectrus` vor. Einzustellen gibt es nichts.
>

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

Bucket für die Messwerte, also die eigentliche Datenbank. SOLECTRUS verwendet nur **einen** Bucket, deshalb heißt er `solectrus`. Im Container heißt die Variable `DOCKER_INFLUXDB_INIT_BUCKET`.

Auch der Bucket entsteht beim ersten Start. Ein späterer Name benennt ihn nicht um. Die Kollektoren und das Dashboard lesen `INFLUX_BUCKET` direkt und greifen dann ins Leere.

```properties title="Beispiel"
INFLUX_BUCKET=solectrus
```

> **HELIOS**
>
>
> HELIOS gibt `solectrus` vor. Einzustellen gibt es nichts.
>

> **Achtung**
>
>
> InfluxDB legt den Bucket mit **unbegrenzter** Aufbewahrung an (Retention Policy: `forever`). Nur so bleiben die historischen Daten dauerhaft erhalten. InfluxDB erlaubt es, die Aufbewahrung später zu ändern. Für SOLECTRUS darf das nicht geschehen.
>

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

Token mit Vollzugriff auf alles. InfluxDB legt ihn beim ersten Start mit genau diesem Wert an. HELIOS nutzt ihn für die Datensicherung und die Wiederherstellung. Im Container heißt die Variable `DOCKER_INFLUXDB_INIT_ADMIN_TOKEN`.

Fehlt sie, erzeugt InfluxDB selbst einen zufälligen Token. Der steht dann nirgends in der Konfiguration, und die Datensicherung fällt aus. Ein anderer Wert erzeugt keinen neuen Token, er sperrt HELIOS nur aus.

Die übrigen Dienste arbeiten nicht mit diesem Token, sondern mit je einem eigenen für Lesen, Schreiben oder beides. Die liest InfluxDB nicht, sie stehen bei [HELIOS](/docs/referenz/helios/konfiguration/#influxdb-tokens).

```properties title="Beispiel"
INFLUX_ADMIN_TOKEN=my-super-secret-admin-token
```

> **HELIOS**
>
>
> HELIOS erzeugt den Token bei der Installation. Einzustellen gibt es nichts.
>

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

Speichert die API-Tokens als Hash statt im Klartext. Erlaubt sind `true` und `false`. Den Standardwert bestimmt InfluxDB je nach Version: ab 2.9 ist das Hashing eingeschaltet, in 2.8 ausgeschaltet, ältere Versionen kennen die Option nicht.

Anders als die `DOCKER_INFLUXDB_INIT_*`-Variablen wertet InfluxDB sie bei jedem Start aus. Beim ersten Start mit `true` wandelt es alle gespeicherten Tokens um. Aus dem Hash lässt sich ein verlorener Token nicht mehr zurückholen, und ein Downgrade auf eine ältere InfluxDB löscht die Tokens.

```properties title="Beispiel"
INFLUXD_USE_HASHED_TOKENS=true
```

> **HELIOS**
>
>
> HELIOS setzt die Variable nicht. Nur beim Import einer bestehenden Installation übernimmt HELIOS einen dort vorhandenen Wert unverändert.
>

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

Pfad auf dem Host, in dem die Datenbank gespeichert wird. Er wird als Volume in den Container gemountet und sollte auf einem Datenträger mit ausreichend Speicherplatz liegen. InfluxDB selbst liest die Variable nicht.

Was hier steht, entscheidet über alles Weitere: Existiert am Pfad schon eine Datenbank, verwendet InfluxDB diese und überspringt die Ersteinrichtung. Andernfalls legt es eine neue an, und die `DOCKER_INFLUXDB_INIT_*`-Variablen kommen zum Zug.

```properties title="Beispiel"
INFLUX_VOLUME_PATH=/somewhere/solectrus/influxdb
```

> **HELIOS**
>
>
> HELIOS speichert die Datenbank unter `influxdb` im eigenen Datenverzeichnis. Einzustellen gibt es nichts. Nur beim Import einer bestehenden Installation übernimmt HELIOS einen abweichenden Pfad.
>
