|
| 1 | +# ☀️ Balkonkraftwerk Analytics |
| 2 | + |
| 3 | +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. |
| 4 | + |
| 5 | +## ✨ Features |
| 6 | + |
| 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. |
| 9 | + * **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):** |
| 11 | + * **Dynamisches Donut-Chart:** Zeigt die DC-Leistung pro Panel. Durch Antippen/Hovern ändert sich die zentrale Anzeige. |
| 12 | + * **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 | + |
| 17 | +## 🛠 Tech Stack |
| 18 | + |
| 19 | +* **Backend:** Python 3.11, Flask, Flask-MQTT |
| 20 | +* **Machine Learning:** Scikit-Learn (RandomForest, GradientBoosting), SHAP, Pandas, Numpy |
| 21 | +* **Frontend:** HTML5, CSS3 (CSS Variables für konsistentes Theming), Vanilla JavaScript (ES6) |
| 22 | +* **Charts & Icons:** Chart.js (inkl. datalabels-Plugin), Phosphor Icons |
| 23 | +* **Datenbank:** SQLite3 |
| 24 | + |
| 25 | +## 📂 Projektstruktur |
| 26 | + |
| 27 | +\`\`\`text |
| 28 | +/ |
| 29 | +├── app.py # Hauptanwendung (Flask Backend, MQTT, ML-Logik) |
| 30 | +├── requirements.txt # Python-Abhängigkeiten |
| 31 | +├── .env # (Nicht in Git) Deine geheimen Zugangsdaten |
| 32 | +├── .env.example # Vorlage für Umgebungsvariablen |
| 33 | +├── .gitignore # Schützt sensible Daten vor dem Upload |
| 34 | +├── pv_model.pkl # (Wird automatisch generiert) Trainiertes ML-Modell |
| 35 | +├── solar_data.db # (Wird automatisch generiert) SQLite Datenbank |
| 36 | +├── static/ |
| 37 | +│ ├── css/ |
| 38 | +│ │ └── style.css # Dashboard Styling |
| 39 | +│ └── js/ |
| 40 | +│ └── script.js # Frontend Logik (API-Calls, Chart.js) |
| 41 | +└── templates/ |
| 42 | + └── index.html # Dashboard HTML-Template |
| 43 | +\`\`\` |
| 44 | + |
| 45 | +## 🚀 Installation & Setup |
| 46 | + |
| 47 | +### 1. Repository klonen |
| 48 | +\`\`\`bash |
| 49 | +git clone https://github.com/DEIN_USERNAME/DEIN_REPO.git |
| 50 | +cd DEIN_REPO |
| 51 | +\`\`\` |
| 52 | + |
| 53 | +### 2. Virtuelle Umgebung & Abhängigkeiten |
| 54 | +Es wird empfohlen, eine virtuelle Python-Umgebung zu nutzen: |
| 55 | +\`\`\`bash |
| 56 | +python -m venv venv |
| 57 | +source venv/bin/activate # Unter Windows: venv\Scripts\activate |
| 58 | +pip install -r requirements.txt |
| 59 | +\`\`\` |
| 60 | + |
| 61 | +### 3. Umgebungsvariablen (.env) konfigurieren |
| 62 | +Kopiere die Vorlage und trage deine spezifischen Daten ein: |
| 63 | +\`\`\`bash |
| 64 | +cp .env.example .env |
| 65 | +\`\`\` |
| 66 | +Öffne die `.env` Datei und passe folgende Werte an: |
| 67 | +* `ADMIN_PASS`: (Optional für zukünftige Admin-Routen) |
| 68 | +* `LATITUDE` / `LONGITUDE`: Deine Standortkoordinaten (für Open-Meteo Vorhersagen). |
| 69 | +* `MQTT_BROKER_URL`, `MQTT_USERNAME`, `MQTT_PASSWORD`: Deine MQTT-Broker Daten. |
| 70 | + |
| 71 | +*(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. |
| 85 | + |
| 86 | +## 🤝 Mitwirken (Contributing) |
| 87 | + |
| 88 | +Pull Requests sind herzlich willkommen. Für größere Änderungen öffne bitte zuerst ein Issue, um zu diskutieren, was du ändern möchtest. |
| 89 | + |
| 90 | +1. Forke das Projekt |
| 91 | +2. Erstelle deinen Feature Branch (`git checkout -b feature/AmazingFeature`) |
| 92 | +3. Commit deine Änderungen (`git commit -m 'Add some AmazingFeature'`) |
| 93 | +4. Push auf den Branch (`git push origin feature/AmazingFeature`) |
| 94 | +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