Files
battery-charging-optimizer/openems/legacy/v1/README.md
felix.zoesch 0fa03a566a feat: Major update - Battery Optimizer v3.4.0 with comprehensive fixes
## 🎯 Hauptänderungen

### Version 3.4.0 - SOC-Drift & Charging Capacity
-  Sicherheitspuffer (20-50% konfigurierbar) für untertägige SOC-Schwankungen
-  Monatliche automatische Batterie-Kalibrierung
- 🐛 SOC-Plausibilitäts-Check (filtert 65535% Spikes beim Modus-Wechsel)
- 🐛 Zeitabhängige API-Abfrage (vor/nach 14:00 Uhr)

### Neue Features
- 🔋 **Safety Buffer**: Kompensiert SOC-Drift und Eigenverbrauch
- 🔋 **Auto-Calibration**: Monatlicher Vollzyklus für SOC-Genauigkeit
- 🔋 **Spike Protection**: 4-fach Schutz gegen ungültige SOC-Werte
- 🔋 **Smart API**: Verhindert HTTP 500 Errors bei fehlenden Tomorrow-Preisen

### Dokumentation
- 📚 SOC_CALIBRATION_GUIDE.md - Umfassender Kalibrierungs-Guide
- 📚 FIX_CHARGING_CAPACITY.md - Sicherheitspuffer-Dokumentation
- 📚 FIX_SOC_SPIKE_PROBLEM.md - Spike-Protection-Lösung
- 📚 FIX_API_TIMING.md - Zeitabhängige API-Abfrage
- 📚 DIAGNOSE_LADE_PROBLEM.md - Debug-Guide

### Neue Dateien
- battery_calibration_automation.yaml - 4 Automations für Kalibrierung
- battery_calibration_input_helper.yaml - Input Helper Config
- battery_optimizer_input_helper_safety_buffer.yaml - Puffer Config
- debug_schedule.py - Umfassendes Debug-Script

### Scripts
- battery_charging_optimizer.py v3.4.0
- hastrom_flex_extended.py v1.1.0
- debug_schedule.py v1.0.0

### Fixes
- 🐛 SOC springt auf 65535% beim ESS-Modus-Wechsel → Debounce + Plausibilitäts-Check
- 🐛 API-HTTP-500 vor 14:00 → Zeitabhängige Abfrage
- 🐛 Batterie nicht bis 100% geladen → Sicherheitspuffer
- 🐛 SOC driftet ohne Vollzyklen → Automatische Kalibrierung

## 🚀 Installation

1. Input Helper erstellen (siehe battery_optimizer_input_helper_safety_buffer.yaml)
2. Automations installieren (siehe battery_calibration_automation.yaml)
3. Scripts aktualisieren (battery_charging_optimizer.py v3.4.0)
4. PyScript neu laden

## 📊 Verbesserungen

- Präzisere Ladeplanung durch Sicherheitspuffer
- Robustheit gegen SOC-Drift
- Keine API-Fehler mehr vor 14:00
- Hardware-Stopp bei 100% wird respektiert
- Bessere Batterie-Gesundheit durch regelmäßige Kalibrierung

🤖 Generated with Claude Code (claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-12 08:04:07 +01:00

7.3 KiB

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

# PyScript via HACS installieren
# Konfigurationsdateien zu Home Assistant hinzufügen
# PyScript Dateien nach /config/pyscript/ kopieren
# Home Assistant neu starten

Siehe 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

# Entwicklerwerkzeuge → Dienste
service: pyscript.calculate_charging_schedule

4. Optimierung aktivieren

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

# Neuen Plan berechnen
pyscript.calculate_charging_schedule

# Aktuellen Plan ausführen
pyscript.execute_current_schedule

Manuelle Steuerung

# Laden starten (10kW)
pyscript.start_charging_cycle:
  power_w: -10000

# Laden stoppen
pyscript.stop_charging_cycle

# Notfall-Stop
pyscript.emergency_stop

Modbus Direkt

# 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

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

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)

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