7.3 KiB
Fix: SOC Spike beim Umschalten auf REMOTE-Modus
Problem
Beim Umschalten des ESS auf REMOTE-Modus meldet sensor.esssoc kurzzeitig ungültige Werte (z.B. 65535%). Dies führte zu folgenden Problemen:
- Automation 8 ("Stopp bei Max-SOC") triggert bei SOC > 99%
- Die Automation deaktiviert
goodwe_manual_control - Keep-Alive Automation stoppt
- Laden wird vorzeitig abgebrochen
Ursache
Der OpenEMS ESS liefert während des Modus-Wechsels ungültige Register-Werte, die als extrem hohe SOC-Prozentwerte interpretiert werden (z.B. 65535% = 0xFFFF als unsigned integer).
Lösung
1. Automation 8: SOC-Plausibilitäts-Check
Datei: automations/battery_optimizer_automations.yaml
Änderung: Zusätzliche Template-Condition hinzugefügt:
condition:
- condition: state
entity_id: input_boolean.goodwe_manual_control
state: "on"
# NEU: SOC-Plausibilitäts-Check
- condition: template
value_template: >
{% set soc = states('sensor.esssoc') | float(0) %}
{{ soc >= 99 and soc <= 101 }}
Effekt: Die Automation triggert nur noch, wenn der SOC im plausiblen Bereich von 99-101% liegt. Werte wie 65535% werden ignoriert.
2. Keep-Alive Automation: Schutz vor ungültigen Werten
Datei: automations/speicher_manuell_laden.yaml
Änderung: Zusätzliche Template-Condition hinzugefügt:
conditions:
- condition: state
entity_id: input_boolean.goodwe_manual_control
state: "on"
# NEU: SOC-Plausibilitäts-Check
- condition: template
value_template: >
{% set soc = states('sensor.esssoc') | float(50) %}
{{ soc <= 100 }}
Effekt: Die Keep-Alive Automation sendet nur Modbus-Befehle, wenn der SOC plausibel ist (<= 100%). Bei Spikes wird der Befehl übersprungen, aber die Automation läuft beim nächsten 30s-Zyklus weiter.
Implementierung
Schritt 1: Backups wurden erstellt
# Automatisch erstellt:
battery_optimizer_automations.yaml.backup
speicher_manuell_laden.yaml.backup
Schritt 2: Automationen in Home Assistant aktualisieren
Option A: YAML-Modus (empfohlen)
Wenn du die Automations über YAML-Dateien verwaltest:
- Öffne Home Assistant
- Einstellungen → Automationen & Szenen
- Klicke auf die drei Punkte (⋮) → YAML bearbeiten
- Suche die beiden Automationen:
- "Batterie Optimierung: Stopp bei Max-SOC"
- "Automation: Speicher manuell laden"
- Ersetze den Code mit dem Inhalt aus den aktualisierten Dateien
- Speichern
- Developer Tools → YAML → Automations neu laden
Option B: UI-Modus
Wenn du die Automations über die UI erstellt hast:
-
Öffne "Batterie Optimierung: Stopp bei Max-SOC"
-
Klicke auf "Bedingungen hinzufügen" → Vorlage
-
Füge ein:
{% set soc = states('sensor.esssoc') | float(0) %} {{ soc >= 99 and soc <= 101 }} -
Speichern
-
Öffne "Automation: Speicher manuell laden"
-
Klicke auf "Bedingungen hinzufügen" → Vorlage
-
Füge ein:
{% set soc = states('sensor.esssoc') | float(50) %} {{ soc <= 100 }} -
Speichern
Schritt 3: Automationen neu laden
Developer Tools → YAML → Automations neu laden
Test-Anleitung
Test 1: Manuelles Laden mit Spike-Simulation
-
Setze manuelles Laden:
input_boolean.goodwe_manual_control = on -
Überwache in den Logs:
Einstellungen → System → Logs Filter: "automation" -
Prüfe, dass Keep-Alive läuft:
- Alle 30 Sekunden sollte "OpenEMS ESS Ziel: -5000.0 W" erscheinen
-
Simuliere ungültigen SOC (nur zum Testen):
# Developer Tools → States # Ändere temporär sensor.esssoc auf 65535 -
Erwartetes Verhalten:
- Keep-Alive überspringt diesen Zyklus
- Automation 8 triggert NICHT
goodwe_manual_controlbleibton- Beim nächsten Zyklus (wenn SOC wieder normal) läuft Keep-Alive weiter
Test 2: Automatischer Ladeplan
-
Aktiviere Optimizer:
input_boolean.battery_optimizer_enabled = on -
Trigger manuelle Berechnung:
Developer Tools → Services Service: pyscript.calculate_charging_schedule -
Warte auf nächste Ladestunde oder trigger manuell:
Developer Tools → Services Service: pyscript.execute_charging_schedule -
Überwache Umschaltung auf REMOTE:
- Logs sollten zeigen: "OpenEMS ESS Ziel: -5000.0 W"
- Keine vorzeitigen Stops durch Automation 8
Test 3: Echtes Laden bis 100%
- Starte Laden bei niedrigem SOC (z.B. 20%)
- Lass System bis 100% laden
- Erwartetes Verhalten:
- Bei ca. 99% echter SOC: Automation 8 triggert
goodwe_manual_controlwird deaktiviert- ESS geht auf INTERNAL-Modus
- Notification: "Manuelles Laden beendet - SOC 100% erreicht"
Monitoring
Wichtige Log-Einträge
Erfolgreicher Schutz vor Spike:
Keep-Alive Automation: Condition failed (SOC check)
Normales Keep-Alive:
OpenEMS ESS Ziel: -5000.0 W -> 706 -> [reg1, reg2]
Automation 8 triggert bei echten 100%:
Batterie-Optimierung: Manuelles Laden beendet - SOC 100% erreicht
Developer Tools State Monitoring
# Überwache diese Entities:
sensor.esssoc # Sollte 0-100% sein
input_boolean.goodwe_manual_control # Sollte nicht flackern
pyscript.battery_charging_schedule # Check Attribute "schedule"
Rollback (falls nötig)
Falls Probleme auftreten:
# Im Terminal:
cd /Users/felix/Nextcloud/AI/projects/homeassistant/openems/automations/
# Restore Backups:
mv battery_optimizer_automations.yaml.backup battery_optimizer_automations.yaml
mv speicher_manuell_laden.yaml.backup speicher_manuell_laden.yaml
# Dann in Home Assistant:
# Developer Tools → YAML → Automations neu laden
Weitere Verbesserungen (optional)
PyScript-Logging erweitern
In battery_charging_optimizer.py, Zeile 68-75:
# SOC-Plausibilitäts-Check (filtert ungültige Werte wie 65535%)
if current_soc > 100 or current_soc < 0:
log.warning(f"⚠ Ungültiger SOC-Wert erkannt: {current_soc}%. Verwende Fallback-Wert 50%.")
current_soc = 50
Empfehlung: Bereits vorhanden und funktioniert korrekt.
ESS-Sensor Smoothing (langfristig)
Erwäge einen Template-Sensor mit Averaging:
# configuration.yaml
template:
- sensor:
- name: "ESS SOC Smoothed"
unit_of_measurement: "%"
state: >
{% set current = states('sensor.esssoc') | float(50) %}
{% if current > 100 or current < 0 %}
{{ states('sensor.esssoc_smoothed') | float(50) }}
{% else %}
{{ current }}
{% endif %}
Changelog
Version: 3.3.2 (Fix) Datum: 2024-11-30 Änderungen:
- ✅ Automation 8: SOC-Plausibilitäts-Check (99-101%)
- ✅ Keep-Alive: SOC-Plausibilitäts-Check (<= 100%)
- ✅ Backups erstellt
- ✅ Dokumentation
Behobenes Problem:
- Vorzeitiger Stop beim Umschalten auf REMOTE-Modus durch ungültige SOC-Werte
Getestet: Wartet auf User-Test
Support
Bei Problemen:
- Prüfe Home Assistant Logs
- Prüfe
sensor.esssocWert in Developer Tools → States - Prüfe Automation-Trace: Einstellungen → Automationen → (Automation auswählen) → Trace
- Vergleiche mit Backup-Dateien