Files
battery-charging-optimizer/legacy/v2/INSTALLATION.md

378 lines
10 KiB
Markdown

# 🚀 Battery Charging Optimizer - Installations-Anleitung
## Übersicht
Dieses System optimiert die Batterieladung basierend auf:
- ✅ Dynamischen Strompreisen (haStrom FLEX PRO)
- ✅ PV-Prognose (Forecast.Solar Ost/West)
- ✅ Batterie-SOC und Kapazität
- ✅ Haushalts-Reserve
**Besonderheit:** Nutzt dein bestehendes, bewährtes manuelles Steuerungssystem!
---
## 📋 Voraussetzungen
### Bereits vorhanden (✅):
1. **PyScript Integration** installiert und aktiviert
2. **OpenEMS** läuft auf BeagleBone mit GoodWe Batterie
3. **Modbus TCP Integration** für OpenEMS
4. **haStrom FLEX PRO** Sensor für Strompreise
5. **Forecast.Solar** Integration für PV-Prognose (Ost + West)
6. **Funktionierendes manuelles System**:
- `pyscript/ess_set_power.py`
- 3 Automationen für manuelles Laden
- REST Commands für Mode-Wechsel
- Input Helper `goodwe_manual_control` und `charge_power_battery`
### Zu installieren:
- Neue Konfigurationsdateien
- Neues Optimierungs-Script
- Dashboard (optional)
---
## 🔧 Installation
### Schritt 1: Konfiguration installieren
**Methode A: Als Package (empfohlen)**
1. Erstelle Verzeichnis `/config/packages/` falls nicht vorhanden
2. Kopiere `battery_optimizer_config.yaml` nach `/config/packages/`
3. In `configuration.yaml` sicherstellen:
```yaml
homeassistant:
packages: !include_dir_named packages
```
**Methode B: In configuration.yaml**
Kopiere den Inhalt von `battery_optimizer_config.yaml` in die entsprechenden Sektionen deiner `configuration.yaml`.
### Schritt 2: PyScript installieren
1. Kopiere `battery_optimizer.py` nach `/config/pyscript/`
2. **Wichtig:** Dein bestehendes `ess_set_power.py` bleibt unverändert!
### Schritt 3: Home Assistant neu starten
```bash
# Developer Tools → YAML → Restart
```
Oder über CLI:
```bash
ha core restart
```
### Schritt 4: Input Helper prüfen
Nach dem Neustart, gehe zu **Einstellungen → Geräte & Dienste → Helfer**
Folgende Helper sollten jetzt existieren:
- `input_boolean.battery_optimizer_enabled`
- `input_boolean.battery_optimizer_manual_override`
- `input_number.battery_capacity_kwh`
- `input_number.battery_optimizer_min_soc`
- `input_number.battery_optimizer_max_soc`
- `input_number.battery_max_charge_power`
- `input_number.battery_optimizer_price_threshold`
- `input_number.battery_reserve_capacity_kwh`
- `input_number.battery_optimizer_pv_threshold`
- `input_text.battery_optimizer_status`
**Falls nicht:** Prüfe die Konfiguration und Logs!
### Schritt 5: PyScript-Dienste prüfen
Gehe zu **Entwicklerwerkzeuge → Dienste**
Suche nach `pyscript` - folgende Dienste sollten vorhanden sein:
- `pyscript.calculate_charging_schedule`
- `pyscript.execute_charging_schedule`
- `pyscript.ess_set_power` (bestehend)
**Falls nicht:**
- Prüfe `/config/pyscript/battery_optimizer.py` existiert
- Prüfe Logs: `custom_components.pyscript`
---
## ⚙️ Konfiguration
### Batterie-Parameter einstellen
Gehe zu **Einstellungen → Geräte & Dienste → Helfer** und setze:
1. **Batterie-Kapazität**: `10 kWh` (GoodWe)
2. **Min. SOC**: `20%` (Schutz vor Tiefentladung)
3. **Max. SOC**: `100%` (oder z.B. 90% für Langlebigkeit)
4. **Max. Ladeleistung**: `5000W` (5 kW - dein System-Limit)
### Optimierungs-Parameter anpassen
1. **Preis-Schwellwert**: `28 ct/kWh` (Startwert, wird automatisch angepasst)
2. **Reserve-Kapazität**: `2 kWh` (Reserve für Haushalt)
3. **PV-Schwellwert**: `500 Wh` (Bei mehr PV keine Netz-Ladung)
### Sensor-Namen prüfen
Falls deine Sensoren andere Namen haben, passe diese in `battery_optimizer.py` an:
```python
# Zeile ~100
sensor_east = 'sensor.energy_production_today' # Dein Ost-Array
sensor_west = 'sensor.energy_production_today_2' # Dein West-Array
# Zeile ~35
price_entity = 'sensor.hastrom_flex_pro' # Dein Strompreis-Sensor
# Zeile ~185
current_soc = float(state.get('sensor.openems_ess0_soc') or 50) # Dein SOC-Sensor
```
---
## 🧪 Testen
### Test 1: Manuelle Berechnung
```yaml
# Entwicklerwerkzeuge → Dienste
service: pyscript.calculate_charging_schedule
```
**Erwartetes Ergebnis:**
- Log-Einträge in **Einstellungen → System → Protokolle**
- State `pyscript.battery_charging_schedule` existiert
- Attribute `schedule` enthält Array mit Stunden
**Prüfen in Developer Tools → Zustände:**
```
pyscript.battery_charging_schedule
Attributes:
schedule: [...]
last_update: 2025-11-09T17:30:00
num_hours: 24
num_charges: 3
```
### Test 2: Plan ansehen
```yaml
# Entwicklerwerkzeuge → Template
{{ state_attr('pyscript.battery_charging_schedule', 'schedule') }}
```
Sollte eine Liste mit Stunden-Einträgen zeigen:
```json
[
{
"datetime": "2025-11-09T23:00:00",
"hour": 23,
"action": "charge",
"power_w": -5000,
"price": 26.85,
"reason": "Günstig (26.85 ct) + wenig PV (0 Wh)"
},
...
]
```
### Test 3: Manuelle Ausführung
**ACHTUNG:** Nur testen wenn Batterie geladen werden kann!
```yaml
# Entwicklerwerkzeuge → Dienste
service: pyscript.execute_charging_schedule
```
**Was passiert:**
- Wenn aktuelle Stunde = Ladezeit → Aktiviert `input_boolean.goodwe_manual_control`
- Wenn nicht → Deaktiviert manuellen Modus
**Prüfen:**
- Log-Einträge zeigen welche Aktion ausgeführt wird
- Bei Ladung: `goodwe_manual_control` schaltet auf "on"
- Deine bestehende Automation übernimmt → Batterie lädt!
### Test 4: Automatische Zeitsteuerung warten
Die Zeit-Trigger sind aktiv:
- **14:05 Uhr täglich**: Neue Berechnung
- **xx:05 Uhr stündlich**: Ausführung
Warte bis zur nächsten vollen Stunde + 5 Min und prüfe Logs!
---
## 📊 Dashboard installieren (Optional)
1. Gehe zu deinem Lovelace Dashboard
2. **Bearbeiten** → **Raw-Konfigurations-Editor** (3 Punkte oben rechts)
3. Füge den Inhalt von `battery_optimizer_dashboard.yaml` ein
**Oder:** Manuell Cards erstellen über die UI
---
## 🔍 Troubleshooting
### Problem: "Keine Strompreis-Daten"
**Lösung:**
1. Prüfe Sensor `sensor.hastrom_flex_pro` existiert
2. Prüfe Attribut `hours` ist vorhanden:
```yaml
# Developer Tools → Zustände
sensor.hastrom_flex_pro
Attributes:
hours: [...]
```
3. Falls anderer Name → Anpassen in `battery_optimizer.py` Zeile ~35
### Problem: "Keine PV-Prognose"
**Lösung:**
1. Prüfe Forecast.Solar Sensoren existieren:
- `sensor.energy_production_today`
- `sensor.energy_production_today_2`
- `sensor.energy_production_tomorrow`
- `sensor.energy_production_tomorrow_2`
2. Falls andere Namen → Anpassen in `battery_optimizer.py` Zeile ~100
### Problem: PyScript-Dienste nicht sichtbar
**Lösung:**
1. Prüfe PyScript ist installiert: **HACS → Integrationen → PyScript**
2. Prüfe `/config/pyscript/battery_optimizer.py` existiert
3. Home Assistant neu starten
4. Logs prüfen: `grep pyscript /config/home-assistant.log`
### Problem: Batterie lädt nicht trotz Plan
**Lösung:**
1. Prüfe `input_boolean.battery_optimizer_enabled` ist "on"
2. Prüfe `input_boolean.battery_optimizer_manual_override` ist "off"
3. Prüfe deine bestehenden Automationen sind aktiv:
- "Switch: Manuelle Speicherbeladung aktivieren"
- "Automation: Speicher manuell laden"
4. Manuell testen:
```yaml
service: input_boolean.turn_on
target:
entity_id: input_boolean.goodwe_manual_control
```
→ Sollte Ladung starten über deine Automation!
### Problem: "Keine Daten für aktuelle Stunde"
**Ursache:** Plan wurde zu spät erstellt oder enthält nicht alle Stunden
**Lösung:**
1. Plan manuell neu erstellen:
```yaml
service: pyscript.calculate_charging_schedule
```
2. Prüfe ob tägliche Automation um 14:05 läuft
3. Plan sollte **aktuelle Stunde inkludieren**
---
## 🎓 Wie das System funktioniert
### Täglicher Ablauf
**14:05 Uhr:**
1. PyScript berechnet optimalen Ladeplan für nächste 24-36h
2. Berücksichtigt:
- Strompreise (dynamischer Schwellwert = 90. Perzentil)
- PV-Prognose Ost + West kombiniert
- Aktueller Batterie-SOC
- Konfigurierte Parameter
3. Speichert Plan als `pyscript.battery_charging_schedule` State
**Jede Stunde um xx:05:**
1. PyScript prüft was für aktuelle Stunde geplant ist
2. **Wenn "charge":**
- Setzt `input_number.charge_power_battery` auf Ziel-Leistung
- Aktiviert `input_boolean.goodwe_manual_control`
- Deine Automation übernimmt → Schreibt alle 30s via Modbus
3. **Wenn "auto":**
- Deaktiviert `goodwe_manual_control`
- System läuft im Automatik-Modus
### Strategie-Logik
**Laden wenn:**
- Strompreis < dynamischer Schwellwert (90. Perzentil)
- UND PV-Prognose < 500 Wh für diese Stunde
- UND Batterie nicht voll
- Sortiert nach: Niedrigster Preis zuerst
**Nicht laden wenn:**
- Preis zu hoch
- Genug PV-Erzeugung erwartet
- Batterie voll (inkl. Reserve)
---
## 🚀 Nächste Schritte
### Nach erfolgreicher Installation:
1. **Erste Woche beobachten**
- Prüfe Logs täglich
- Verifiziere dass Plan erstellt wird (14:05)
- Verifiziere dass Ausführung läuft (stündlich)
- Prüfe ob Batterie zur richtigen Zeit lädt
2. **Parameter optimieren**
- Preis-Schwellwert anpassen falls zu oft/selten lädt
- PV-Schwellwert anpassen basierend auf Erfahrung
- Reserve-Kapazität optimieren
3. **Statistiken sammeln**
- Notiere Einsparungen
- Vergleiche mit vorherigem Verbrauch
- Dokumentiere für Community
4. **Community-Veröffentlichung vorbereiten**
- Anonymisiere IP-Adressen und Passwörter
- Erstelle README mit deinen Erfahrungen
- Screenshots vom Dashboard
- Beispiel-Logs
---
## 📝 Wartung
### Regelmäßig prüfen:
- Logs auf Fehler durchsuchen
- Plan-Qualität bewerten (gute Vorhersagen?)
- Sensor-Verfügbarkeit (Strompreis, PV-Forecast)
### Bei Problemen:
1. Logs prüfen: `custom_components.pyscript`
2. Sensor-Zustände prüfen
3. Manuell Plan neu berechnen
4. Bei Bedarf Parameter anpassen
---
## 🎉 Fertig!
Dein intelligentes Batterie-Optimierungs-System ist jetzt installiert und nutzt dein bewährtes manuelles Steuerungssystem als solide Basis.
**Das System wird:**
- ✅ Automatisch täglich planen (14:05)
- ✅ Automatisch stündlich ausführen (xx:05)
- ✅ Zu günstigsten Zeiten laden
- ✅ PV-Eigenverbrauch maximieren
- ✅ Stromkosten minimieren
**Viel Erfolg! ⚡💰**