# 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+