Die Solar-Lokal-App ist eine hochgradig modulare, lokale Webanwendung zur Visualisierung, Analyse und intelligenten Steuerung von Energieanlagen (Photovoltaik, Batteriespeicher, Wechselrichter und Stromzähler) im eigenen Heimnetzwerk.
Die App arbeitet komplett cloudfrei, ist für den ressourcensparenden Betrieb auf Mini-PCs (z. B. via Proxmox LXC) optimiert und bietet eine moderne Steuerzentrale im Dark Glassmorphism Sci-Fi-Stil mit Neon-Akzenten.
Die App basiert auf einem physikalisch präzisen Modell eines DC-gekoppelten Systems. Im Gegensatz zu reinen AC-Systemen fließen die Energieströme hier auf unterschiedlichen Ebenen zusammen:
- Victron SmartSolar MPPTs: Laden die Batterie direkt auf der DC-Seite (Gleichstrom).
- Hoymiles HM1500 (über AhoyDTU): Wandelt PV-Energie direkt in AC-Wechselstrom für das Hausnetz um.
- Trucki2Shelly Gateway + Lader/Inverter (SUN): Entlädt die Batterie kontrolliert auf die AC-Seite (Wechselstrom) ins Hausnetz bzw. regelt die Nulleinspeisung.
- Shelly Pro 3EM: Misst den tatsächlichen Stromaustausch am Netzanschlusspunkt (3-phasig).
Um Fehlberechnungen und die Doppelzählung von Ladeleistungen zu vermeiden, ermittelt das Backend die tatsächliche Hauslast (House Consumption) nach folgender, physikalisch korrekter Formel:
Hinweis: Die DC-Ladeleistung der Victron MPPTs lädt direkt die Batterie und wird nicht direkt als Hauslast gezählt. Das Laden und Entladen der Batterie wird im animierten Energiefluss-Diagramm getrennt und überschneidungsfrei visualisiert:
- Laden (MPPT/DC): Eine diagonale Energiefluss-Linie führt direkt von den Solarpanels (PV) zur Batterie.
- Entladen (SUN/AC): Der Fluss läuft von der Batterie zurück ins Hausnetz.
Das Backend fragt die Geräte im lokalen Netzwerk via MQTT (über einen zentralen Mosquitto-Broker) und REST-APIs ab:
-
Shelly Pro 3EM (Netzzähler):
- 3-Phasen-Energiemessung (L1, L2, L3) für Wirkleistung, Spannung, Stromstärke und Leistungsfaktor (PF).
- Schnittstelle: MQTT oder direkte REST-Abfrage (
/rpc/EM.GetStatus) mit Fallback.
-
Hoymiles HM1500 + AhoyDTU:
-
Kanalgenaues Parsing: Die App parst die JSON-Payloads je Solarmodul-Kanal (
HM1500/ch1bisHM1500/ch4) für DC-Leistung, Spannung und Stromstärke, anstatt nur den aggregierten Kanal 0 anzuzeigen. - Wirkleistungslimit-Rücklesung direkt aus dem Topic
ack_pwr_limit.
-
Kanalgenaues Parsing: Die App parst die JSON-Payloads je Solarmodul-Kanal (
-
Trucki2Shelly Gateway:
-
Batterieleistung: Wird aus dem Topic
Trucki/ACDISPLAY(tatsächlicher Wechselrichter-Ausgang) bezogen, mit Fallback aufTrucki/ACSETPOINT. Dies behebt Messwert-Kopplungen, bei denen fälschlicherweise das RückmeldesignalTrucki/METER(Netz-Zähler) genutzt wurde. -
Lastkompensation: Dynamische Schätzung des Ladezustands (SoC) aus der Batteriespannung (
$16\text{S } \text{LiFePO}_4$ Kurve), korrigiert um den Spannungsabfall unter Last (Batteriestromstärke).
-
Batterieleistung: Wird aus dem Topic
-
Victron SmartSolar MPPTs (VenusOS Large):
- Direktes Abgreifen der DC-Ertragsdaten pro MPPT-Instanz via MQTT-Bridge-Topics (
N/<vrm_id>/solarcharger/<instance>/...).
- Direktes Abgreifen der DC-Ertragsdaten pro MPPT-Instanz via MQTT-Bridge-Topics (
-
Live-Dashboard mit animiertem Fluss:
- Ein interaktives SVG-Flussdiagramm verbindet Solarmodule, Wechselrichter, Batterie, Haus und Stromnetz.
- Die Animationsgeschwindigkeit und die Flussrichtung der Partikel (
stroke-dasharray) passen sich dynamisch und stufenlos den realen Watt-Leistungen an. - Richtungspfeile direkt auf den Linien ersetzen überflüssige doppelte Zahlenwerte für maximale Übersicht.
-
Batterie Wirkungsgrad-Kachel (Round-Trip-Efficiency):
- Errechnet tagesaktuell das Verhältnis der entnommenen AC-Energie zur geladenen DC-Energie:
$$\text{Effizienz %} = \frac{\text{Entladene AC-Energie (SUN) heute in kWh}}{\text{Geladene DC-Energie (MPPT) heute in kWh}} \times 100$$ - Farblich adaptive Anzeige (grün bei hoher Effizienz
$\ge 85%$ , cyan$\ge 70%$ , sonst orange) inklusive tagesaktueller kWh-Zähler für Ladung und Entladung.
- Errechnet tagesaktuell das Verhältnis der entnommenen AC-Energie zur geladenen DC-Energie:
-
Diagnose-Zentrale (Self-Tests & Raw Data):
- Automatisierter Selbsttest: Prüft auf Knopfdruck die Erreichbarkeit und Integrität des Backends, der MongoDB-Datenbank, des Hintergrund-Pollers, des MQTT-Brokers sowie aller 4 Energiekomponenten.
- Rohdaten-Tabellen: Direkte Einsicht in die zuletzt empfangenen JSON-Payloads und MQTT-Rohdaten aller Hardwaregeräte zur schnellen Fehlerdiagnose.
-
Integrationen & Konfiguration:
- Einstellungs-UI für MQTT-Broker (Server, Port, User, Passwort), InfluxDB-Verbindung und Victron-MPPT-Instanzen.
- Intelligenter Neustart: Das Backend startet Integrationsprozesse bei Einstellungsänderungen nur dann neu, wenn verbindungsrelevante Keys geändert wurden (z. B. IP-Adressen). Kleinere UI-Anpassungen unterbrechen den Datenfluss nicht.
Für detaillierte historische Analysen bietet das Projekt eine vollständige InfluxDB 2.x und Grafana Integration:
Im 15-Sekunden-Takt schreibt das Backend detaillierte, mehrdimensionale Datenpunkte in InfluxDB:
solar: Gesamtsystem-Metriken inkl.pv_power,grid_power,battery_power,house_power,battery_soc, sowie sekündlich berechneter Autarkie- und Eigenverbrauchsrate (autarky_pct,self_consumption_pct).shelly_phase: Einzelphasen-Leistung, -Spannung und -Strom (L1, L2, L3).hoymiles_ch: Modulspezifische Erträge der Kanäle CH1 bis CH4.victron_mppt: Ertragsdaten und Gerätestatus (Bulk, Absorption, Float) je MPPT-Laderegler.trucki: Detaillierte Batterie-Betriebsdaten (Zellspannungvbat, AC-Ausgang, ZEPC-Status, Temperatur).
- Übersichts-Dashboard (
solar-influxdb-dashboard.json): Visualisiert die wichtigsten KPIs des aktuellen Tages, den Leistungsverlauf und den Ladezustand der Batterie. - Geräte-Detail-Dashboard (
solar-devices-dashboard.json): Zeigt detaillierte Phasen-Belastungen des Shellys, Modul-Erträge des Hoymiles, Ladekurven der Victron MPPTs sowie Status-Metriken des Trucki-Gateways.
Styling-Highlights: Beide Dashboards sind im App-Neon-Design gestaltet (PV Gelb #FACC15, Netz Rot #F87171, Autarkie/Einspeisung Grün #10B981, Batterie Cyan #06B6D4, Haus Silber #cbd5e1), verwenden transparente Panel-Hintergründe und bieten gegenseitige Cross-Links für eine nahtlose Navigation.
Das Projekt liefert automatisierte Skripte im Verzeichnis deploy/proxmox/, um die Anwendung sicher und isoliert als LXC-Container unter Proxmox bereitzustellen.
- CPU: 2 vCPUs (reicht vollkommen aus).
- RAM: 1 GB (2 GB empfohlen für den initialen Build-Prozess).
- Speicher: 8 GB (der Speicherbedarf für MongoDB-Snapshots beträgt bei einem 15s-Intervall nur ca. 50 MB pro Monat).
-
Repository klonen & Code vorbereiten: Klonen Sie das Repository auf Ihrem lokalen Rechner und packen Sie die relevanten Verzeichnisse:
tar czf solar-dashboard.tar.gz --exclude='node_modules' --exclude='__pycache__' --exclude='.venv' --exclude='build' --exclude='.git' backend frontend deploy scp solar-dashboard.tar.gz root@<DEIN_PROXMOX_IP>:/root/
-
LXC-Container erstellen (auf dem Proxmox-Host): Legen Sie die Skripte
pve-create-lxc.shundinstall.shim Proxmox-Host unter/tmpab und führen Sie sie aus:bash pve-create-lxc.sh
Das Skript erstellt einen Debian-basierten LXC-Container, installiert MongoDB, Python 3, Node.js, Yarn, Nginx und konfiguriert die Systemd-Dienste.
-
Code übertragen und App bauen:
pct push 220 /root/solar-dashboard.tar.gz /opt/solar-dashboard.tar.gz pct exec 220 -- bash -lc 'cd /opt && mkdir -p solar-dashboard && tar xzf solar-dashboard.tar.gz -C solar-dashboard && rm solar-dashboard.tar.gz' pct exec 220 -- bash -lc '/opt/solar-dashboard/deploy/proxmox/build-app.sh'
Die App ist nun im lokalen Netzwerk unter der konfigurierten Container-IP erreichbar (Standard:
http://192.168.0.220/).
- Führen Sie das Skript
pve-create-influxdb-lxc.shauf dem Proxmox-Host aus, um InfluxDB 2.7 in einem separaten LXC-Container mit der OrganisationSolar Lokalund dem Bucketsolarzu installieren. - Importieren Sie die Dashboards aus
deploy/proxmox/grafana/in Ihr bestehendes Grafana. Detaillierte Schritte finden Sie im Setup-Guide:INFLUXDB-GRAFANA-SETUP.md.
- Python-Abhängigkeiten im
backend-Verzeichnis installieren:cd backend pip install -r requirements.txt - Tests ausführen (erfordert gesetzte Dummy-Umgebungsvariablen für MongoDB-Importe):
MONGO_URL=mongodb://localhost DB_NAME=test PYTHONPATH=. python -m pytest tests/
- Abhängigkeiten installieren:
cd frontend yarn install - Entwicklungsserver starten:
yarn dev
- Produktions-Build manuell erstellen:
yarn build
- MongoDB startet nicht (
mongodstatus failed): Ältere CPUs unterstützen eventuell kein AVX. Prüfen Sie die Logs mitjournalctl -u mongod -n 50. Weichen Sie im LXC ggf. auf eine ältere MongoDB-Version aus (z. B.mongodb-org=7.0.5) oder migrieren Sie den Container auf einen moderneren CPU-Kern. - Yarn Build bricht mit Out-of-Memory (OOM) ab:
Erhöhen Sie den RAM des LXC-Containers während des Builds temporär auf 2 GB:
Das Skript
pct set 220 --memory 2048build-app.shlimitiert die Node-Speichernutzung automatisch viaNODE_OPTIONS=--max-old-space-size=2048und startet das Backend vor dem Frontend-Build, damit die API auch bei Build-Verzögerungen erreichbar bleibt. - Service-Logs einsehen:
# Backend-Dienst live verfolgen journalctl -u solar-backend -f
Solar-Lokal-App
Copyright (c) 2026 T. Hauck (GitHub: Perspektivlos), Organisation: THCoding.
Dieses Projekt ist aktuell privat und nicht zur freien Wiederverwendung lizenziert. Details entnehmen Sie bitte COPYRIGHT.md oder kontaktieren Sie uns über THCentral.de.
