# Battery Calibration Automation # Erzwingt einmal im Monat einen vollen Lade-/Entladezyklus zur SOC-Kalibrierung # # WARUM: Der SOC wird vom BMS berechnet und driftet ohne volle Zyklen. # Volle Zyklen (20% → 100%) geben dem BMS Referenzpunkte zur Kalibrierung. # # WIE: # 1. Überschreibt den Optimizer für 24h # 2. Entlädt Batterie auf 20% (durch normalen Eigenverbrauch) # 3. Lädt Batterie auf 100% (unabhängig von Strompreisen) # # WANN: Jeden 1. des Monats # # Installation: In automations.yaml einfügen oder via UI erstellen # ========================================== # Automation 1: Kalibrierung starten # ========================================== alias: "Batterie Kalibrierung: Monatlicher Zyklus starten" description: "Startet einmal im Monat einen vollen Lade-/Entladezyklus zur SOC-Kalibrierung" trigger: # Jeden 1. des Monats um 00:05 Uhr - platform: template value_template: > {{ now().day == 1 and now().hour == 0 and now().minute == 5 }} condition: # Nur wenn Optimizer aktiviert ist - condition: state entity_id: input_boolean.battery_optimizer_enabled state: "on" action: # Aktiviere Manual Override für 24h - service: input_boolean.turn_on target: entity_id: input_boolean.battery_optimizer_manual_override # Setze Helper für Kalibrierungs-Status - service: input_boolean.turn_on target: entity_id: input_boolean.battery_calibration_active # Benachrichtigung - service: notify.persistent_notification data: title: "Batterie-Kalibrierung gestartet" message: > Batterie-Kalibrierung läuft für 24h. Ziel: Voller Zyklus (20% → 100%) für SOC-Neukalibrierung. Optimizer ist pausiert. # Logging - service: system_log.write data: message: "Battery calibration started - full cycle mode for 24h" level: info mode: single # ========================================== # Automation 2: Kalibrierungs-Laden # ========================================== alias: "Batterie Kalibrierung: Laden auf 100%" description: "Lädt Batterie auf 100% während Kalibrierung (unabhängig von Preisen)" trigger: # Stündlich prüfen während Kalibrierung aktiv ist - platform: time_pattern minutes: "5" condition: # Nur wenn Kalibrierung aktiv - condition: state entity_id: input_boolean.battery_calibration_active state: "on" # Nur wenn SOC unter 99% - condition: numeric_state entity_id: sensor.esssoc below: 99 action: # Aktiviere Laden mit voller Leistung - service: input_number.set_value target: entity_id: input_number.charge_power_battery data: value: -5000 - service: input_boolean.turn_on target: entity_id: input_boolean.goodwe_manual_control # Logging - service: system_log.write data: message: "Calibration: Charging battery to 100% (SOC: {{ states('sensor.esssoc') }}%)" level: info mode: single # ========================================== # Automation 3: Kalibrierung beenden # ========================================== alias: "Batterie Kalibrierung: Beenden" description: "Beendet Kalibrierung nach 24h oder wenn 100% erreicht" trigger: # Trigger 1: 24h sind vorbei - platform: state entity_id: input_boolean.battery_calibration_active to: "on" for: hours: 24 # Trigger 2: 100% SOC erreicht und mindestens 6h gelaufen - platform: numeric_state entity_id: sensor.esssoc above: 99.5 condition: - condition: state entity_id: input_boolean.battery_calibration_active state: "on" # Kalibrierung muss mindestens 6h gelaufen sein - condition: template value_template: > {% set start = as_timestamp(states.input_boolean.battery_calibration_active.last_changed) %} {% set now = as_timestamp(now()) %} {{ (now - start) > (6 * 3600) }} action: # Deaktiviere Kalibrierung - service: input_boolean.turn_off target: entity_id: input_boolean.battery_calibration_active # Deaktiviere Manual Override - service: input_boolean.turn_off target: entity_id: input_boolean.battery_optimizer_manual_override # Deaktiviere manuelles Laden - service: input_boolean.turn_off target: entity_id: input_boolean.goodwe_manual_control # Neue Planung triggern - service: pyscript.calculate_charging_schedule data: {} # Benachrichtigung - service: notify.persistent_notification data: title: "Batterie-Kalibrierung abgeschlossen" message: > Batterie-Kalibrierung erfolgreich beendet. SOC: {{ states('sensor.esssoc') }}% Optimizer ist wieder aktiv. # Logging - service: system_log.write data: message: "Battery calibration completed - SOC {{ states('sensor.esssoc') }}%" level: info mode: single # ========================================== # Automation 4: Notfall-Abbruch bei niedrigem SOC # ========================================== alias: "Batterie Kalibrierung: Notfall-Abbruch" description: "Bricht Kalibrierung ab wenn SOC kritisch niedrig" trigger: - platform: numeric_state entity_id: sensor.esssoc below: 15 condition: - condition: state entity_id: input_boolean.battery_calibration_active state: "on" action: # Sofort laden aktivieren - service: input_number.set_value target: entity_id: input_number.charge_power_battery data: value: -5000 - service: input_boolean.turn_on target: entity_id: input_boolean.goodwe_manual_control # Warnung - service: notify.persistent_notification data: title: "Batterie-Kalibrierung: NOTFALL" message: > SOC kritisch niedrig ({{ states('sensor.esssoc') }}%)! Notfall-Ladung aktiviert. Kalibrierung läuft weiter. # Logging - service: system_log.write data: message: "Calibration: Emergency charging activated (SOC {{ states('sensor.esssoc') }}%)" level: warning mode: single