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
+
## 🚀 Features
7
+
8
+
***Echtzeit-Monitoring:** Empfängt sekündliche Live-Werte (Leistung/Watt, Strom/Ampere, Spannung/Volt, Temperatur) des Wechselrichters via MQTT (OpenDTU/AhoyDTU).
9
+
***Energie-Statistiken & Live-Metriken:** Präzise Errechnung der produzierten kWh mittels Trapez-Regel sowie automatische Berechnung der Ersparnis (EUR) und Spitzenwerte.
10
+
***ML-gestützter Forecast:** Vorhersage des Ertrags (Best/Worst/Expected Case) basierend auf Bewölkung und Temperatur.
11
+
***Quantil-Regression:** Nutzt GradientBoosting zur Berechnung eines 80%-Konfidenzintervalls für die erwartete Tagesproduktion.
9
12
***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):**
13
+
***Interaktive Visualisierungen (Chart.js):**
11
14
***Dynamisches Donut-Chart:** Zeigt die DC-Leistung pro Panel. Durch Antippen/Hovern ändert sich die zentrale Anzeige.
12
15
***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.
16
+
***Automatische Wetterdaten:** Integriert die kostenlose Open-Meteo API für aktuelle Bewölkung und stündliche Prognosen.
17
+
***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.
18
+
***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.
63
+
```
64
+
65
+
### 3. Konfiguration (`.env`)
66
+
Erstelle eine `.env` Datei im Hauptverzeichnis:
67
+
```env
68
+
ADMIN_PASS=dein_passwort
69
+
LATITUDE=49.xxxx
70
+
LONGITUDE=8.xxxx
71
+
MQTT_BROKER_URL=deine_ip
72
+
MQTT_BROKER_PORT=1883
73
+
MQTT_USERNAME=dein_user
74
+
MQTT_PASSWORD=dein_pw
75
+
```
76
+
## ⚙️ Deployment (Systemd)
77
+
78
+
Um das System mit Live- und Staging-Umgebung dauerhaft zu betreiben, werden zwei separate Instanzen und Services auf dem Ubuntu-Server eingerichtet.
79
+
80
+
### 1. Verzeichnisstruktur vorbereiten
81
+
Klone das Projekt zweimal in unterschiedliche Ordner:
Hinterlege in deinem GitHub-Repository unter `Settings > Secrets and variables > Actions` folgende Secrets, damit die Action auf deinen Server zugreifen kann:
149
+
150
+
| Secret Name | Beschreibung |
151
+
| :--- | :--- |
152
+
|`SERVER_IP`| Die IP-Adresse deines Ubuntu-Servers |
153
+
|`SERVER_USER`| Dein Benutzername (z. B. `ubuntu`) |
154
+
|`SSH_PRIVATE_KEY`| Dein privater SSH-Schlüssel (für den passwortlosen Login) |
155
+
156
+
---
157
+
158
+
## 🧪 Entwicklung & Staging
159
+
Das Projekt nutzt einen automatisierten **Staging-Workflow** via GitHub Actions:
160
+
161
+
1.**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.
162
+
2.**Vorschau:** Änderungen sind sofort unter `http://deine-ip:5001` sichtbar.
163
+
3.**Production:** Nach einem erfolgreichen Merge von `dev` in den `main` Branch aktualisiert die Action das Live-Verzeichnis und startet den Dienst `balkonkraftwerk.service` neu.
164
+
165
+
**Staging-URL:**`http://deine-ip:5001`
166
+
**Live-URL:**`http://deine-ip:5000`
167
+
168
+
## 📈 Machine Learning Info
169
+
Die App verwendet einen `RandomForestRegressor` für den Erwartungswert und zwei `GradientBoostingRegressor`, um ein Konfidenzintervall (Quantile Regression) zu berechnen.
170
+
***Input-Features:** Sonnenstand, Tag des Jahres (Sin/Cos), Bewölkung, Temperatur, Rollierender Durchschnitt (7 Tage).
171
+
***Modell-Datei:**`pv_model.pkl` (wird nach jedem Tagesabschluss automatisch neu trainiert).
85
172
86
173
## 🤝 Mitwirken (Contributing)
87
174
@@ -92,7 +179,3 @@ Pull Requests sind herzlich willkommen. Für größere Änderungen öffne bitte
92
179
3. Commit deine Änderungen (`git commit -m 'Add some AmazingFeature'`)
93
180
4. Push auf den Branch (`git push origin feature/AmazingFeature`)
94
181
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