Update: Battery Optimizer v3.4.0 mit allen Fixes und Features
This commit is contained in:
297
legacy/v1/README.md
Normal file
297
legacy/v1/README.md
Normal file
@@ -0,0 +1,297 @@
|
||||
# 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+
|
||||
Reference in New Issue
Block a user