10 KiB
🚀 Battery Charging Optimizer - Installations-Anleitung
Übersicht
Dieses System optimiert die Batterieladung basierend auf:
- ✅ Dynamischen Strompreisen (haStrom FLEX PRO)
- ✅ PV-Prognose (Forecast.Solar Ost/West)
- ✅ Batterie-SOC und Kapazität
- ✅ Haushalts-Reserve
Besonderheit: Nutzt dein bestehendes, bewährtes manuelles Steuerungssystem!
📋 Voraussetzungen
Bereits vorhanden (✅):
- PyScript Integration installiert und aktiviert
- OpenEMS läuft auf BeagleBone mit GoodWe Batterie
- Modbus TCP Integration für OpenEMS
- haStrom FLEX PRO Sensor für Strompreise
- Forecast.Solar Integration für PV-Prognose (Ost + West)
- Funktionierendes manuelles System:
pyscript/ess_set_power.py- 3 Automationen für manuelles Laden
- REST Commands für Mode-Wechsel
- Input Helper
goodwe_manual_controlundcharge_power_battery
Zu installieren:
- Neue Konfigurationsdateien
- Neues Optimierungs-Script
- Dashboard (optional)
🔧 Installation
Schritt 1: Konfiguration installieren
Methode A: Als Package (empfohlen)
- Erstelle Verzeichnis
/config/packages/falls nicht vorhanden - Kopiere
battery_optimizer_config.yamlnach/config/packages/ - In
configuration.yamlsicherstellen:homeassistant: packages: !include_dir_named packages
Methode B: In configuration.yaml
Kopiere den Inhalt von battery_optimizer_config.yaml in die entsprechenden Sektionen deiner configuration.yaml.
Schritt 2: PyScript installieren
- Kopiere
battery_optimizer.pynach/config/pyscript/ - Wichtig: Dein bestehendes
ess_set_power.pybleibt unverändert!
Schritt 3: Home Assistant neu starten
# Developer Tools → YAML → Restart
Oder über CLI:
ha core restart
Schritt 4: Input Helper prüfen
Nach dem Neustart, gehe zu Einstellungen → Geräte & Dienste → Helfer
Folgende Helper sollten jetzt existieren:
input_boolean.battery_optimizer_enabledinput_boolean.battery_optimizer_manual_overrideinput_number.battery_capacity_kwhinput_number.battery_optimizer_min_socinput_number.battery_optimizer_max_socinput_number.battery_max_charge_powerinput_number.battery_optimizer_price_thresholdinput_number.battery_reserve_capacity_kwhinput_number.battery_optimizer_pv_thresholdinput_text.battery_optimizer_status
Falls nicht: Prüfe die Konfiguration und Logs!
Schritt 5: PyScript-Dienste prüfen
Gehe zu Entwicklerwerkzeuge → Dienste
Suche nach pyscript - folgende Dienste sollten vorhanden sein:
pyscript.calculate_charging_schedulepyscript.execute_charging_schedulepyscript.ess_set_power(bestehend)
Falls nicht:
- Prüfe
/config/pyscript/battery_optimizer.pyexistiert - Prüfe Logs:
custom_components.pyscript
⚙️ Konfiguration
Batterie-Parameter einstellen
Gehe zu Einstellungen → Geräte & Dienste → Helfer und setze:
- Batterie-Kapazität:
10 kWh(GoodWe) - Min. SOC:
20%(Schutz vor Tiefentladung) - Max. SOC:
100%(oder z.B. 90% für Langlebigkeit) - Max. Ladeleistung:
5000W(5 kW - dein System-Limit)
Optimierungs-Parameter anpassen
- Preis-Schwellwert:
28 ct/kWh(Startwert, wird automatisch angepasst) - Reserve-Kapazität:
2 kWh(Reserve für Haushalt) - PV-Schwellwert:
500 Wh(Bei mehr PV keine Netz-Ladung)
Sensor-Namen prüfen
Falls deine Sensoren andere Namen haben, passe diese in battery_optimizer.py an:
# Zeile ~100
sensor_east = 'sensor.energy_production_today' # Dein Ost-Array
sensor_west = 'sensor.energy_production_today_2' # Dein West-Array
# Zeile ~35
price_entity = 'sensor.hastrom_flex_pro' # Dein Strompreis-Sensor
# Zeile ~185
current_soc = float(state.get('sensor.openems_ess0_soc') or 50) # Dein SOC-Sensor
🧪 Testen
Test 1: Manuelle Berechnung
# Entwicklerwerkzeuge → Dienste
service: pyscript.calculate_charging_schedule
Erwartetes Ergebnis:
- Log-Einträge in Einstellungen → System → Protokolle
- State
pyscript.battery_charging_scheduleexistiert - Attribute
scheduleenthält Array mit Stunden
Prüfen in Developer Tools → Zustände:
pyscript.battery_charging_schedule
Attributes:
schedule: [...]
last_update: 2025-11-09T17:30:00
num_hours: 24
num_charges: 3
Test 2: Plan ansehen
# Entwicklerwerkzeuge → Template
{{ state_attr('pyscript.battery_charging_schedule', 'schedule') }}
Sollte eine Liste mit Stunden-Einträgen zeigen:
[
{
"datetime": "2025-11-09T23:00:00",
"hour": 23,
"action": "charge",
"power_w": -5000,
"price": 26.85,
"reason": "Günstig (26.85 ct) + wenig PV (0 Wh)"
},
...
]
Test 3: Manuelle Ausführung
ACHTUNG: Nur testen wenn Batterie geladen werden kann!
# Entwicklerwerkzeuge → Dienste
service: pyscript.execute_charging_schedule
Was passiert:
- Wenn aktuelle Stunde = Ladezeit → Aktiviert
input_boolean.goodwe_manual_control - Wenn nicht → Deaktiviert manuellen Modus
Prüfen:
- Log-Einträge zeigen welche Aktion ausgeführt wird
- Bei Ladung:
goodwe_manual_controlschaltet auf "on" - Deine bestehende Automation übernimmt → Batterie lädt!
Test 4: Automatische Zeitsteuerung warten
Die Zeit-Trigger sind aktiv:
- 14:05 Uhr täglich: Neue Berechnung
- xx:05 Uhr stündlich: Ausführung
Warte bis zur nächsten vollen Stunde + 5 Min und prüfe Logs!
📊 Dashboard installieren (Optional)
- Gehe zu deinem Lovelace Dashboard
- Bearbeiten → Raw-Konfigurations-Editor (3 Punkte oben rechts)
- Füge den Inhalt von
battery_optimizer_dashboard.yamlein
Oder: Manuell Cards erstellen über die UI
🔍 Troubleshooting
Problem: "Keine Strompreis-Daten"
Lösung:
- Prüfe Sensor
sensor.hastrom_flex_proexistiert - Prüfe Attribut
hoursist vorhanden:# Developer Tools → Zustände sensor.hastrom_flex_pro Attributes: hours: [...] - Falls anderer Name → Anpassen in
battery_optimizer.pyZeile ~35
Problem: "Keine PV-Prognose"
Lösung:
- Prüfe Forecast.Solar Sensoren existieren:
sensor.energy_production_todaysensor.energy_production_today_2sensor.energy_production_tomorrowsensor.energy_production_tomorrow_2
- Falls andere Namen → Anpassen in
battery_optimizer.pyZeile ~100
Problem: PyScript-Dienste nicht sichtbar
Lösung:
- Prüfe PyScript ist installiert: HACS → Integrationen → PyScript
- Prüfe
/config/pyscript/battery_optimizer.pyexistiert - Home Assistant neu starten
- Logs prüfen:
grep pyscript /config/home-assistant.log
Problem: Batterie lädt nicht trotz Plan
Lösung:
- Prüfe
input_boolean.battery_optimizer_enabledist "on" - Prüfe
input_boolean.battery_optimizer_manual_overrideist "off" - Prüfe deine bestehenden Automationen sind aktiv:
- "Switch: Manuelle Speicherbeladung aktivieren"
- "Automation: Speicher manuell laden"
- Manuell testen:
→ Sollte Ladung starten über deine Automation!
service: input_boolean.turn_on target: entity_id: input_boolean.goodwe_manual_control
Problem: "Keine Daten für aktuelle Stunde"
Ursache: Plan wurde zu spät erstellt oder enthält nicht alle Stunden
Lösung:
- Plan manuell neu erstellen:
service: pyscript.calculate_charging_schedule - Prüfe ob tägliche Automation um 14:05 läuft
- Plan sollte aktuelle Stunde inkludieren
🎓 Wie das System funktioniert
Täglicher Ablauf
14:05 Uhr:
- PyScript berechnet optimalen Ladeplan für nächste 24-36h
- Berücksichtigt:
- Strompreise (dynamischer Schwellwert = 90. Perzentil)
- PV-Prognose Ost + West kombiniert
- Aktueller Batterie-SOC
- Konfigurierte Parameter
- Speichert Plan als
pyscript.battery_charging_scheduleState
Jede Stunde um xx:05:
- PyScript prüft was für aktuelle Stunde geplant ist
- Wenn "charge":
- Setzt
input_number.charge_power_batteryauf Ziel-Leistung - Aktiviert
input_boolean.goodwe_manual_control - Deine Automation übernimmt → Schreibt alle 30s via Modbus
- Setzt
- Wenn "auto":
- Deaktiviert
goodwe_manual_control - System läuft im Automatik-Modus
- Deaktiviert
Strategie-Logik
Laden wenn:
- Strompreis < dynamischer Schwellwert (90. Perzentil)
- UND PV-Prognose < 500 Wh für diese Stunde
- UND Batterie nicht voll
- Sortiert nach: Niedrigster Preis zuerst
Nicht laden wenn:
- Preis zu hoch
- Genug PV-Erzeugung erwartet
- Batterie voll (inkl. Reserve)
🚀 Nächste Schritte
Nach erfolgreicher Installation:
-
Erste Woche beobachten
- Prüfe Logs täglich
- Verifiziere dass Plan erstellt wird (14:05)
- Verifiziere dass Ausführung läuft (stündlich)
- Prüfe ob Batterie zur richtigen Zeit lädt
-
Parameter optimieren
- Preis-Schwellwert anpassen falls zu oft/selten lädt
- PV-Schwellwert anpassen basierend auf Erfahrung
- Reserve-Kapazität optimieren
-
Statistiken sammeln
- Notiere Einsparungen
- Vergleiche mit vorherigem Verbrauch
- Dokumentiere für Community
-
Community-Veröffentlichung vorbereiten
- Anonymisiere IP-Adressen und Passwörter
- Erstelle README mit deinen Erfahrungen
- Screenshots vom Dashboard
- Beispiel-Logs
📝 Wartung
Regelmäßig prüfen:
- Logs auf Fehler durchsuchen
- Plan-Qualität bewerten (gute Vorhersagen?)
- Sensor-Verfügbarkeit (Strompreis, PV-Forecast)
Bei Problemen:
- Logs prüfen:
custom_components.pyscript - Sensor-Zustände prüfen
- Manuell Plan neu berechnen
- Bei Bedarf Parameter anpassen
🎉 Fertig!
Dein intelligentes Batterie-Optimierungs-System ist jetzt installiert und nutzt dein bewährtes manuelles Steuerungssystem als solide Basis.
Das System wird:
- ✅ Automatisch täglich planen (14:05)
- ✅ Automatisch stündlich ausführen (xx:05)
- ✅ Zu günstigsten Zeiten laden
- ✅ PV-Eigenverbrauch maximieren
- ✅ Stromkosten minimieren
Viel Erfolg! ⚡💰