Files
battery-charging-optimizer/legacy/v1/README.md

298 lines
7.3 KiB
Markdown

# Batterie-Lade-Optimierung für OpenEMS + Home Assistant
## 🎯 Ziel
Intelligente Steuerung der Batterieladung basierend auf:
- ⚡ Dynamischen Strompreisen (haStrom FLEX PRO)
- ☀️ PV-Prognosen (Forecast.Solar)
- 🔋 Batterie-Status und Verbrauch
## 📊 Dein System
- **Batterie**: GoodWe 10 kWh (nutzbar 20-100%)
- **Wechselrichter**: GoodWe 10 kW
- **PV-Anlage**: 9,2 kWp (Ost/West Flachdach)
- **Steuerung**: OpenEMS Edge auf BeagleBone
- **Automation**: Home Assistant + PyScript
## 🎮 Funktionen
### Automatische Optimierung
- ✅ Tägliche Planerstellung um 14:05 Uhr (nach Strompreis-Update)
- ✅ Stündliche automatische Ausführung
- ✅ Berücksichtigung von PV-Prognosen
- ✅ Konservative Strategie (nur bei sehr günstigen Preisen)
- ✅ Schutz der Batterie (SOC-Grenzen, Reserve)
### Intelligente Entscheidungen
Das System lädt nur wenn:
- Strompreis unterhalb Schwellwert (< 28 ct/kWh)
- Wenig PV-Ertrag erwartet
- Batterie-Kapazität verfügbar
- Kein manueller Override aktiv
### Sicherheit & Kontrolle
- 🛡️ Keep-Alive alle 30s (verhindert Timeout)
- 🚨 Notfall-Stop Funktion
- 🔧 Manueller Override (4h Auto-Reset)
- 📊 Umfangreiches Dashboard
- 📝 Detailliertes Logging
## 📦 Installierte Komponenten
### Konfigurationsdateien
- `battery_optimizer_config.yaml` - Input Helper, Templates, Sensoren
- `battery_optimizer_rest_commands.yaml` - OpenEMS REST API Befehle
- `battery_optimizer_automations.yaml` - 6 Automatisierungen
### PyScript Module
- `battery_charging_optimizer.py` - Haupt-Optimierungsalgorithmus
- `battery_power_control.py` - Modbus Steuerung & Hilfsfunktionen
### Dashboard
- `battery_optimizer_dashboard.yaml` - Lovelace UI Konfiguration
### Dokumentation
- `INSTALLATION_GUIDE.md` - Schritt-für-Schritt Installation
- `README.md` - Diese Datei
## 🚀 Quick Start
### 1. Installation
```bash
# PyScript via HACS installieren
# Konfigurationsdateien zu Home Assistant hinzufügen
# PyScript Dateien nach /config/pyscript/ kopieren
# Home Assistant neu starten
```
Siehe [INSTALLATION_GUIDE.md](INSTALLATION_GUIDE.md) für Details.
### 2. Konfiguration
Setze folgende Werte:
- Min SOC: **20%**
- Max SOC: **100%**
- Preis-Schwellwert: **28 ct/kWh**
- Max Ladeleistung: **10000 W**
- Reserve: **2 kWh**
- Strategie: **Konservativ**
### 3. Ersten Plan erstellen
```yaml
# Entwicklerwerkzeuge → Dienste
service: pyscript.calculate_charging_schedule
```
### 4. Optimierung aktivieren
```yaml
input_boolean.battery_optimizer_enabled: ON
```
## 📈 Beispiel: Heute (7. Nov 2025)
### Strompreise
- **Günstigste Stunde**: 3:00 Uhr - 26.72 ct/kWh
- **Durchschnitt**: 29.51 ct/kWh
- **Teuerste Stunde**: 17:00 Uhr - 37.39 ct/kWh
- **Aktuell** (19:00 Uhr): 31.79 ct/kWh
### Optimierungs-Strategie
Mit konservativer Strategie würde System:
- ✅ Laden: 1-5 Uhr (Preise: 26-27 ct/kWh)
- ❌ Nicht laden: 6-23 Uhr (Preise über Schwellwert)
- ☀️ Warten auf PV-Ertrag ab Sonnenaufgang
**Geschätzte Ersparnis**: 8-12% vs. ständiges Laden bei Durchschnittspreis
## 🎛️ Services
### Haupt-Services
```yaml
# Neuen Plan berechnen
pyscript.calculate_charging_schedule
# Aktuellen Plan ausführen
pyscript.execute_current_schedule
```
### Manuelle Steuerung
```yaml
# Laden starten (10kW)
pyscript.start_charging_cycle:
power_w: -10000
# Laden stoppen
pyscript.stop_charging_cycle
# Notfall-Stop
pyscript.emergency_stop
```
### Modbus Direkt
```yaml
# Beliebige Leistung setzen
pyscript.set_battery_power_modbus:
power_w: -5000 # 5kW laden
```
## 📊 Monitoring
### Wichtige Sensoren
**Status**
- `input_boolean.battery_optimizer_enabled` - System AN/AUS
- `sensor.battery_state_of_charge` - Aktueller SOC
- `sensor.nächste_ladestunde` - Wann wird geladen
**Energie**
- `sensor.battery_power` - Aktuelle Batterieleistung
- `sensor.pv_power` - Aktuelle PV-Leistung
- `sensor.house_consumption` - Hausverbrauch
**Prognosen**
- `sensor.energy_production_tomorrow` - PV Ost morgen
- `sensor.energy_production_tomorrow_2` - PV West morgen
- `sensor.durchschnittspreis_heute` - Avg. Strompreis
### Dashboard
![Dashboard Preview]
- Status-Karten
- Preis-Grafik
- Konfiguration
- Energieflüsse
- Manuelle Steuerung
- Ladeplan-Tabelle
## ⚙️ Strategien
### Konservativ (Standard)
- **Ziel**: Minimales Risiko, günstigste Preise
- **Schwellwert**: Min + 30% der Tagesspanne
- **Ideal für**: Einstieg, stabilen Betrieb
### Moderat
- **Ziel**: Ausgewogen
- **Schwellwert**: Durchschnittspreis
- **Ideal für**: Nach Testphase
### Aggressiv
- **Ziel**: Maximale Arbitrage
- **Schwellwert**: 70% des Durchschnitts
- **Ideal für**: Erfahrene Nutzer
- **Hinweis**: Entlade-Funktion noch nicht implementiert
## 🔧 Technische Details
### Optimierungs-Algorithmus
```python
1. Strompreise für 24h laden
2. PV-Prognose berechnen (Ost + West)
3. Batterie-Status prüfen
4. Für jede Stunde:
- Ist Preis < Schwellwert?
- Ist PV-Ertrag < 1 kWh?
- Ist Kapazität verfügbar?
Wenn JA: Ladung planen
5. Plan speichern & ausführen
```
### OpenEMS Integration
**Modbus TCP**: 192.168.89.144:502
- **Register 706**: `ess0/SetActivePowerEquals` (FLOAT32)
- **Negativ**: Laden (z.B. -10000W = 10kW laden)
- **Positiv**: Entladen (z.B. 5000W = 5kW entladen)
**JSON-RPC**: 192.168.89.144:8084
- **ESS Mode**: REMOTE (manuell) / INTERNAL (auto)
- **Controller**: ctrlBalancing0 (enable/disable)
### Ablauf Ladevorgang
```mermaid
graph TD
A[Stündlicher Trigger] --> B{Plan vorhanden?}
B -->|Nein| C[Warten]
B -->|Ja| D{Ladung geplant?}
D -->|Nein| E[Auto-Modus]
D -->|Ja| F[ESS → REMOTE]
F --> G[Balancing → OFF]
G --> H[Modbus 706 schreiben]
H --> I[Keep-Alive 30s]
I --> J{Nächste Stunde}
J --> K[Zurück zu Auto]
```
## 🔮 Roadmap
### Phase 1: Basis (✅ Fertig)
- ✅ Preis-basierte Optimierung
- ✅ Einfache PV-Prognose
- ✅ Automatische Ausführung
- ✅ Dashboard
### Phase 2: Erweitert (geplant)
- [ ] InfluxDB Integration
- [ ] Historische Verbrauchsanalyse
- [ ] Verbesserte PV-Verteilung (stündlich)
- [ ] Wetterabhängige Anpassungen
### Phase 3: Intelligent (Zukunft)
- [ ] Machine Learning Verbrauchsprognose
- [ ] Dynamische Strategien
- [ ] Entlade-Arbitrage
- [ ] Peak-Shaving
- [ ] Netzdienliche Optimierung
## 🐛 Bekannte Einschränkungen
- PV-Prognose nutzt vereinfachte Tagesverteilung
- Keine historische Verbrauchsanalyse (kommt in Phase 2)
- Entlade-Funktion noch nicht implementiert
- Keep-Alive nur in PyScript (bei HA-Neustart Unterbrechung)
## 📚 Weiterführende Links
- [OpenEMS Dokumentation](https://openems.io)
- [Home Assistant PyScript](https://github.com/custom-components/pyscript)
- [Forecast.Solar](https://forecast.solar)
- [haStrom FLEX PRO](https://www.ha-strom.de)
## 🤝 Beitragen
Verbesserungsvorschläge willkommen!
- PV-Prognose verfeinern
- Verbrauchsprognose hinzufügen
- ML-Modelle trainieren
- Dashboard verbessern
## ⚠️ Disclaimer
- System greift direkt in Batteriesteuerung ein
- Verwendung auf eigene Gefahr
- Keine Haftung für Schäden
- Teste ausgiebig mit niedriger Leistung
- Überwache die ersten Tage intensiv
## 📝 Changelog
### Version 1.0 (2025-11-07)
- Initiale Version
- Konservative Strategie
- Basis-Optimierung implementiert
- Dashboard & Monitoring
- Vollständige Dokumentation
---
**Autor**: Felix's Energie-Optimierungs-Projekt
**Status**: Production Ready ✅
**Python**: 3.x (PyScript)
**Home Assistant**: 2024.x+