## 🎯 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>
191 lines
4.5 KiB
Markdown
191 lines
4.5 KiB
Markdown
# 🔥 Hotfix: input_text → input_textarea
|
|
|
|
## ⚠️ Problem
|
|
|
|
Home Assistant `input_text` hat ein **Maximum von 255 Zeichen**, aber unser JSON-Ladeplan ist viel größer (typisch 2000-4000 Zeichen für 24 Stunden).
|
|
|
|
**Fehlermeldung:**
|
|
```
|
|
Invalid config for 'input_text' at packages/battery_optimizer_config.yaml, line 10:
|
|
value must be at most 255 for dictionary value 'input_text->battery_charging_schedule->max',
|
|
got 4096
|
|
```
|
|
|
|
## ✅ Lösung
|
|
|
|
Verwende `input_textarea` statt `input_text`:
|
|
- ✅ Unbegrenzte Größe
|
|
- ✅ Multi-Line Text
|
|
- ✅ Perfekt für JSON
|
|
|
|
## 🔧 Was wurde geändert
|
|
|
|
### Datei: `battery_optimizer_config.yaml`
|
|
|
|
**VORHER (falsch):**
|
|
```yaml
|
|
input_text:
|
|
battery_charging_schedule:
|
|
name: "Batterie Ladeplan"
|
|
max: 4096 # ❌ Nicht erlaubt!
|
|
initial: "{}"
|
|
```
|
|
|
|
**NACHHER (korrekt):**
|
|
```yaml
|
|
input_textarea:
|
|
battery_charging_schedule:
|
|
name: "Batterie Ladeplan"
|
|
initial: "{}" # ✅ Kein max-Limit!
|
|
```
|
|
|
|
### Datei: `battery_charging_optimizer.py`
|
|
|
|
**Änderungen:**
|
|
```python
|
|
# VORHER:
|
|
input_text.battery_charging_schedule = schedule_json
|
|
schedule_json = state.get('input_text.battery_charging_schedule')
|
|
|
|
# NACHHER:
|
|
input_textarea.battery_charging_schedule = schedule_json
|
|
schedule_json = state.get('input_textarea.battery_charging_schedule')
|
|
```
|
|
|
|
### Datei: `battery_optimizer_config.yaml` (Templates)
|
|
|
|
**Template-Sensoren:**
|
|
```yaml
|
|
# VORHER:
|
|
{% set schedule = state_attr('input_text.battery_charging_schedule', 'schedule') %}
|
|
|
|
# NACHHER:
|
|
{% set schedule = state_attr('input_textarea.battery_charging_schedule', 'schedule') %}
|
|
```
|
|
|
|
### Datei: `battery_optimizer_dashboard.yaml`
|
|
|
|
**Dashboard-Markdown:**
|
|
```yaml
|
|
# Gleiche Änderung wie oben
|
|
state_attr('input_textarea.battery_charging_schedule', 'schedule')
|
|
```
|
|
|
|
## 📦 Betroffene Dateien
|
|
|
|
Alle **4 Dateien** wurden aktualisiert:
|
|
- ✅ `battery_optimizer_config.yaml`
|
|
- ✅ `battery_charging_optimizer.py`
|
|
- ✅ `battery_optimizer_dashboard.yaml`
|
|
- ✅ (Templates in config.yaml)
|
|
|
|
## 🔄 Migration
|
|
|
|
### Wenn du bereits installiert hast:
|
|
|
|
**Option A: Neuinstallation (empfohlen)**
|
|
1. Alte `input_text.battery_charging_schedule` Helper löschen
|
|
2. Neue Config mit `input_textarea` einfügen
|
|
3. Home Assistant neu starten
|
|
4. Neuen Plan berechnen
|
|
|
|
**Option B: Manuell ändern**
|
|
1. In UI: Einstellungen → Geräte & Dienste → Helfer
|
|
2. `battery_charging_schedule` löschen
|
|
3. Neu erstellen als "Text (mehrzeilig)" (= input_textarea)
|
|
4. Name: "Batterie Ladeplan"
|
|
5. Standardwert: `{}`
|
|
6. Python-Dateien ersetzen
|
|
7. Home Assistant neu starten
|
|
|
|
## 🧪 Testen
|
|
|
|
Nach dem Fix:
|
|
|
|
```yaml
|
|
# Entwicklerwerkzeuge → Dienste
|
|
|
|
# Plan berechnen
|
|
service: pyscript.calculate_charging_schedule
|
|
|
|
# Prüfe in Entwicklerwerkzeuge → Zustände
|
|
# → Suche: input_textarea.battery_charging_schedule
|
|
# → Sollte JSON mit Ladeplan enthalten (>255 Zeichen!)
|
|
```
|
|
|
|
**Beispiel-Output:**
|
|
```json
|
|
{
|
|
"2025-11-08 00:00:00": {
|
|
"action": "charge",
|
|
"power_w": -10000,
|
|
"price": 26.72,
|
|
"pv_forecast": 0.0,
|
|
"reason": "Günstiger Preis (26.72 ct), Wenig PV (0.0 kWh)"
|
|
},
|
|
...
|
|
}
|
|
```
|
|
|
|
## 📏 Größenvergleich
|
|
|
|
| Helper-Typ | Max. Größe | Geeignet für |
|
|
|------------|-----------|--------------|
|
|
| `input_text` | 255 Zeichen | ❌ JSON (zu klein) |
|
|
| `input_textarea` | Unbegrenzt | ✅ JSON (perfekt) |
|
|
|
|
**Typische Größen:**
|
|
- 24h Ladeplan: ~2000-4000 Zeichen
|
|
- input_text Limit: 255 Zeichen
|
|
- **⟹ input_textarea zwingend nötig!**
|
|
|
|
## 🎯 Warum input_textarea?
|
|
|
|
Home Assistant unterscheidet:
|
|
|
|
**input_text:**
|
|
- Einzeiliges Textfeld
|
|
- UI: Kleines Input-Feld
|
|
- Max: 255 Zeichen
|
|
- Use-Case: Namen, IDs, kurze Werte
|
|
|
|
**input_textarea:**
|
|
- Mehrzeiliges Textfeld
|
|
- UI: Großes Textfeld
|
|
- Max: Unbegrenzt
|
|
- Use-Case: JSON, Listen, lange Texte
|
|
|
|
## ✅ Status
|
|
|
|
**Hotfix:** v1.1.1
|
|
**Datum:** 2025-11-07 23:30
|
|
**Status:** ✅ Behoben
|
|
|
|
Alle Download-Dateien wurden aktualisiert!
|
|
|
|
## 📝 Zusätzliche Änderungen nötig?
|
|
|
|
**Nein!** Alle anderen Komponenten arbeiten transparent:
|
|
- ✅ PyScript kann beide Typen gleich nutzen
|
|
- ✅ Templates funktionieren identisch
|
|
- ✅ Automation unverändert
|
|
- ✅ Dashboard unverändert (außer Entity-ID)
|
|
|
|
Die einzige Änderung ist `input_text` → `input_textarea` in allen Referenzen.
|
|
|
|
## 🎓 Gelernt
|
|
|
|
**Wichtige Home Assistant Regel:**
|
|
- `input_text` = max. 255 Zeichen (hart limitiert)
|
|
- Für große Daten immer `input_textarea` verwenden
|
|
- Limit ist nicht konfigurierbar!
|
|
|
|
**Best Practice:**
|
|
- JSON-Daten → input_textarea
|
|
- IDs/Namen → input_text
|
|
- Bei Zweifeln → input_textarea (sicherer)
|
|
|
|
---
|
|
|
|
**Alle Dateien im Download sind bereits korrigiert!** ✅
|