# Konfiguration des Power-Splitters

> Die Umgebungsvariablen des Power-Splitters, vom Berechnungsintervall über InfluxDB und PostgreSQL bis zu den Sensoren.

Der Power-Splitter wird über Umgebungsvariablen konfiguriert.

## Umgebungsvariablen

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

Abstand zwischen zwei Berechnungen in Sekunden, eine Ganzzahl. Standardwert ist `3600`, also eine Stunde. Kleinere Werte lassen den Power-Splitter häufiger laufen. Genauer wird die Berechnung dadurch nicht, nur aktueller, und das sieht man ausschließlich am laufenden Tag im Dashboard.

Werte unter `300` haben keine Wirkung: Der Power-Splitter hebt sie auf `300` an, also auf fünf Minuten.

```properties title="Beispiel"
POWER_SPLITTER_INTERVAL=300
```

> **HELIOS**
>
>
> HELIOS trägt fest `300` ein. Einzustellen gibt es nichts.
>

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

Hostname des InfluxDB-Servers. 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`.

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

> **HELIOS**
>
>
> HELIOS setzt den Hostnamen fest auf `influxdb`, auch bei aktivem [Ingest-Dienst](/docs/referenz/ingest/). 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=https
```

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

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

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

```properties title="Beispiel"
INFLUX_PORT=443
```

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

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

Token, mit dem sich der Power-Splitter bei InfluxDB anmeldet. Er muss dort existieren und das Recht haben, den angegebenen Bucket zu **lesen** und in ihn zu **schreiben**. Ein reiner Schreib-Token genügt nicht: Der Power-Splitter holt sich die Messwerte der Sensoren aus InfluxDB, rechnet und legt das Ergebnis dort wieder ab.

Passt der Token nicht, weist InfluxDB die Zugriffe ab. Der Power-Splitter protokolliert Fehler, und im Dashboard bleibt die Aufteilung des Netzbezugs leer.

```properties title="Beispiel"
INFLUX_TOKEN=my-super-secret-readwrite-token
```

