## 🎯 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>
238 lines
12 KiB
Markdown
238 lines
12 KiB
Markdown
# Home Assistant Entity Validation Report
|
|
|
|
Generated: 2025-11-19
|
|
|
|
## Summary
|
|
|
|
This report analyzes all entity references in the OpenEMS battery optimizer configuration files and validates their existence in the Home Assistant system.
|
|
|
|
---
|
|
|
|
## Files Analyzed
|
|
|
|
1. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v1/battery_optimizer_rest_commands.yaml`
|
|
2. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v1/battery_optimizer_config.yaml`
|
|
3. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v1/battery_optimizer_dashboard.yaml`
|
|
4. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v1/battery_optimizer_automations.yaml`
|
|
5. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v1/automation_hourly_execution_DRINGEND.yaml`
|
|
6. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v2/battery_optimizer_dashboard.yaml`
|
|
7. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v2/battery_optimizer_config.yaml`
|
|
8. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v3/battery_optimizer_dashboard.yaml`
|
|
9. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v3/battery_optimizer_dashboard_minimal.yaml`
|
|
10. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v3/battery_optimizer_sections_minimal.yaml`
|
|
11. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v3/battery_optimizer_dashboard_compact.yaml`
|
|
12. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v3/battery_optimizer_sections_compact.yaml`
|
|
13. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/v3/battery_optimizer_sections_standard.yaml`
|
|
14. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/battery_optimizer_config.yaml`
|
|
15. `/Users/felix/Nextcloud/AI/projects/homeassistant/openems/rest_requests.yaml`
|
|
|
|
---
|
|
|
|
## Entity References by Category
|
|
|
|
### Input Boolean Entities
|
|
|
|
| Entity ID | File(s) | Status |
|
|
|-----------|---------|--------|
|
|
| `input_boolean.battery_optimizer_enabled` | v1/config.yaml (defined), v1/dashboard.yaml, v1/automations.yaml, v2/dashboard.yaml, v2/config.yaml (defined), v3/all dashboards, openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `input_boolean.battery_optimizer_manual_override` | v1/config.yaml (defined), v1/dashboard.yaml, v1/automations.yaml, v2/dashboard.yaml, v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `input_boolean.goodwe_manual_control` | v2/dashboard.yaml, v3/all dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
|
|
### Input Number Entities
|
|
|
|
| Entity ID | File(s) | Status |
|
|
|-----------|---------|--------|
|
|
| `input_number.battery_optimizer_min_soc` | v1/config.yaml (defined), v1/dashboard.yaml, v1/automations.yaml, v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `input_number.battery_optimizer_max_soc` | v1/config.yaml (defined), v1/dashboard.yaml, v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `input_number.battery_optimizer_price_threshold` | v1/config.yaml (defined), v1/dashboard.yaml, v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `input_number.battery_optimizer_max_charge_power` | v1/config.yaml (defined), v1/dashboard.yaml, v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `input_number.battery_optimizer_reserve_capacity` | v1/config.yaml (defined), v1/dashboard.yaml, v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `input_number.battery_optimizer_pv_threshold` | v2/dashboard.yaml, v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `input_number.battery_capacity_kwh` | v2/dashboard.yaml, v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `input_number.charge_power_battery` | v2/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `input_number.battery_min_soc` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `input_number.battery_max_soc` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `input_number.battery_charging_power` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `input_number.battery_reserve_capacity` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `input_number.battery_price_threshold` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
|
|
### Input Select Entities
|
|
|
|
| Entity ID | File(s) | Status |
|
|
|-----------|---------|--------|
|
|
| `input_select.battery_optimizer_strategy` | v1/config.yaml (defined), v1/dashboard.yaml | **DEFINED** ✓ |
|
|
|
|
### Input Text Entities
|
|
|
|
| Entity ID | File(s) | Status |
|
|
|-----------|---------|--------|
|
|
| `input_text.battery_optimizer_status` | v2/dashboard.yaml, v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
|
|
### Sensor Entities
|
|
|
|
| Entity ID | File(s) | Status |
|
|
|-----------|---------|--------|
|
|
| `sensor.battery_state_of_charge` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.nächste_ladestunde` | v1/dashboard.yaml | **TEMPLATE SENSOR** - defined as template ✓ |
|
|
| `sensor.geplante_ladungen_heute` | v1/dashboard.yaml | **TEMPLATE SENSOR** - defined as template ✓ |
|
|
| `sensor.hastrom_flex_pro` | v1/config.yaml, v1/dashboard.yaml, v1/automations.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.durchschnittspreis_heute` | v1/dashboard.yaml | **TEMPLATE SENSOR** - defined as template ✓ |
|
|
| `sensor.pv_power` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.battery_power` | v1/dashboard.yaml, v2/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.house_consumption` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.gw_netzbezug` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.gw_netzeinspeisung` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.today_s_pv_generation` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.energy_production_tomorrow` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.energy_production_tomorrow_2` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.today_battery_charge` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.today_battery_discharge` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.bought_from_grid_today` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.sold_to_grid_today` | v1/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.openems_ess0_soc` | v2/dashboard.yaml | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.openems_ess0_activepower` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.openems_grid_activepower` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.openems_production_activepower` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.openems_consumption_activepower` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.esssoc` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.hastrom_flex_extended_current_price` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.battery_charging_plan_status` | v2/dashboard.yaml, v3/dashboards, openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `sensor.battery_next_action` | v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `sensor.battery_estimated_savings` | v2/config.yaml (defined), openems/config.yaml (defined) | **DEFINED** ✓ |
|
|
| `sensor.battery_next_charge_time` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.openems_state` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.battery_capacity` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.openems_ess0_capacity` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.forecast_solar_energy_today` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `sensor.forecast_solar_energy_tomorrow` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
|
|
### Automation Entities
|
|
|
|
| Entity ID | File(s) | Status |
|
|
|-----------|---------|--------|
|
|
| `automation.battery_charging_schedule_calculation` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
| `automation.battery_charging_schedule_execution` | v3/dashboards | **NEEDS VERIFICATION** ⚠️ |
|
|
|
|
### PyScript State Entities
|
|
|
|
| Entity ID | File(s) | Status |
|
|
|-----------|---------|--------|
|
|
| `pyscript.battery_charging_schedule` | v1/config.yaml, v1/dashboard.yaml, openems/config.yaml | **PYSCRIPT ENTITY** ✓ |
|
|
| `pyscript.battery_charging_plan` | v3/dashboards | **PYSCRIPT ENTITY** ✓ |
|
|
|
|
### REST Command Entities
|
|
|
|
| Entity ID | File(s) | Status |
|
|
|-----------|---------|--------|
|
|
| `rest_command.set_ess_remote_mode` | v1/rest_commands.yaml (defined), openems/rest_requests.yaml (defined) | **DEFINED** ✓ |
|
|
| `rest_command.set_ess_internal_mode` | v1/rest_commands.yaml (defined), openems/rest_requests.yaml (defined) | **DEFINED** ✓ |
|
|
|
|
---
|
|
|
|
## Issues Found
|
|
|
|
### 1. **Entity Name Inconsistencies**
|
|
|
|
Multiple versions use different entity naming conventions:
|
|
|
|
- **V1/V2**: Use `input_number.battery_optimizer_*` prefix
|
|
- **V3**: Use shortened `input_number.battery_*` prefix
|
|
- **OpenEMS root**: Uses `input_number.battery_optimizer_*` prefix
|
|
|
|
**Recommendation**: Standardize on one naming convention. Based on the root config file, `battery_optimizer_*` appears to be the canonical naming.
|
|
|
|
### 2. **Missing Entity Definitions**
|
|
|
|
The following entities are referenced but not defined in configuration files:
|
|
|
|
- `input_boolean.goodwe_manual_control`
|
|
- `input_number.charge_power_battery`
|
|
- All `input_number.battery_*` entities (shortened names in v3)
|
|
- Most OpenEMS sensors (`sensor.openems_*`, `sensor.esssoc`)
|
|
- haStrom price sensors (`sensor.hastrom_flex_pro`, `sensor.hastrom_flex_extended_current_price`)
|
|
- Forecast Solar sensors
|
|
- Battery status sensors
|
|
|
|
**These may be defined elsewhere in your Home Assistant configuration or created by integrations.**
|
|
|
|
### 3. **Template Sensor Dependencies**
|
|
|
|
Template sensors defined in config files depend on PyScript states that must exist:
|
|
|
|
```yaml
|
|
# Depends on: pyscript.battery_charging_schedule.schedule
|
|
sensor.battery_charging_plan_status
|
|
sensor.battery_next_action
|
|
sensor.battery_estimated_savings
|
|
```
|
|
|
|
### 4. **Dashboard References to Non-Existent Entities**
|
|
|
|
V3 dashboards reference entities with different names than those defined in the configuration:
|
|
|
|
**Dashboard uses**: `input_number.battery_min_soc`
|
|
**Config defines**: `input_number.battery_optimizer_min_soc`
|
|
|
|
This will cause errors in the dashboard rendering.
|
|
|
|
---
|
|
|
|
## Recommendations
|
|
|
|
### Priority 1: Name Standardization
|
|
|
|
Choose one naming convention and update all files:
|
|
|
|
**Option A (Recommended)**: Use full `battery_optimizer_*` names (matches root config)
|
|
- Update V3 dashboards to use `battery_optimizer_` prefix
|
|
|
|
**Option B**: Use shortened `battery_*` names
|
|
- Update root config file and V1/V2 files
|
|
- Update automations and PyScript references
|
|
|
|
### Priority 2: Verify Integration-Created Entities
|
|
|
|
Check that these integrations are properly configured:
|
|
1. **OpenEMS Modbus Integration** - Should create `sensor.openems_*` entities
|
|
2. **haStrom Integration** - Should create price sensors
|
|
3. **Forecast.Solar Integration** - Should create forecast sensors
|
|
|
|
### Priority 3: Create Missing Helper Entities
|
|
|
|
If not already created, add these to your configuration:
|
|
- `input_boolean.goodwe_manual_control`
|
|
- `input_number.charge_power_battery`
|
|
- Any `sensor.*` entities that aren't integration-provided
|
|
|
|
### Priority 4: PyScript State Verification
|
|
|
|
Ensure PyScript scripts are creating the expected states:
|
|
- `pyscript.battery_charging_schedule`
|
|
- `pyscript.battery_charging_plan`
|
|
|
|
---
|
|
|
|
## Testing Checklist
|
|
|
|
1. [ ] Load configuration files and check for YAML errors
|
|
2. [ ] Verify all `input_*` helpers exist in Home Assistant UI
|
|
3. [ ] Check Developer Tools → States for all referenced sensors
|
|
4. [ ] Verify PyScript states exist after running optimization
|
|
5. [ ] Test dashboard loading - check for "Entity not available" errors
|
|
6. [ ] Verify automations trigger correctly
|
|
7. [ ] Check Home Assistant logs for missing entity warnings
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
To complete validation, I need access to your Home Assistant system to:
|
|
1. Query all existing entities via the ha-mcp-server
|
|
2. Cross-reference with this list
|
|
3. Provide a definitive "exists/missing" report
|
|
|
|
**Would you like me to:**
|
|
- Connect to your Home Assistant to verify which entities actually exist?
|
|
- Generate corrected configuration files with standardized names?
|
|
- Create a consolidated configuration that merges the best from each version?
|