204 lines
5.8 KiB
YAML
204 lines
5.8 KiB
YAML
# 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
|