Zum Inhalt springen

Was ist HELIOS?

HELIOS ist eine Web-App, die neben SOLECTRUS auf demselben Server läuft. Sie installiert SOLECTRUS und hält die Konfiguration danach aktuell.

Die Installation startet dieser Befehl im Terminal des Servers:

Terminal-Fenster
curl -fsSL https://raw.githubusercontent.com/solectrus/helios/main/bootstrap/install.sh | bash

Das Skript geht diese Schritte durch:

  1. Docker – Fehlt es, bietet das Skript an, es über get.docker.com nachzuinstallieren.
  2. Verzeichnis – Zur Wahl stehen /opt/solectrus (als root), ~/solectrus und das aktuelle Verzeichnis. Dort landen compose.yaml, .env und die Daten aller Dienste, auch die Datenbanken. Für eine andere Platte: das Verzeichnis vorher anlegen, hineinwechseln und das Skript dort starten.
  3. Bestehende Installation – Läuft SOLECTRUS auf dem Server schon, erkennt das Skript die Dienste und bietet an, HELIOS dort einzutragen, statt eine neue Installation anzulegen.
  4. Start – Das Skript erzeugt ein Admin-Passwort, startet die Dienste und nennt am Ende die Adresse: http://<server>:3999, dazu das Passwort. Es steht auch in der .env.

Die Konfiguration folgt danach im Browser. Der Quelltext des Skripts lässt sich vorher lesen: install.sh.

SOLECTRUS besteht aus mehreren Docker-Containern, die per docker compose zusammenlaufen. Beschrieben werden sie in zwei Dateien: compose.yaml listet die Dienste, .env enthält die Umgebungsvariablen.

Beide Dateien gehören HELIOS. Es erzeugt sie nach jeder Änderung an der Konfiguration komplett neu. Ansehen lassen sie sich im Browser, unter Konfiguration am unteren Rand.

Die Dienste selbst wissen nichts von HELIOS. Sie lesen nur ihre Umgebungsvariablen. HELIOS entscheidet lediglich, welche Variablen dabei mit welchen Werten in der .env landen.

  • Sensoren – Welche Messwerte SOLECTRUS führt und woher sie kommen. Rund 50 Sensoren stehen zur Auswahl, von der PV-Erzeugung bis zur Wallbox. Zu jedem Sensor zeigt HELIOS den aktuellen Messwert aus der InfluxDB, so lässt sich die Zuordnung sofort prüfen.
  • Datenquellen – Woher die Messwerte kommen: SENEC, Shelly, MQTT oder eine Prognose für die PV-Erzeugung. Bei den Geräten prüft HELIOS auf Knopfdruck, ob sie erreichbar sind und die Zugangsdaten stimmen.
  • Grundeinstellungen – Zeitzone, Inbetriebnahme der Anlage, Zugriffsschutz, Farbschema, CO₂-Faktor, eigene Domain samt HTTPS, Speicherorte, Software-Stand und der Betriebsmodus.

Die Übersicht aller Container mit Status, Version und Aktualität. Von hier aus lassen sich einzelne Dienste starten und stoppen oder gleich alle auf einmal. Aktualisieren gibt es nur je Dienst: HELIOS lädt dann das Image neu und erzeugt den Container neu. Die Protokolle jedes Dienstes lassen sich direkt im Browser lesen.

Sicherungen von Konfiguration und Messwerten, siehe Erstellen von Datensicherungen.

Läuft SOLECTRUS auf dem Server bereits, ist kein Neuanfang nötig. Das Installationsskript erkennt die laufenden Dienste und trägt HELIOS in deren compose.yaml ein, statt eine neue anzulegen.

Beim ersten Aufruf im Browser liest HELIOS compose.yaml und .env ein und übernimmt die bestehende Konfiguration, samt der Sensor-Zuordnungen. Vorher legt es beide Dateien als .bak zur Seite.

HELIOS gehört zu den Diensten, die es verwaltet: Es steht mit einem eigenen Service in der compose.yaml, die es selbst schreibt, und bekommt seine Updates über Watchtower wie jeder andere Dienst.

Die anderen Dienste steuert HELIOS über den Docker-Socket des Hosts, der als Volume in den Container gereicht wird:

volumes:
- /var/run/docker.sock:/var/run/docker.sock

