# Batterie-Optimierung Installation Guide ## Übersicht Dieses System optimiert die Batterieladung deines GoodWe/OpenEMS Systems basierend auf: - Dynamischen Strompreisen (haStrom FLEX PRO) - PV-Prognosen (Forecast.Solar) - Batterie-Status und Kapazität ## System-Anforderungen - ✅ Home Assistant mit PyScript Integration - ✅ OpenEMS Edge auf BeagleBone (IP: 192.168.89.144) - ✅ GoodWe Wechselrichter mit 10kWh Batterie - ✅ Strompreis-Sensor (sensor.hastrom_flex_pro) - ✅ Forecast.Solar Integration (Ost + West) ## Installation ### Schritt 1: PyScript Installation Falls noch nicht installiert: 1. Über HACS → Integrationen → PyScript suchen und installieren 2. Home Assistant neu starten 3. Konfiguration → Integrationen → PyScript hinzufügen ### Schritt 2: Konfigurationsdateien #### 2.1 Configuration.yaml erweitern Füge den Inhalt aus `battery_optimizer_config.yaml` zu deiner `configuration.yaml` hinzu: ```yaml # In configuration.yaml einfügen: input_text: !include input_text.yaml input_number: !include input_number.yaml input_boolean: !include input_boolean.yaml input_select: !include input_select.yaml template: !include templates.yaml rest_command: !include rest_commands.yaml modbus: !include modbus.yaml ``` Oder direkt in die configuration.yaml kopieren (siehe battery_optimizer_config.yaml). #### 2.2 REST Commands hinzufügen Erstelle `rest_commands.yaml` oder füge zu deiner bestehenden Datei hinzu: - Inhalt aus `battery_optimizer_rest_commands.yaml` #### 2.3 Modbus Konfiguration Falls noch nicht vorhanden, füge die Modbus-Konfiguration hinzu: ```yaml modbus: - name: openems type: tcp host: 192.168.89.144 port: 502 sensors: - name: "OpenEMS Batterie Sollwert" address: 706 data_type: float32 scan_interval: 30 unit_of_measurement: "W" device_class: power ``` ### Schritt 3: PyScript Dateien kopieren Kopiere die folgenden Dateien nach `/config/pyscript/`: 1. `battery_charging_optimizer.py` → `/config/pyscript/battery_charging_optimizer.py` 2. `battery_power_control.py` → `/config/pyscript/battery_power_control.py` ```bash # Auf deinem Home Assistant System: cd /config/pyscript/ # Dann Dateien hochladen via File Editor oder SSH ``` ### Schritt 4: Automatisierungen erstellen Füge die Automatisierungen aus `battery_optimizer_automations.yaml` hinzu: **Option A: Über UI** - Einstellungen → Automatisierungen & Szenen - Jede Automatisierung manuell erstellen **Option B: YAML** - Zu `automations.yaml` hinzufügen - Oder als separate Datei inkludieren ### Schritt 5: Home Assistant neu starten Vollständiger Neustart erforderlich für: - Neue Input Helper - REST Commands - Modbus Konfiguration - PyScript Module ### Schritt 6: Initial-Konfiguration Nach dem Neustart: 1. **Input Helper prüfen** - Einstellungen → Geräte & Dienste → Helfer - Alle "Batterie Optimizer" Helfer sollten vorhanden sein 2. **Grundeinstellungen setzen** - `input_number.battery_optimizer_min_soc`: 20% - `input_number.battery_optimizer_max_soc`: 100% - `input_number.battery_optimizer_price_threshold`: 28 ct/kWh - `input_number.battery_optimizer_max_charge_power`: 10000 W - `input_number.battery_optimizer_reserve_capacity`: 2 kWh - `input_select.battery_optimizer_strategy`: "Konservativ (nur sehr günstig)" 3. **Optimierung aktivieren** - `input_boolean.battery_optimizer_enabled`: AN 4. **Ersten Plan berechnen** - Entwicklerwerkzeuge → Dienste - Dienst: `pyscript.calculate_charging_schedule` - Ausführen ### Schritt 7: Dashboard einrichten (optional) Füge eine neue Ansicht in Lovelace hinzu: - Inhalt aus `battery_optimizer_dashboard.yaml` ## Test & Verifizierung ### Test 1: Manuelle Plan-Berechnung ```yaml # Entwicklerwerkzeuge → Dienste service: pyscript.calculate_charging_schedule ``` Prüfe danach: - `input_text.battery_charging_schedule` sollte JSON enthalten - Logs prüfen: Einstellungen → System → Protokolle ### Test 2: Manuelles Laden testen ```yaml # Entwicklerwerkzeuge → Dienste service: pyscript.start_charging_cycle data: power_w: -3000 # 3kW laden ``` Prüfe: - `sensor.battery_power` sollte ca. -3000W zeigen - ESS Mode sollte REMOTE sein - Nach 1 Minute stoppen: ```yaml service: pyscript.stop_charging_cycle ``` ### Test 3: Automatische Ausführung Warte auf die nächste volle Stunde (xx:05 Uhr). Die Automation sollte automatisch: - Den Plan prüfen - Bei Ladestunde: Laden aktivieren - Sonst: Automatik-Modus ## Konfiguration & Tuning ### Strategien **Konservativ (empfohlen für Start)** - Lädt nur bei sehr günstigen Preisen - Minimales Risiko - Schwellwert: Min-Preis + 30% der Spanne **Moderat** - Lädt bei allen Preisen unter Durchschnitt - Ausgewogenes Verhältnis - Schwellwert: Durchschnittspreis **Aggressiv** - Maximale Arbitrage - Lädt bei Preisen unter 70% des Durchschnitts - Kann auch Entladung bei hohen Preisen umsetzen (noch nicht implementiert) ### Wichtige Parameter **Preis-Schwellwert** (`input_number.battery_optimizer_price_threshold`) - Maximum das du bereit bist zu zahlen - Bei "Konservativ": Wird automatisch niedriger gesetzt - Beispiel: 28 ct/kWh → lädt nur wenn Preis < 28 ct **Reserve-Kapazität** (`input_number.battery_optimizer_reserve_capacity`) - Wie viel kWh für Eigenverbrauch reserviert bleiben sollen - Verhindert, dass Batterie komplett für günstiges Laden "verbraucht" wird - Beispiel: 2 kWh → max. 8 kWh werden aus Netz geladen **Min/Max SOC** - Schützt die Batterie - Standard: 20-100% - Kann je nach Batterietyp angepasst werden ## Erweiterte Funktionen ### Keep-Alive Das System schreibt alle 30 Sekunden die Leistung neu, um Timeouts im REMOTE-Mode zu verhindern. ### Notfall-Stop Bei Problemen: ```yaml service: pyscript.emergency_stop ``` Deaktiviert sofort: - Alle manuellen Steuerungen - Automatisierungen - Setzt ESS zurück auf INTERNAL/Auto ### Manueller Override Aktiviere `input_boolean.battery_optimizer_manual_override` um: - Automatische Ausführung zu pausieren - System läuft weiter im Hintergrund - Wird nach 4 Stunden automatisch deaktiviert ## Monitoring & Logs ### Log-Level einstellen In `configuration.yaml`: ```yaml logger: default: info logs: custom_components.pyscript: debug custom_components.pyscript.file.battery_charging_optimizer: debug custom_components.pyscript.file.battery_power_control: debug ``` ### Wichtige Log-Meldungen - "Batterie-Optimierung gestartet" → Plan wird berechnet - "Strompreise geladen: X Stunden" → Preisdaten OK - "Geplante Ladungen: X Stunden" → Anzahl Ladestunden - "Aktiviere Laden: XW" → Ladezyklus startet - "Keep-Alive: Schreibe XW" → Timeout-Verhinderung ## Troubleshooting ### Problem: Kein Ladeplan erstellt **Ursache**: Strompreise nicht verfügbar **Lösung**: - Prüfe `sensor.hastrom_flex_pro` - Warte bis 14:05 Uhr - Manuell triggern: `pyscript.calculate_charging_schedule` ### Problem: Batterie lädt nicht trotz Plan **Ursache**: OpenEMS antwortet nicht **Lösung**: - Prüfe REST Commands einzeln - Teste: `rest_command.set_ess_remote_mode` - Prüfe OpenEMS Logs auf BeagleBone ### Problem: Laden stoppt nach kurzer Zeit **Ursache**: Keep-Alive funktioniert nicht **Lösung**: - Prüfe PyScript Logs - Prüfe `pyscript.battery_charging_active` State - Neu starten: `pyscript.start_charging_cycle` ### Problem: Unrealistische Ladepläne **Ursache**: PV-Prognose oder Verbrauch falsch **Lösung**: - Prüfe Forecast.Solar Sensoren - Passe `input_number.battery_optimizer_reserve_capacity` an - Ändere Strategie auf "Konservativ" ## Nächste Schritte / Erweiterungen ### Phase 2: InfluxDB Integration - Historische Verbrauchsdaten nutzen - Bessere Vorhersagen - Lernender Algorithmus ### Phase 3: Erweiterte PV-Prognose - Stündliche Verteilung statt Tagessumme - Wetterabhängige Anpassungen - Cloud-Cover Berücksichtigung ### Phase 4: Arbitrage-Funktion - Entladung bei hohen Preisen - Peak-Shaving - Netzdienliche Steuerung ### Phase 5: Machine Learning - Verbrauchsprognose - Optimierte Ladezeiten - Selbstlernende Parameter ## Support & Logs Bei Problemen bitte folgende Informationen bereitstellen: 1. Home Assistant Version 2. PyScript Version 3. Relevante Logs aus "Einstellungen → System → Protokolle" 4. Screenshots der Input Helper Werte 5. `input_text.battery_charging_schedule` Inhalt ## Sicherheitshinweise ⚠️ **Wichtig**: - System greift direkt in Batteriesteuerung ein - Bei Fehlfunktion kann Batterie beschädigt werden - Überwache die ersten Tage intensiv - Setze sinnvolle SOC-Grenzen - Nutze Notfall-Stop bei Problemen ✅ **Best Practices**: - Starte mit konservativer Strategie - Teste erst mit kleinen Ladeleistungen - Überwache Batterie-Temperatur - Prüfe regelmäßig die Logs - Halte OpenEMS aktuell ## Lizenz & Haftung Dieses System wird "as-is" bereitgestellt. Keine Haftung für Schäden an Hardware oder Datenverlust. Verwendung auf eigene Gefahr. --- **Version**: 1.0 **Datum**: 2025-11-07 **Autor**: Felix's Batterie-Optimierungs-Projekt