# Konfiguration des MQTT-Collectors

> Die Umgebungsvariablen des MQTT-Collectors, vom Zugang zum Broker über die abonnierten Topics bis zur Verbindung mit der InfluxDB.

Der MQTT-Collector wird über Umgebungsvariablen konfiguriert.

Seit Version 0.8.0 prüft er sie beim Start und startet bei einem Fehler nicht. Das Protokoll nennt dann die Variable, die zu korrigieren ist. Frühere Versionen haben manche dieser Fehler übergangen und still einen falschen oder gar keinen Wert geschrieben.

## Umgebungsvariablen

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

Hostname des MQTT-Brokers, bei dem der Collector die Topics abonniert. Das kann die IP-Adresse eines lokal erreichbaren ioBroker sein, aber auch die Domain eines externen Brokers.

Hier gehört nur der Host hin, **kein** `http://` oder `https://` und keine Portnummer. Der Port steht getrennt in `MQTT_PORT`.

```properties title="Beispiel"
MQTT_HOST=192.168.178.31
```

> **HELIOS**
>
>
> HELIOS fragt den Hostnamen unter _Konfiguration → Datenquellen → MQTT-Collector_ ab. Ohne Eintrag lässt HELIOS den Collector weg.
>

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

Port des MQTT-Brokers, eine Ganzzahl. Ohne TLS lauscht ein Broker üblicherweise auf `1883`, mit TLS auf `8883`. Ob der Collector TLS spricht, entscheidet aber nicht der Port, sondern `MQTT_SSL`. Beides muss zusammenpassen.

```properties title="Beispiel"
MQTT_PORT=1883
```

> **HELIOS**
>
>
> HELIOS fragt den Port unter _Konfiguration → Datenquellen → MQTT-Collector_ ab, vorbelegt mit `1883`. Das Feld lässt sich nicht leeren, denn der Collector hat keinen eigenen Standardwert.
>

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

Sichert die Verbindung zum Broker mit TLS ab. Erlaubt sind `true` und `false`, jeder andere Wert gilt als `false`. Standardwert ist `false`, denn ein lokaler ioBroker verlangt TLS üblicherweise nicht.

```properties title="Beispiel"
MQTT_SSL=true
```

> **HELIOS**
>
>
> HELIOS bietet dafür einen Schalter unter _Konfiguration → Datenquellen → MQTT-Collector_, standardmäßig aus.
>

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

Benutzername für den Zugriff auf den MQTT-Broker. Nötig ist er nur, wenn der Broker eine Anmeldung verlangt. Ohne die Variable meldet sich der Collector ohne Zugangsdaten an.

```properties title="Beispiel"
MQTT_USERNAME=solectrus
```

> **HELIOS**
>
>
> HELIOS fragt den Benutzernamen unter _Konfiguration → Datenquellen → MQTT-Collector_ ab.
>

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

Passwort für den Zugriff auf den MQTT-Broker. Nötig ist es nur, wenn der Broker eine Anmeldung verlangt. Ohne die Variable meldet sich der Collector ohne Zugangsdaten an.

```properties title="Beispiel"
MQTT_PASSWORD=my-mqtt-password
```

> **HELIOS**
>
>
> HELIOS fragt das Passwort unter _Konfiguration → Datenquellen → MQTT-Collector_ ab.
>

### `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 automatisch: normalerweise `influxdb`, bei aktivem [Ingest-Dienst](/docs/referenz/ingest/) stattdessen `ingest`. Nur bei einer externen InfluxDB fragt HELIOS ihn unter _Konfiguration → Grundeinstellungen → InfluxDB_ ab.
>

### `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. Nur bei einer externen InfluxDB fragt HELIOS das Protokoll ab.
>

### `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 automatisch: `8086` für InfluxDB, `4567` beim Umweg über den [Ingest-Dienst](/docs/referenz/ingest/). Nur bei einer externen InfluxDB fragt HELIOS ihn ab.
>

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

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

Passt der Token nicht, weist InfluxDB jeden Schreibzugriff ab. Der Collector läuft dann weiter, protokolliert aber Fehler, und im Dashboard bleiben die Kurven leer.

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

> **HELIOS**
>
>
> HELIOS gibt dem Collector den Schreib-Token, siehe [`INFLUX_TOKEN_WRITE`](/docs/referenz/helios/konfiguration/#influx_token_write). Lese- oder Admin-Zugriff bekommt er nicht.
>

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

Organisation in InfluxDB, unter der die Messwerte gespeichert werden. 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`, mehr als eine braucht es nicht.

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

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

> **HELIOS**
>
>
> HELIOS gibt `solectrus` vor, einzustellen gibt es nichts. Nur bei einer externen InfluxDB fragt HELIOS den Namen der vorhandenen Organisation ab.
>

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

Bucket in InfluxDB, in den der Collector die Messwerte 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`.

Der Name muss zu dem Bucket passen, der in InfluxDB existiert, und zu dem, aus dem das Dashboard liest. Gibt es ihn nicht, lehnt InfluxDB die Schreibzugriffe ab.

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

> **HELIOS**
>
>
> HELIOS gibt `solectrus` vor, einzustellen gibt es nichts. Nur bei einer externen InfluxDB fragt HELIOS den Namen des vorhandenen Buckets ab.
>

### `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 des Collectors. 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`.
>

## Topics

Für jedes Topic, das der MQTT-Collector abonnieren soll, muss ein Mapping definiert werden. Ein Mapping besteht aus mehreren Umgebungsvariablen, die mit dem Präfix `MAPPING_X_` beginnen, wobei `X` eine eindeutige Zahl sein muss.

Ein Mapping muss kein Topic abonnieren. Ab Version 0.8.0 berechnet es seinen Wert wahlweise aus anderen Mappings.

Eine ausführliche Beschreibung eines Mappings findet sich auf der folgenden Seite: \
[Abonnieren von Topics](/docs/referenz/mqtt-collector/topics/).