Damit kann HELIOS Container starten, stoppen, neu erzeugen und ihre Protokolle lesen. Ein entfernter Docker-Host ist deshalb nicht möglich, siehe Was HELIOS nicht kann.

Dazu kommt das cgroup-Verzeichnis des Hosts, nur lesend:

volumes:
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro

Darüber liest HELIOS den tatsächlichen Speicher- und CPU-Verbrauch des Hosts. Ohne dieses Volume sieht ein HELIOS-Container in einem Proxmox-LXC nicht die Werte des Containers, sondern die des physischen Knotens.

Das Verzeichnis, in dem compose.yaml und .env liegen, ist im Container als /data eingehängt. Dort schreibt HELIOS beide Dateien, und dort legt es auch seine eigenen Daten ab:

/data/compose.yaml
/data/.env
/data/helios/config.yaml
/data/helios/primary.sqlite3

In config.yaml steht die Konfiguration, so wie sie im Browser eingegeben wurde. Sie ist die Quelle: compose.yaml und .env erzeugt HELIOS daraus, sobald sich die config.yaml geändert hat. Gesichert wird bei einer Datensicherung ebenfalls die config.yaml.

Die SQLite-Datenbank hält den übrigen Zustand von HELIOS, etwa den Verlauf der Datensicherungen.

Ohne eigene Domain veröffentlicht HELIOS den Port 3999 auf dem Host. Die Oberfläche läuft dann über HTTP, erreichbar unter http://<server>:3999.

Mit einer eigenen Domain samt HTTPS, eingerichtet unter Konfiguration → Grundeinstellungen → Eigene Domain, veröffentlicht der HELIOS-Container selbst keinen Port mehr. Stattdessen nimmt Traefik den Verkehr an und reicht ihn weiter. Die Oberfläche liegt dann auf derselben Domain wie das Dashboard, weiterhin unter Port 3999, aber per HTTPS und mit einem Zertifikat von Let’s Encrypt: https://<domain>:3999.

Zu den Diensten gehört Watchtower. Es prüft regelmäßig auf neue Versionen und installiert sie automatisch, HELIOS selbst eingeschlossen. Näheres unter Installation von Updates.

HELIOS verwaltet einen Docker-Host über dessen lokalen Docker-Socket. Daraus ergeben sich ein paar Grenzen:

  • Kein Docker Swarm, kein Kubernetes. HELIOS arbeitet mit docker compose, nicht mit anderen Orchestrierern.
  • Keine externen Datenbanken. PostgreSQL, Redis und InfluxDB laufen auf demselben Host. Einzige Ausnahme ist eine entfernte InfluxDB im Betriebsmodus Nur Kollektoren.
  • Kein entfernter Docker-Host. HELIOS braucht den lokalen docker.sock.
  • Keine beliebigen Images. HELIOS erzeugt die compose.yaml vollständig neu. Beim Übernehmen einer bestehenden Installation muss es daher jeden Dienst kennen. Stößt es auf ein fremdes Image, verweigert es den Import und nennt den Dienst beim Namen. Ein paar bekannte Zusatzdienste wie dozzle lässt es stehen und reicht sie unverändert durch.
  • Noch kein Tibber-Collector, kein SENEC-Charger. Für diese beiden Dienste gibt es bisher keine Eingabemaske. Neu hinzufügen kann HELIOS sie nicht. In einer bestehenden Installation laufen sie weiter: Beim Übernehmen liest HELIOS ihre Dienste samt Variablen ein, merkt sie sich und schreibt sie unverändert in jede neue compose.yaml und .env. Siehe Tibber-Collector und SENEC-Charger.

Ein gemischter Betrieb ist trotzdem möglich: Was HELIOS nicht abdeckt, läuft daneben weiter. HELIOS braucht lediglich die alleinige Hoheit über compose.yaml und .env der SOLECTRUS-Dienste. Diese dürfen also nicht zusätzlich von einem anderen Werkzeug verwaltet werden.

HELIOS erzeugt unter Support auf Knopfdruck ein Support-Paket mit Konfiguration, Protokollen und einer Momentaufnahme des Systems. Wozu es dient, steht unter Support.

HELIOS ist in Ruby on Rails implementiert, der Quelltext ist auf GitHub verfügbar:
github.com/solectrus/helios