Files
battery-charging-optimizer/openems/legacy/v2/battery_optimizer_dashboard.yaml
felix.zoesch 0fa03a566a feat: Major update - Battery Optimizer v3.4.0 with comprehensive fixes
## 🎯 Hauptänderungen

### Version 3.4.0 - SOC-Drift & Charging Capacity
-  Sicherheitspuffer (20-50% konfigurierbar) für untertägige SOC-Schwankungen
-  Monatliche automatische Batterie-Kalibrierung
- 🐛 SOC-Plausibilitäts-Check (filtert 65535% Spikes beim Modus-Wechsel)
- 🐛 Zeitabhängige API-Abfrage (vor/nach 14:00 Uhr)

### Neue Features
- 🔋 **Safety Buffer**: Kompensiert SOC-Drift und Eigenverbrauch
- 🔋 **Auto-Calibration**: Monatlicher Vollzyklus für SOC-Genauigkeit
- 🔋 **Spike Protection**: 4-fach Schutz gegen ungültige SOC-Werte
- 🔋 **Smart API**: Verhindert HTTP 500 Errors bei fehlenden Tomorrow-Preisen

### Dokumentation
- 📚 SOC_CALIBRATION_GUIDE.md - Umfassender Kalibrierungs-Guide
- 📚 FIX_CHARGING_CAPACITY.md - Sicherheitspuffer-Dokumentation
- 📚 FIX_SOC_SPIKE_PROBLEM.md - Spike-Protection-Lösung
- 📚 FIX_API_TIMING.md - Zeitabhängige API-Abfrage
- 📚 DIAGNOSE_LADE_PROBLEM.md - Debug-Guide

### Neue Dateien
- battery_calibration_automation.yaml - 4 Automations für Kalibrierung
- battery_calibration_input_helper.yaml - Input Helper Config
- battery_optimizer_input_helper_safety_buffer.yaml - Puffer Config
- debug_schedule.py - Umfassendes Debug-Script

### Scripts
- battery_charging_optimizer.py v3.4.0
- hastrom_flex_extended.py v1.1.0
- debug_schedule.py v1.0.0

### Fixes
- 🐛 SOC springt auf 65535% beim ESS-Modus-Wechsel → Debounce + Plausibilitäts-Check
- 🐛 API-HTTP-500 vor 14:00 → Zeitabhängige Abfrage
- 🐛 Batterie nicht bis 100% geladen → Sicherheitspuffer
- 🐛 SOC driftet ohne Vollzyklen → Automatische Kalibrierung

## 🚀 Installation

1. Input Helper erstellen (siehe battery_optimizer_input_helper_safety_buffer.yaml)
2. Automations installieren (siehe battery_calibration_automation.yaml)
3. Scripts aktualisieren (battery_charging_optimizer.py v3.4.0)
4. PyScript neu laden

## 📊 Verbesserungen

- Präzisere Ladeplanung durch Sicherheitspuffer
- Robustheit gegen SOC-Drift
- Keine API-Fehler mehr vor 14:00
- Hardware-Stopp bei 100% wird respektiert
- Bessere Batterie-Gesundheit durch regelmäßige Kalibrierung

🤖 Generated with Claude Code (claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-12 08:04:07 +01:00

114 lines
3.9 KiB
YAML

# ============================================
# Battery Charging Optimizer - Dashboard
# ============================================
# Füge diese Cards zu deinem Lovelace Dashboard hinzu
type: vertical-stack
cards:
# Status-Übersicht
- type: entities
title: Batterie-Optimierung Status
show_header_toggle: false
entities:
- entity: input_boolean.battery_optimizer_enabled
name: Optimierung aktiviert
- entity: input_boolean.battery_optimizer_manual_override
name: Manuelle Überschreibung
- entity: input_text.battery_optimizer_status
name: Status
# Manuelle Steuerung (dein bestehendes System)
- type: entities
title: Manuelle Steuerung
show_header_toggle: false
entities:
- entity: input_boolean.goodwe_manual_control
name: Manueller Modus
- entity: input_number.charge_power_battery
name: Ladeleistung
- type: divider
- entity: sensor.esssoc
name: Batterie SOC
- entity: sensor.battery_power
name: Batterie Leistung
# Konfiguration
- type: entities
title: Optimierungs-Einstellungen
show_header_toggle: false
entities:
- entity: input_number.battery_capacity_kwh
name: Batterie-Kapazität
- entity: input_number.battery_optimizer_min_soc
name: Min. SOC
- entity: input_number.battery_optimizer_max_soc
name: Max. SOC
- entity: input_number.battery_optimizer_max_charge_power
name: Max. Ladeleistung
- type: divider
- entity: input_number.battery_optimizer_price_threshold
name: Preis-Schwellwert
- entity: input_number.battery_optimizer_reserve_capacity
name: Reserve-Kapazität
- entity: input_number.battery_optimizer_pv_threshold
name: PV-Schwellwert
# Aktionen
- type: entities
title: Aktionen
show_header_toggle: false
entities:
- type: button
name: Plan neu berechnen
icon: mdi:refresh
tap_action:
action: call-service
service: pyscript.calculate_charging_schedule
- type: button
name: Plan jetzt ausführen
icon: mdi:play
tap_action:
action: call-service
service: pyscript.execute_charging_schedule
# Ladeplan-Tabelle
- type: markdown
title: Geplante Ladungen (nächste 24h)
content: >
{% set schedule = state_attr('pyscript.battery_charging_schedule', 'schedule') %}
{% if schedule %}
{% set charges = schedule | selectattr('action', 'eq', 'charge') | list %}
{% if charges | count > 0 %}
| Zeit | Leistung | Preis | Grund |
|------|----------|-------|-------|
{% for charge in charges[:10] %}
| {{ charge.datetime[11:16] }} | {{ charge.power_w }}W | {{ charge.price }}ct | {{ charge.reason }} |
{% endfor %}
{% else %}
*Keine Ladungen geplant*
{% endif %}
{% else %}
*Kein Plan vorhanden - bitte neu berechnen*
{% endif %}
# Statistiken
- type: markdown
title: Plan-Statistiken
content: >
{% set attrs = state_attr('pyscript.battery_charging_schedule', 'schedule') %}
{% if attrs %}
**Letzte Aktualisierung:** {{ state_attr('pyscript.battery_charging_schedule', 'last_update') }}
**Anzahl Stunden:** {{ state_attr('pyscript.battery_charging_schedule', 'num_hours') }}
**Geplante Ladungen:** {{ state_attr('pyscript.battery_charging_schedule', 'num_charges') }}
**Gesamtenergie:** {{ state_attr('pyscript.battery_charging_schedule', 'total_energy_kwh') }} kWh
**Durchschnittspreis:** {{ state_attr('pyscript.battery_charging_schedule', 'avg_charge_price') }} ct/kWh
**Erste Ladung:** {{ state_attr('pyscript.battery_charging_schedule', 'first_charge_time') }}
{% else %}
*Keine Statistiken verfügbar*
{% endif %}