> **HELIOS**
>
>
> HELIOS gibt dem Power-Splitter einen Token mit Lese- und Schreibrecht, siehe [`INFLUX_TOKEN_READWRITE`](/docs/referenz/helios/konfiguration/#influx_token_readwrite). Den reinen Schreib-Token der Kollektoren bekommt er nicht.
>

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

Organisation in InfluxDB, in der die Messwerte liegen. Eine Organisation ist der Mandant, dem Benutzer, Buckets und Tokens gehören. InfluxDB legt sie [beim ersten Start](/docs/referenz/influxdb/konfiguration/) an. In einer SOLECTRUS-Installation heißt sie `solectrus`.

Der Name muss zu der Organisation passen, die in InfluxDB tatsächlich existiert. Ein anderer Wert benennt sie nicht um, er lässt den Power-Splitter nur ins Leere greifen.

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

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

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

Bucket in InfluxDB, aus dem der Power-Splitter die Messwerte liest und in den er seine Ergebnisse schreibt. Ein Bucket ist das, was anderswo die Datenbank wäre: ein benannter Speicher mit eigener Aufbewahrungsdauer. Auch ihn legt InfluxDB [beim ersten Start](/docs/referenz/influxdb/konfiguration/) an. Eine SOLECTRUS-Installation kommt mit einem einzigen aus, er heißt `solectrus`.

Es muss derselbe Bucket sein, in den die Kollektoren schreiben und aus dem das Dashboard liest. Ein anderer Name führt den Power-Splitter auf einen leeren oder nicht vorhandenen Bucket, und er hat nichts zu rechnen.

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

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

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

Adresse des Redis-Cache, den das Dashboard nutzt. Der Power-Splitter leert ihn einmalig, nachdem er die Vergangenheit durchgerechnet hat. Sonst zeigt das Dashboard weiter die alten, zwischengespeicherten Werte.

Ohne die Variable schreibt der Power-Splitter eine Warnung ins Protokoll und lässt den Cache stehen. Er ist dann [von Hand zu leeren](/docs/referenz/redis/#cache-leeren).

```properties title="Beispiel"
REDIS_URL=redis://redis:6379/1
```

> **HELIOS**
>
>
> HELIOS setzt die Adresse fest auf `redis://redis:6379/1`. Einzustellen gibt es nichts.
>

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

Hostname der PostgreSQL-Datenbank des Dashboards. Läuft sie im selben Docker-Netzwerk, ist das der Name des Docker-Services, also `postgresql`.

Wirksam nur zusammen mit `DB_USER` und `DB_PASSWORD`. Der Power-Splitter braucht die drei, um nach einer Neuberechnung die Tageszusammenfassungen des Dashboards zu löschen. Fehlt eine davon, schreibt er eine Warnung ins Protokoll, und die Zusammenfassungen sind im Dashboard von Hand zurückzusetzen.

```properties title="Beispiel"
DB_HOST=postgresql
```

> **HELIOS**
>
>
> HELIOS setzt den Hostnamen fest auf `postgresql`. Einzustellen gibt es nichts.
>

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

Benutzername für die PostgreSQL-Datenbank, üblicherweise `postgres`.

Wirksam nur zusammen mit `DB_HOST` und `DB_PASSWORD`. Fehlt eine der drei, kann der Power-Splitter die Tageszusammenfassungen des Dashboards nicht löschen.

```properties title="Beispiel"
DB_USER=postgres
```

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

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

Passwort für die PostgreSQL-Datenbank.

Wirksam nur zusammen mit `DB_HOST` und `DB_USER`. Fehlt eine der drei, kann der Power-Splitter die Tageszusammenfassungen des Dashboards nicht löschen.

```properties title="Beispiel"
DB_PASSWORD=ExAmPl3PA55W0rD
```

> **HELIOS**
>
>
> HELIOS reicht das Passwort durch, das es bei der Installation für PostgreSQL erzeugt hat, siehe [`POSTGRES_PASSWORD`](/docs/referenz/postgresql/konfiguration/). Einzustellen gibt es nichts.
>

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

Datum der Inbetriebnahme der PV-Anlage im Format `JJJJ-MM-TT`. Es gibt der Neuberechnung einen definierten Startpunkt.

Ohne die Variable sucht der Power-Splitter den ältesten Tag, für den Messwerte vorliegen, und beginnt dort. Liegt der weit vor der Inbetriebnahme, rechnet er unnötig lange.

```properties title="Beispiel"
INSTALLATION_DATE=2020-11-27
```

> **HELIOS**
>
>
> HELIOS fragt das Datum unter _Konfiguration → Grundeinstellungen → PV-Anlage_ ab, es ist ein Pflichtfeld.
>

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

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

Sie bestimmt, wo ein Tag beginnt und endet, denn der Power-Splitter rechnet tageweise. Eine falsche Zeitzone verschiebt die Tagesgrenzen und damit die Aufteilung an den Rändern.

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

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

## Sensor-Definition

Der Power-Splitter nutzt dieselben Sensoren wie das Dashboard, beschrieben unter [Sensor-Konfiguration](/docs/referenz/dashboard/sensor-konfiguration/). Im Einzelnen sind das diese Variablen:

- `INFLUX_SENSOR_GRID_IMPORT_POWER`
- `INFLUX_SENSOR_HOUSE_POWER`
- `INFLUX_SENSOR_WALLBOX_POWER`
- `INFLUX_SENSOR_HEATPUMP_POWER`
- `INFLUX_SENSOR_BATTERY_CHARGING_POWER`
- `INFLUX_SENSOR_CUSTOM_POWER_01`
- `INFLUX_SENSOR_CUSTOM_POWER_02`
- `INFLUX_SENSOR_CUSTOM_POWER_03`
- `INFLUX_SENSOR_CUSTOM_POWER_04`
- `INFLUX_SENSOR_CUSTOM_POWER_05`
- `INFLUX_SENSOR_CUSTOM_POWER_06`
- `INFLUX_SENSOR_CUSTOM_POWER_07`
- `INFLUX_SENSOR_CUSTOM_POWER_08`
- `INFLUX_SENSOR_CUSTOM_POWER_09`
- `INFLUX_SENSOR_CUSTOM_POWER_10`
- `INFLUX_SENSOR_CUSTOM_POWER_11`
- `INFLUX_SENSOR_CUSTOM_POWER_12`
- `INFLUX_SENSOR_CUSTOM_POWER_13`
- `INFLUX_SENSOR_CUSTOM_POWER_14`
- `INFLUX_SENSOR_CUSTOM_POWER_15`
- `INFLUX_SENSOR_CUSTOM_POWER_16`
- `INFLUX_SENSOR_CUSTOM_POWER_17`
- `INFLUX_SENSOR_CUSTOM_POWER_18`
- `INFLUX_SENSOR_CUSTOM_POWER_19`
- `INFLUX_SENSOR_CUSTOM_POWER_20`
- `INFLUX_EXCLUDE_FROM_HOUSE_POWER`

`INFLUX_SENSOR_GRID_IMPORT_POWER` und `INFLUX_SENSOR_HOUSE_POWER` sind Pflicht. Fehlt eine der beiden, bricht der Power-Splitter beim Start ab. Alle übrigen sind optional, und je mehr davon gesetzt sind, desto feiner teilt er den Netzbezug auf.

## Measurement

Der Power-Splitter schreibt seine Berechnungen in ein neues Measurement mit der (unveränderlichen) Bezeichnung `power_splitter`. Eine eigene Variable für das Measurement ist daher nicht nötig.
