You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ein intelligentes, lokal gehostetes Dashboard zur Überwachung, Analyse und Vorhersage von Balkonkraftwerken. Dieses Projekt kombiniert Echtzeit-MQTT-Daten (kompatibel mit AhoyDTU / OpenDTU) mit modernem Machine Learning (Scikit-Learn), um nicht nur historische Daten zu visualisieren, sondern auch präzise, wetterbasierte Leistungsprognosen zu erstellen.
3
+
Ein intelligentes Monitoring-System für Balkonkraftwerke. Es kombiniert Echtzeit-Daten via MQTT mit Wettervorhersagen von Open-Meteo, um mittels Machine Learning den Ertrag der nächsten Tage vorherzusagen.
4
4
5
-
## ✨ Features
6
5
7
-
***📡 Echtzeit-Monitoring:** Empfängt sekündliche Updates des Wechselrichters via MQTT (Leistung, Strom, Spannung, Temperatur).
8
-
***🧠 KI-gestützter Forecast:** * Nutzt **Quantil-Regression** (GradientBoosting) zur Berechnung eines 80%-Konfidenzintervalls für die erwartete Tagesproduktion.
6
+
7
+
## 🚀 Features
8
+
9
+
***Echtzeit-Monitoring:** Empfängt sekündliche Live-Werte (Leistung/Watt, Strom/Ampere, Spannung/Volt, Temperatur) des Wechselrichters via MQTT (OpenDTU/AhoyDTU).
10
+
***Energie-Statistiken & Live-Metriken:** Präzise Errechnung der produzierten kWh mittels Trapez-Regel sowie automatische Berechnung der Ersparnis (EUR) und Spitzenwerte.
11
+
***ML-gestützter Forecast:** Vorhersage des Ertrags (Best/Worst/Expected Case) basierend auf Bewölkung und Temperatur.
12
+
***Quantil-Regression:** Nutzt GradientBoosting zur Berechnung eines 80%-Konfidenzintervalls für die erwartete Tagesproduktion.
9
13
***SHAP-Integration (Erklärbare KI):** Das System zeigt im Tooltip genau an, *warum* eine bestimmte Vorhersage getroffen wurde (z. B. "Wolkenbedeckung senkt den Ertrag um X Watt").
10
-
***📊 Interaktive Visualisierungen (Chart.js):**
14
+
***Interaktive Visualisierungen (Chart.js):**
11
15
***Dynamisches Donut-Chart:** Zeigt die DC-Leistung pro Panel. Durch Antippen/Hovern ändert sich die zentrale Anzeige.
12
16
***Hourly Heatmap:** Visualisiert historische Erträge auf Stundenbasis für jeden Monat.
13
-
***Live-Metriken:** Automatische Berechnung von kWh, Ersparnis (EUR) und Spitzenwerten.
14
-
***🌦 Automatische Wetterdaten:** Integriert die kostenlose Open-Meteo API für aktuelle Bewölkung und stündliche Prognosen.
15
-
***💾 Leichtgewichtig & Lokal:** Kein Cloud-Zwang. Speicherung erfolgt in einer lokalen SQLite-Datenbank (`solar_data.db`). Automatisches Training des ML-Modells im Hintergrund.
17
+
***Automatische Wetterdaten:** Integriert die kostenlose Open-Meteo API für aktuelle Bewölkung und stündliche Prognosen.
18
+
***Leichtgewichtig, Lokal & Self-Healing:** Kein Cloud-Zwang. Speicherung erfolgt in einer lokalen SQLite-Datenbank (`solar_data.db`) mit automatischer Nachberechnung fehlender Tage (Self-Healing). Das Training des ML-Modells läuft automatisch im Hintergrund.
19
+
***Staging-System:** Vollautomatisches Deployment via GitHub Actions auf eine Live- (Port 5000) und Test-Umgebung (Port 5001).
*(Hinweis: Das System lauscht standardmäßig auf `inverter/+/status`, `inverter/+/ch0/P` etc. Stelle sicher, dass dein Wechselrichter/deine DTU diese Topics sendet).*
72
-
73
-
### 4. Anwendung starten
74
-
\`\`\`bash
75
-
python app.py
76
-
\`\`\`
77
-
Die Datenbank (`solar_data.db`) wird beim ersten Start automatisch mit dem korrekten Schema initialisiert.
78
-
Das Dashboard ist nun unter `http://localhost:5000` erreichbar.
79
-
80
-
## ⚙️ Automatisierung (Hintergrund-Tasks)
81
-
82
-
Das Backend nutzt das `schedule` Modul in einem separaten Thread, um:
83
-
***Stündlich:** Die Durchschnittsdaten der letzten Stunde in die Heatmap-Tabelle (`data`) zu schreiben und das Machine-Learning-Modell (`pv_model.pkl`) mit den neuesten Daten neu zu trainieren.
84
-
***Um Mitternacht:** Die Tagesstatistik (Tagesertrag, Max-Werte, Ersparnis) zu berechnen und in die Tabelle `daily_stats` zu aggregieren.
64
+
```
65
+
66
+
### 3. Konfiguration (`.env`)
67
+
Erstelle eine `.env` Datei im Hauptverzeichnis:
68
+
```env
69
+
ADMIN_PASS=dein_passwort
70
+
LATITUDE=49.xxxx
71
+
LONGITUDE=8.xxxx
72
+
MQTT_BROKER_URL=deine_ip
73
+
MQTT_BROKER_PORT=1883
74
+
MQTT_USERNAME=dein_user
75
+
MQTT_PASSWORD=dein_pw
76
+
```
77
+
## ⚙️ Deployment (Systemd)
78
+
79
+
Um das System mit Live- und Staging-Umgebung dauerhaft zu betreiben, werden zwei separate Instanzen und Services auf dem Ubuntu-Server eingerichtet.
80
+
81
+
### 1. Verzeichnisstruktur vorbereiten
82
+
Klone das Projekt zweimal in unterschiedliche Ordner:
Damit das automatische Deployment funktioniert, müssen die Pfade in deinen `.github/workflows/*.yml` Dateien mit der Serverstruktur übereinstimmen:
141
+
142
+
***deploy-staging.yml:** Muss auf das Verzeichnis `/home/ubuntu/balkonkraftwerk-staging` zeigen.
143
+
***deploy.yml:** Muss auf das Verzeichnis `/home/ubuntu/balkonkraftwerk` zeigen.
144
+
145
+
Stelle sicher, dass dein SSH-User Schreibrechte für beide Verzeichnisse besitzt.
146
+
147
+
## 🧪 Entwicklung & Staging
148
+
Das Projekt nutzt einen automatisierten **Staging-Workflow** via GitHub Actions:
149
+
***Entwicklung:** Änderungen werden in den `dev` Branch gepusht. Die GitHub Action führt einen Deploy auf dem Server im Verzeichnis `/home/ubuntu/balkonkraftwerk-staging` aus.
150
+
***Vorschau:** Änderungen sind sofort unter `http://deine-ip:5001` sichtbar.
151
+
***Production:** Nach einem erfolgreichen Merge von `dev` in den `main` Branch aktualisiert die Action das Verzeichnis `/home/ubuntu/balkonkraftwerk` und startet den Live-Dienst neu.
152
+
153
+
**Staging-URL:**`http://deine-ip:5001`
154
+
**Live-URL:**`http://deine-ip:5000`
155
+
156
+
## 📈 Machine Learning Info
157
+
Die App verwendet einen `RandomForestRegressor` für den Erwartungswert und zwei `GradientBoostingRegressor`, um ein Konfidenzintervall (Quantile Regression) zu berechnen.
158
+
***Input-Features:** Sonnenstand, Tag des Jahres (Sin/Cos), Bewölkung, Temperatur, Rollierender Durchschnitt (7 Tage).
159
+
***Modell-Datei:**`pv_model.pkl` (wird nach jedem Tagesabschluss automatisch neu trainiert).
85
160
86
161
## 🤝 Mitwirken (Contributing)
87
162
@@ -92,7 +167,3 @@ Pull Requests sind herzlich willkommen. Für größere Änderungen öffne bitte
92
167
3. Commit deine Änderungen (`git commit -m 'Add some AmazingFeature'`)
93
168
4. Push auf den Branch (`git push origin feature/AmazingFeature`)
94
169
5. Öffne einen Pull Request
95
-
96
-
## 📄 Lizenz
97
-
98
-
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Weitere Details findest du in der Datei `LICENSE`.
0 commit comments