Update: Battery Optimizer v3.4.0 mit allen Fixes und Features
This commit is contained in:
203
battery_calibration_automation.yaml
Normal file
203
battery_calibration_automation.yaml
Normal file
@@ -0,0 +1,203 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user