# Changelog Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert. Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/), und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/). ## [3.5.0] - 2025-12-28 ### Removed - **Sicherheitspuffer entfernt**: 20% Safety Buffer führte zu unvollständiger Ladung - Problem: Mehr Ladestunden geplant als nötig, aber tatsächliche Ladung begrenzt - Folge: Batterie erreichte nie 100% SOC - Lösung: Hardware (GoodWe) hat eigene Sicherheitspuffer, Software-Puffer unnötig - **Reservekapazität entfernt**: 2 kWh Reserve ebenfalls in Hardware integriert - `input_number.battery_optimizer_reserve_capacity` wird nicht mehr verwendet - `input_number.battery_optimizer_safety_buffer` wird nicht mehr verwendet ### Changed - **Standardwerte optimiert**: - `max_charge_power`: 5000W → **8000W** (nutzt volle Inverter-Leistung) - `price_threshold`: 28 ct/kWh → **25 ct/kWh** (realistischere Schwelle) - **Ladelogik vereinfacht**: Direkte Berechnung ohne Puffer - **Logging verbessert**: Klarere Ausgaben zur Ladekapazität ### Fixed - **100% Ladung jetzt möglich**: Batterie wird vollständig geladen - **Genauere Ladestunden-Berechnung**: Nur tatsächlich benötigte Stunden werden geplant - **Bessere Kapazitätsnutzung**: Volle Ladeleistung in allen geplanten Stunden ### Migration 3.4.0 → 3.5.0 1. Update `battery_charging_optimizer.py` zu v3.5.0 2. **Optional**: Entferne nicht mehr verwendete Input Helper: - `input_number.battery_optimizer_reserve_capacity` - `input_number.battery_optimizer_safety_buffer` 3. **Empfohlen**: Aktualisiere `input_number.battery_optimizer_max_charge_power` auf 8000W 4. **Empfohlen**: Aktualisiere `input_number.battery_optimizer_price_threshold` auf 25 ct/kWh 5. Teste Ladeverhalten über Nacht ## [3.3.2] - 2024-11-30 ### Fixed - **Automation 8 SOC-Spike Protection**: Plausibilitäts-Check verhindert vorzeitigen Stop beim Umschalten auf REMOTE-Modus - Template-Condition prüft SOC-Bereich 99-101% statt nur >99% - Filtert ungültige Werte wie 65535% beim ESS-Modus-Wechsel - **Keep-Alive SOC-Check**: Zusätzliche Schutzmaßnahme gegen ungültige SOC-Werte - Template-Condition prüft SOC <= 100% vor Modbus-Befehl - Überspringt Zyklen bei Spikes, läuft aber weiter ### Changed - Erweiterte `battery_optimizer_automations.yaml` (Automation 8) - Erweiterte `speicher_manuell_laden.yaml` (Keep-Alive) - Backups erstellt: `.yaml.backup` Dateien ### Documentation - Neue Datei: `FIX_SOC_SPIKE_REMOTE_MODE.md` mit detaillierter Problembeschreibung, Lösung und Test-Anleitung ## [3.3.1] - 2024-11-26 ### Fixed - **SOC-Plausibilitäts-Check**: Filtert ungültige SOC-Werte (z.B. 65535% Spikes beim ESS-Modus-Wechsel) - **Negative Power Values**: `charge_power_battery` wird nun korrekt als negativer Wert gesetzt (-5000 für Laden) - **Automation Integration**: Nutzt bestehende Automations für ESS-Modus und Keep-Alive statt direkter Service-Calls ### Changed - Removed `@time_trigger` decorators from PyScript - Triggers now via Home Assistant Automations - Simplified `execute_charging_schedule` - delegates to existing automation infrastructure - Updated documentation for proper automation-based architecture ## [3.2.0] - 2025-01-20 ### Fixed - **Timezone Handling**: Durchgehende Verwendung von `ZoneInfo("Europe/Berlin")` in allen Scripts - **haStrom API Error Handling**: Bessere Fehlerbehandlung mit HTTP-Status-Codes und Response-Text - **DateTime Comparison**: Korrekte timezone-aware datetime Vergleiche in PyScript ### Changed - `get_local_now()` function für konsistente lokale Zeit - Explicit timezone conversion in `get_electricity_prices()` - Improved logging für API-Fehler ## [3.1.0] - 2024-12-15 ### Added - **Ranking-Based Optimization**: Globale Optimierung über Tagesgrenzen hinweg - **Tomorrow Price Support**: Einbeziehung von morgigen Strompreisen (ab 14:00) - **hastrom_flex_extended.py**: Erweiterter Price Fetcher mit Tomorrow-Support - **Cross-Midnight Planning**: Findet günstigste Stunden unabhängig von Tagesgrenzen ### Changed - Algorithm von threshold-based zu ranking-based - Berücksichtigt jetzt heute + morgen in einem 48h-Fenster - Verbesserte Statistiken und Logging ### Fixed - Mitternachts-Übergang wird korrekt gehandhabt - PV-Forecast Integration verbessert ## [3.0.0] - 2024-11-28 ### Added - **Sections Dashboards**: Modern e Home Assistant 2024.2+ Dashboards - Drei Dashboard-Varianten (Standard, Compact, Minimal) - Auto-responsive Layout - Improved mobile compatibility ### Changed - Dashboard-Architektur komplett überarbeitet - Maximum 4-Spalten Layout für mobile - Mushroom Cards statt veralteter Entities Cards - Bubble Card Integration ### Deprecated - Alte horizontal/vertical stack Dashboards (v1/v2) ## [2.0.0] - 2024-10-15 ### Added - InfluxDB2 Integration für historische Daten - Erweiterte Error Handling - Dashboard Verbesserungen ### Fixed - Modbus FLOAT32 Encoding (Big-Endian) - Controller Priority Issues in OpenEMS - State value 255-character limitation ## [1.2.1] - 2024-09-20 ### Fixed - **CRITICAL**: Hourly execution automation war nicht aktiv - PyScript state storage (Attribute statt Value für komplexe Daten) ## [1.2.0] - 2024-09-10 ### Added - Automatische Preis-Update Trigger - Manual Override mit Auto-Reset (4h) - Low-SOC Warnung - Startup calculation nach HA-Neustart ### Fixed - Input textarea limitierung umgangen via pyscript state - Generator expressions in PyScript (nicht unterstützt) ## [1.1.0] - 2024-08-25 ### Added - Threshold-based optimization algorithm - Basic dashboard - Manual control automations - PV forecast integration (Forecast.Solar) ### Changed - Improved configuration structure - Better logging ## [1.0.0] - 2024-08-01 ### Added - Initial release - Basic battery charging optimization - haStrom FLEX PRO price integration - OpenEMS Modbus control - Simple time-based scheduling - Basic Home Assistant integration --- ## Version Matrix | Version | Algorithm | Tomorrow Support | Dashboard | Automations | 100% Ladung | |---------|-----------|------------------|-----------|-------------|-------------| | 3.5.0 | Ranking | ✅ | Sections | HA-based | ✅ | | 3.3.1 | Ranking | ✅ | Sections | HA-based | ❌ | | 3.2.0 | Ranking | ✅ | Sections | PyScript | ❌ | | 3.1.0 | Ranking | ✅ | Sections | PyScript | ❌ | | 3.0.0 | Ranking | ✅ | Sections | PyScript | ❌ | | 2.x | Threshold | ❌ | Enhanced | PyScript | ❌ | | 1.x | Threshold | ❌ | Basic | PyScript | ❌ | --- ## Migration Guides ### 3.2.0 → 3.3.1 1. Update `battery_charging_optimizer.py` (v3.3.1) 2. Remove PyScript time triggers (now handled by automations) 3. Import `battery_optimizer_automations.yaml` 4. Verify existing keep-alive automations work correctly ### 3.1.0 → 3.2.0 1. Update all `.py` files with timezone fixes 2. Test haStrom API connectivity 3. Verify datetime comparisons in logs ### 2.x → 3.0.0 1. Backup old dashboard 2. Install new Sections dashboard 3. Install required HACS cards (Mushroom, Bubble) 4. Verify mobile responsive behavior ### 1.x → 2.0.0 1. Update Modbus configuration (FLOAT32 Big-Endian) 2. Configure InfluxDB2 (optional) 3. Update dashboard to new format 4. Verify controller priority in OpenEMS --- ## Known Issues ### v3.3.1 - Keep-Alive automation muss manuell in HA erstellt werden (nicht automatisch) - Dashboard-Import kann HACS-Card Warnings zeigen (installiere alle required cards) ### v3.2.0 - haStrom API manchmal langsam (>5s response time) - wird durch Timeout abgefangen ### v3.1.0 - Tomorrow-Preise erst ab 14:00 verfügbar (normal, nicht ein Bug) - Mitternachts-Neuberechnung optional (kann zu doppelter Berechnung führen) --- ## Planned Features - [ ] Dynamische Ladeleistungs-Anpassung basierend auf PV-Produktion - [ ] Multi-Tarif Support (neben haStrom FLEX PRO) - [ ] Wettervorhersage Integration (Temperatur-Kompensation) - [ ] Machine Learning für Verbrauchsprognose - [ ] Mobile App Benachrichtigungen - [ ] Grafana Dashboard Templates - [ ] Multi-Batterie Support --- ## Contributing Contributions sind willkommen! Für größere Änderungen: 1. Erstelle ein Issue zur Diskussion 2. Fork das Repository 3. Erstelle einen Feature Branch (`git checkout -b feature/AmazingFeature`) 4. Commit deine Changes (`git commit -m 'Add some AmazingFeature'`) 5. Push zum Branch (`git push origin feature/AmazingFeature`) 6. Öffne einen Pull Request --- ## Support - **Documentation**: [README.md](README.md), [INSTALLATION.md](INSTALLATION.md) - **Issues**: [Gitea Issues](https://gitea.ges4.net/felix/openems-battery-optimizer/issues) - **Discussions**: [Gitea Discussions](https://gitea.ges4.net/felix/openems-battery-optimizer/discussions)