[[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]]