[[Uebersicht|← Zurück zur Homepage]]
# Akku Lade-Sperre bei Tibber-Preisniveau
## Zweck
Schaltet die Lade- und Entlade-Erlaubnis der drei Marstek-Batterien (MTV01/02/03)
automatisch anhand des aktuellen Tibber-Preisniveaus. Sendet eine
`persistent_notification` mit einer Zusammenfassung aller Änderungen.
## Automation
**Datei:** `automations.yaml`
**ID:** `1751200000001`
**Alias:** Akku Lade-Sperre bei Tibber-Preisniveau
**Mode:** single
## Logik
**Stand 2026-07-11:** Preisniveau-basiert (nicht mehr fester ct-Schwellenwert). PV-Überschuss
hat **Vorrang** vor der Preis-Logik; aktiver Zellabgleich hat **Vorrang vor allem** (siehe
[Zellabgleich-Ausnahme](#zellabgleich-ausnahme)) und wirkt pro Batterie.
| Bedingung | Entladen (allow_discharge) | Laden (allow_charge) |
|---|---|---|
| **Netzbezug < −100 W** (PV-Überschuss, 2 min stabil) | OFF | ON |
| Niveau `very_cheap` | OFF | ON |
| Niveau `cheap` **und** Preis **< 23,7 ct/kWh** (2-ct-Puffer unter Break-Even) | OFF | ON |
| Niveau `cheap` und Preis ≥ 23,7 ct, oder `normal`/`expensive`/`very_expensive` | ON | OFF |
| Preis ungültig (`< 0`) **und** kein PV-Überschuss | *keine Änderung* | *keine Änderung* |
Break-Even-Herleitung der 23,7-ct-Schwelle: siehe [[project_strompreis_wochenauswertung|Strompreis-nach-Preisniveau-Wochenauswertung]]
(Break-Even für Entladen bei `normal` ≈ 25,7 ct, davon 2 ct Sicherheitspuffer abgezogen).
Der Break-Even wird bewusst **nicht** als unterer Preis-Floor fürs Entladen verwendet
(Ladekosten sind beim Entladen bereits versunken) — siehe Klarstellung in derselben Note.
**Trigger:**
- `homeassistant: start` — nach HA-Neustart
- `time_pattern minutes: "5"` — alle 5 Minuten
- `sensor.daheim_aktuelles_preisniveau` — bei jedem Zustandswechsel
- `sensor.daheim_aktueller_strompreis` — below/above 23,7 (Schwellenübergang für den `cheap`-Puffer)
- `sensor.electricity_arenberger_str_230a_gesamtleistung` — below **−100 W** / above **+100 W**, `for: 00:02:00`
- `switch.mtv01/02/03_active_balance_mode` — bei jedem Zustandswechsel (löst sofortige Neubewertung nach Balancing-Ende aus)
**Warum ±100 W / 2 Minuten?**
Analyse von 50.000 Messwerten ergab: 70 % aller Werte liegen im Bereich ±50 W (Messrauschen).
Von den negativen Werten (Einspeisung) sind 68 % kleiner als −50 W — kein echter PV-Überschuss.
Die Kombination aus Schwellwert ±100 W und Verzögerung 2 min eliminiert ~74 % der Fehlauslösungen.
Bewusst nicht weiter verschärft (Abwägung gegen Schalt-Flattern), siehe [[project_ha_claude_mcp]].
## Betroffene Switches
- `switch.mtv01_battery_allow_discharge`
- `switch.mtv02_battery_allow_discharge`
- `switch.mtv03_battery_allow_discharge`
- `switch.mtv01_battery_allow_charge`
- `switch.mtv02_battery_allow_charge`
- `switch.mtv03_battery_allow_charge`
## Priorität
1. **Temperatur-Alarm** (`input_boolean.marstek_temperatur_alarm_aktiv == on`) — Automation bricht komplett ab (Condition), keine Änderung an irgendeinem Switch. Die Temperatur-Automation (ID `1750000000001/2`, siehe [[06 Marstek-Temperatur-Alarm|Marstek-Temperatur-Alarm]]) behält volle Kontrolle.
2. **Aktiver Zellabgleich pro Batterie** (`switch.mtv0X_active_balance_mode == on`) — nur diese eine Batterie wird von der Schalter-Änderung ausgenommen, die anderen laufen normal weiter (kein globaler Abbruch wie bei 1.). Siehe [Zellabgleich-Ausnahme](#zellabgleich-ausnahme).
3. **PV-Überschuss** (Netzbezug < −100 W, 2 min stabil) — Entladen OFF, Laden ON
4. **Niveau `very_cheap`, oder `cheap` mit Preis < 23,7 ct** — Entladen OFF, Laden ON
5. **Sonst (`cheap` ≥ 23,7 ct, `normal`, `expensive`, `very_expensive`)** — Entladen ON, Laden OFF
## Zellabgleich-Ausnahme
**Ergänzt 2026-07-11.** Beim Zellausgleich (Balancing) lädt Marstek eine Batterie gezielt
komplett voll, um das Zellendelta zu reduzieren (siehe [[project_ha_claude_mcp]], Abschnitt
"Marstek-Zellausgleich"). Damit die Preis-Automation diesen Vorgang nicht durch ein
`allow_charge: off` oder `allow_discharge: on` unterbricht, wird `switch.mtv0X_active_balance_mode`
für jede der drei Batterien einzeln geprüft — ist er `on`, werden beide Switches dieser
Batterie von der Änderungsliste ausgeschlossen, unabhängig vom aktuellen Preisniveau.
Die anderen (nicht balancierenden) Batterien werden davon nicht beeinflusst.
Live verifiziert (2026-07-11): Bei aktivem Balancing aller 3 Batterien (alle Switches `on`)
und Preisniveau `cheap` < 23,7 ct (also Ziel Entladen OFF) blieb die Änderungsliste korrekt
leer — ohne die Ausnahme hätte die Automation `allow_discharge` auf `off` gesetzt.
## Besonderheiten
- **Nur Änderungen werden geschaltet:** Der `variables:`-Step berechnet vorab, welche
Switches vom Zielzustand abweichen. Unnötige `turn_on`/`turn_off`-Aufrufe entfallen.
- **Notification nur bei Änderung:** Wenn alle Switches bereits im Zielzustand sind,
endet die Automation ohne Notification.
- **unavailable/unknown:** Wenn Preis-Sensor ungültig (float < 0) **und** kein PV-Überschuss → leere Liste, keine Aktion. Bei PV-Überschuss wird auch ohne gültigen Preis geschaltet.
## Technischer Hinweis
`numeric_state`-Trigger feuern nur bei Schwellenüberschreitung. PV-Überschuss-Trigger
reagieren auf den Wechsel Einspeisung ↔ Netzbezug, aber erst nach 2 Minuten Stabilität.
Notification zeigt den Auslöse-Modus (PV-Überschuss / günstig / teuer).
**Logik-Tabelle Netzbezug-Sensor:**
| Wert | Bedeutung |
|---|---|
| < −100 W (2 min) | PV-Überschuss → Entladen OFF, Laden ON |
| −100 bis +100 W | Rauschen / Übergangsbereich → kein Trigger |
| > +100 W (2 min) | Netzbezug → Preis-Logik greift |
Notification listet zusätzlich auf, welche Batterien wegen aktivem Zellabgleich von der
aktuellen Änderung ausgenommen wurden.
**Bekanntes Verhalten:** Nach `automation.reload` steht diese Automation zuverlässig auf
`off` (Enabled-Status wird beim Reload nicht übernommen) — nach jeder Config-Änderung
zusätzlich `automation.turn_on` aufrufen und verifizieren.
## Tags
`#homeassistant` `#marstek` `#automation` `#tibber` `#preisniveau` `#laden`
---
## Versionshistorie
| Version | Datum/Uhrzeit | Änderung |
|---|---|---|
| v1.4 | 2026-07-03 | Hysterese ±100 W / 2 min dokumentiert |
| v1.5 | 2026-07-05 | `automation_reloaded` → `time_pattern minutes: "5"`; PV-Schwelle in Action `< 0` → `< -100` |
| v1.5 (übernommen) | 2026-07-10 | Aus Repo-Doku `docs/Akku-Lade-Sperre.md` in Obsidian übernommen |
| v1.5 (konsolidiert) | 2026-07-11 | Als kanonische, implementierte Version bestätigt; ältere Design-Spec (Preisniveau-basiert, mit YAML) nach `.trash` archiviert |
| v1.6 | 2026-07-11 07:50 | Doku war veraltet (Automation nutzte tatsächlich nur festen 25-ct-Schwellenwert). Automation auf echte Preisniveau-Logik umgestellt: `very_cheap` → immer laden, `cheap` → nur laden wenn Preis < 23,7 ct (Break-Even-Puffer), sonst entladen. Snapshot, Config-Check, Live-Template-Test, Reload + Reaktivierung. |
| v1.7 | 2026-07-11 10:15 | Zellabgleich-Ausnahme ergänzt: `switch.mtv0X_active_balance_mode` wird pro Batterie geprüft, balancierende Batterien werden von Schalter-Änderungen ausgenommen (nicht global, nur die betroffene Batterie). Zusätzlicher State-Trigger auf die 3 Balance-Mode-Switches. Live verifiziert (alle 3 Batterien balancierten, Änderungsliste blieb korrekt leer trotz Preis-Signal für Entladen OFF). Diese Doku entsprechend vollständig aktualisiert (war seit v1.5 nicht mehr synchron mit der echten Automations-Logik). |
---
[[Impressum|Impressum]] | [[Datenschutzerklärung|Datenschutz]]