# Architektur von SOLECTRUS

> Woraus SOLECTRUS besteht: die Docker-Container vom Dashboard über die Datenbanken bis zu den Kollektoren, und was HELIOS davon verwaltet.

SOLECTRUS ist **self-hosted**: Es läuft vollständig auf einem eigenen Server, meist einem kleinen Linux-Rechner im Haus. Einen SOLECTRUS-Cloud-Dienst gibt es nicht, die Anlagendaten bleiben dort, wo der Server steht.

Technisch besteht SOLECTRUS aus mehreren Docker-Containern, die zusammenspielen. Einer davon nimmt eine Sonderrolle ein: **HELIOS**, eine Web-App, die alle anderen Container im Browser installiert und konfiguriert. Mehr dazu unter [HELIOS](#helios).

![Architektur von SOLECTRUS](@assets/architektur.svg)

> **Direkt zur Installation**
>
>
> Der [Ablauf der Installation](/docs/referenz/helios/#helios-installieren) ist bei HELIOS beschrieben. Diese Seite erklärt vorher, woraus SOLECTRUS besteht.
>

## Die Komponenten

Jede Komponente läuft in einem eigenen Docker-Container, einzeln installiert werden sie aber nicht – das erledigt HELIOS. Ein Überblick hilft trotzdem beim Lesen der Protokolle und beim Nachschlagen in der [Referenz](/docs/referenz/). Zu den Diensten gehören:

- [Dashboard-App](/docs/referenz/dashboard/), der Hauptbestandteil mit der Benutzeroberfläche
- [InfluxDB](/docs/referenz/influxdb/), die Zeitreihendatenbank für Messwerte
- [PostgreSQL](/docs/referenz/postgresql/), die Datenbank für alle anderen Daten (z.B. Strompreise, Einstellungen und Aggregationen in Form von Tageszusammenfassungen)
- [Redis](/docs/referenz/redis/), eine In-Memory-Datenbank, in der das Dashboard seinen Cache ablegt
- Verschiedene _Kollektoren_, mit denen Messwerte eingesammelt werden. Der [SENEC-Collector](/docs/referenz/senec-collector/) ruft beispielsweise Daten vom SENEC-Speicher ab, der [MQTT-Collector](/docs/referenz/mqtt-collector/) holt sie von einem MQTT-Broker. Stromzähler liest der [Shelly-Collector](/docs/referenz/shelly-collector/) aus. Ein [Forecast-Collector](/docs/referenz/forecast-collector/) sagt die PV-Erzeugung voraus.
- [CSV-Importer](/docs/referenz/csv-importer/), der historische Messwerte im CSV-Format einmalig nach InfluxDB überträgt. Ihn startet HELIOS nur auf Anforderung.
- [Power-Splitter](/docs/referenz/power-splitter/), der die Aufteilung des Netzbezugs auf verschiedene Verbraucher berechnet
- [Ingest](/docs/referenz/ingest/), der die Messwerte der Kollektoren entgegennimmt und daraus den Hausverbrauch neu berechnet
- [Watchtower](/docs/referenz/watchtower/), der neue Versionen der Docker-Images einspielt

Die Container sind per Docker Compose in einem Netzwerk verbunden und kommunizieren untereinander. Dazu kommt [Traefik](https://traefik.io/) als Reverse Proxy, sobald das Dashboard unter einer eigenen Domain erreichbar sein soll. Traefik holt dann auch das HTTPS-Zertifikat.

Welche Kollektoren dabei sind, hängt von den angebundenen Geräten ab. HELIOS nimmt genau die auf, die zur Konfiguration passen. Den Ingest etwa nur dann, wenn ein Erzeuger als Balkonkraftwerk markiert ist, die Kollektoren auf demselben Server laufen und kein Sensor seine Werte aus einer externen Quelle bezieht.

Daneben gibt es den [Tibber-Collector](/docs/referenz/tibber-collector/) für Strompreise und den [SENEC-Charger](/docs/referenz/senec-charger/) für die netzgeführte Beladung eines SENEC-Speichers. Diese beiden richtet HELIOS nicht ein, sie laufen nur in bestehenden Installationen weiter.

## HELIOS

[HELIOS](/docs/referenz/helios/) ist eine Web-App, über die die gesamte Installation und Konfiguration im Browser läuft. Ein einziger Befehl im Terminal holt HELIOS auf den Server, alles Weitere geschieht in der Oberfläche: HELIOS installiert die übrigen Container, richtet sie anhand der Konfiguration ein und hält sie aktuell. HELIOS gehört dabei selbst zu den Diensten, die es verwaltet, und läuft als eigener Container mit.

Die Gesamtheit aller Dienste wird durch zwei Dateien beschrieben: `compose.yaml` und `.env`. Beide schreibt HELIOS und erzeugt sie nach jeder Änderung im Browser neu. Ein manuelles Bearbeiten ist weder erforderlich noch wäre es sinnvoll, da die Dateien von HELIOS automatisch erzeugt und immer wieder überschrieben werden.

## Referenz

Jede Komponente wird über Umgebungsvariablen konfiguriert. Welche davon nötig sind und welche Werte sie bekommen, leitet HELIOS aus der Konfiguration ab.

Die [Referenz](/docs/referenz/) beschreibt sie dennoch alle. Dort steht, was die einzelnen Variablen bewirken und was die Dienste tun. Das hilft beim Nachvollziehen einer bestehenden Installation und bei der Fehlersuche.
