Vollautomatische Nulleinspeisung für den Solakon ONE Wechselrichter als native Home Assistant Integration — kein Blueprint, keine Helfer-Entitäten, keine manuelle YAML-Pflege.
Die Integration regelt die Ausgangsleistung des Wechselrichters über einen PI-Regler so, dass der Netzbezug möglichst bei 0 W gehalten wird. Alle Parameter werden über ein Sidebar-Panel direkt in der HA-Oberfläche konfiguriert und persistent gespeichert.
Unterschied zur Blueprint-Variante: Diese Integration ersetzt Automation-Blueprint, PI-Script-Blueprint und alle manuell zu erstellenden Helfer durch eine einzige, nativ installierbare Komponente. Keine
input_boolean-,input_number- oder Script-Helper erforderlich — der gesamte Regelzustand wird intern im Coordinator gehalten.
Hier kannst du das Dashboard interaktiv testen:
Note
Dies ist eine statische Web-Vorschau zur Demonstration des UI-Designs. Die Werte sind Beispieldaten.
Die Netzleistung ist die Regelgröße, die Wechselrichterausgangsleistung die Stellgröße. Der P-Anteil reagiert sofort auf Abweichungen, der I-Anteil gleicht dauerhaften Offset aus. Ein konfigurierbares Totband verhindert unnötige Stelleingriffe bei kleinen Schwankungen. Optional wartet der Regler auf die tatsächliche Leistungsübernahme des Wechselrichters statt auf eine feste Wartezeit (Self-Adjusting Wait).
Das Verhalten wird abhängig vom Batterie-Ladestand in vier Zonen eingeteilt:
| Zone | Bedingung | Modus | Max. Entladestrom | Regelziel | Besonderheiten |
|---|---|---|---|---|---|
| Zone 0 | SOC ≥ Export-Schwelle UND PV-Überschuss | '1' |
2 A (Stabilitätspuffer) | Hard Limit Z0 | Optional. PI-Integral eingefroren. SOC- und PV-Hysterese verhindern Flackern. |
| Zone 1 | SOC > Zone-1-Schwelle | '1' |
Konfigurierter Maximalwert | 0 W + Offset 1 | Läuft bis Zone-3-Schwelle — kein Yo-Yo-Effekt. Auch nachts aktiv. |
| Zone 2 | Zone-3 < SOC ≤ Zone-1 | '1' |
0 A | 0 W + Offset 2 | Output-Limit: min(Hard-Limit Z1, max(0, PV − Reserve)). Optional: Nachtabschaltung. |
| Zone 3 | SOC ≤ Zone-3-Schwelle | '0' (Disabled), außer AC Laden aktiv → '3' |
0 A | — | Output = 0 W. Vollständiger Batterieschutz. AC Laden bleibt möglich. |
☀️ Überschuss-Einspeisung (Zone 0) — Wenn PV-Erzeugung den Eigenbedarf um mehr als eine konfigurierbare Hysterese übersteigt und der SOC eine Zielschwelle erreicht hat, wird der Wechselrichter über den Nullpunkt hinaus angesteuert. Ein SOC-Hysterese-Band und eine PV-Hysterese verhindern Flackern beim Ein- und Ausschalten.
⚡ AC-Laden — Steuert den Wechselrichter in den Lademodus, wenn der SOC unter ein Ziel fällt und externer Überschuss erkannt wird (Grid + ΣOutput_entladend < −Hysterese, Σ über alle Instanzen im Entlademodus). Eigener PI-Regler mit separaten P/I-Faktoren, eigenem Offset und konfigurierbarer Leistungsobergrenze.
💹 Tarif-Arbitrage — Wertet einen externen Strompreis-Sensor aus und lädt bei günstigem Tarif automatisch auf, sperrt die Entladung unterhalb der Teuer-Schwelle (günstig + mittel) in Zone 1 und Zone 2, und gibt sie bei teurem Tarif wieder frei.
📈 Dynamischer Offset — Berechnet den Nullpunkt-Offset automatisch aus der Netz-Volatilität (Standardabweichung). Ersetzt den separaten Dynamic-Offset-Blueprint — alle Parameter sind pro Zone (Zone 1, Zone 2, Zone AC) einzeln konfigurierbar, inklusive optionalem negativem Offset.
🌙 Nachtabschaltung — Unterdrückt in Zone 2 den Entladebetrieb unterhalb einer konfigurierbaren PV-Erzeugungsschwelle. Zone 1 und AC Laden laufen auch nachts weiter.
Priorität und gegenseitige Blockierung der optionalen Module:
Die Module werden in fest definierter Prioritätsreihenfolge ausgewertet — ein aktives Modul höherer Priorität blockiert den Start niedrigerer Module:
| Priorität | Modul | Blockiert |
|---|---|---|
| 1 (höchste) | ☀️ Überschuss-Einspeisung | Tarif-Laden (GT), Discharge-Lock (TM), AC Laden (G) |
| 2 | 💹 Tarif-Laden (günstig) | AC Laden (via Modus '3'), Discharge-Lock |
| 3 | 💹 Discharge-Lock (< Teuer) | Zone-1/2-Recovery (Fall D), Zone-2-Start (Fall E) |
| 4 | ⚡ AC Laden | Tarif-Laden (via Modus '3'), Discharge-Lock |
| 5 | 🌙 Nachtabschaltung | Zone-2-Start (Fall E) |
| 6 (niedrigste) | Zone 1 / Zone 2 | — |
AC Laden und Tarif-Laden blockieren sich gegenseitig über den Modus-Guard (Modus ≠ '3'). Überschuss-Einspeisung hat absoluten Vorrang — kein anderes optionales Modul kann während Zone 0 starten.
Bei mehr als einer installierten Instanz zeigt das Sidebar-Panel oben eine Instanzleiste sowie eine Übersichtsseite mit Echtzeit-Status aller Instanzen.
Laufen mehrere Instanzen gleichzeitig, berechnet jeder Coordinator seinen Gewichts-Anteil w_i und verwendet ihn sowohl für den PI-Regelungsfehler als auch für das zugeteilte Leistungslimit in Zone 1. Das läuft in zwei vollständig getrennten Pools, je nachdem welche Rolle eine Instanz gerade einnimmt:
# Pool 1 — Nulleinspeisung (nur Instanzen aktuell in Modus '1'):
# Gleichverteilung:
w_i = 1 / Anzahl_Instanzen_in_Modus_1
# SOC-gewichtet:
nutzbar_i = (SOC_i − Zone-3-Schwelle_i) / 100
w_i = nutzbar_i / Σ nutzbar_j
# Kapazitätsgewichtet:
nutzbar_i = (SOC_i − Zone-3-Schwelle_i) / 100 × Kapazität_kWh_i
w_i = nutzbar_i / Σ nutzbar_j
# Ergebnis pro Instanz:
allocated_power_i = total_power × w_i → effektives Hard-Limit in Zone 1 / 2
error_share_i = w_i → Anteil am Netzfehler im normalen PI-Regler
# Pool 2 — AC Laden (nur Instanzen aktuell mit ac_charge_active):
# gleiche Gleichverteilungs-/Gewichtungs-Logik, aber ausschließlich unter
# gleichzeitig ladenden Instanzen — kein allocated_power (AC-Ladeleistung
# bleibt unabhängig vom Hard-Limit), nur ein eigener error_share für den
# AC-Lade-PI (siehe „AC Laden" unten).
Eine Instanz, die gerade in Modus '0' (idle) steht, trägt zu keinem der beiden Pools bei und bekommt error_share = 0 sowie allocated_power = None (statisches Hard-Limit gilt unverändert). Eine Instanz, die aktuell AC lädt, verwässert nicht den Nulleinspeisungs-Pool der anderen — und umgekehrt beeinflusst eine nulleinspeisende Instanz nicht den AC-Lade-Pool. Bei nur einer aktiven Instanz je Pool bleibt w_i = 1,0.
Batteriekapazität (kWh): Nur bei Verteilungs-Modus „Kapazitätsgewichtet" relevant. Fehlt der Sensor bei irgendeiner aktiven Instanz, wird die Kapazität für alle neutral (1.0) gewertet — die Gewichtung entspricht dann „SOC-gewichtet". Sinnvoll wenn die Instanzen Batterien unterschiedlicher Kapazität steuern.
Im Panel wird bei mehreren Instanzen ein zusätzlicher Verteilungs-Tab eingeblendet.
| Parameter | Beschreibung |
|---|---|
| Gesamte Max. Ausgangsleistung (W) | Absolute Obergrenze aller Instanzen zusammen |
| Verteilungs-Modus | Gleichverteilung / SOC-gewichtet / Kapazitätsgewichtet — drei sich gegenseitig ausschließende Optionen, siehe Formeln oben |
| Kapazitätssensor (pro Instanz) | Nur bei Modus „Kapazitätsgewichtet" wirksam (Feld sonst ausgegraut). sensor.solakon_one_batteriekapazitat. Der Validierungspunkt neben dem Feld zeigt live, ob die Entity existiert und einen Wert liefert (grün/gelb/rot) |
Globale Sensoren: Zusätzliche Karte im Verteilungs-Tab für Sensoren, die typischerweise für den ganzen Haushalt gelten statt pro Solakon-Instanz zu unterscheiden — eine Wetter-/Solcast-Vorhersage, ein Stromtarif. Jede Instanz kann im jeweiligen Tab (Überschuss/Zonen/Tarif) optional lokal überschreiben; ist dort nichts gesetzt, gilt der globale Wert. Anders als der Kapazitätssensor (real pro Instanz unterschiedlich, keine sinnvolle globale Vorgabe) sind das reine Entity-Picker ohne eigene Enable-Flags oder Schwellen — die bleiben ausschließlich lokal pro Instanz.
| Globaler Sensor | Speist |
|---|---|
| PV-Vorhersage heute (kWh) | Surplus-Forecast-Erzwingung (Überschuss-Tab), Tarif-Lock-Unterdrückung (Tarif-Tab), 0–12 Uhr zusätzlich Zone-1-Nacht-Forcierung (Zonen-Tab) |
| PV-Vorhersage morgen (kWh) | Zone-1-Nacht-Forcierung (Zonen-Tab) |
| Leistungs-Vorhersage jetzt (W) | Austritts-Sperre (Überschuss-Tab) |
| Strompreis-Sensor | Tarif-Arbitrage (Tarif-Tab) |
| Günstig-/Teuer-Schwelle dynamisch | Tarif-Arbitrage (Tarif-Tab) |
- Home Assistant 2024.1 oder neuer
- HACS installiert
- Solakon ONE Wechselrichter mit Modbus-Integration in HA
- Sensor für die Netzleistung (z. B. Shelly 3EM, Shelly PM) — positiv = Bezug, negativ = Einspeisung
Wichtig: Die Implementierung der Fernsteuerung in der Solakon-Integration kennt kein echtes „Disabled" als Fernsteuerbefehl — '0' schaltet die Fernsteuerung ab und die App-Standardeinstellungen greifen. Damit die Nulleinspeisung wie gewünscht funktioniert, sollte entweder ein 0-W-Zeitplan für 24 Stunden aktiv sein oder die Standard-Ausgangsleistung auf 0 W gestellt werden.
Die folgenden Solakon-Entitäten müssen in HA vorhanden sein und werden beim Einrichten zugewiesen:
| Typ | Beschreibung |
|---|---|
sensor (power) |
Netzleistung |
sensor (power) |
Tatsächliche WR-Ausgangsleistung |
sensor (power) |
PV-Erzeugungsleistung |
sensor (battery) |
Batterieladestand (SOC) |
sensor |
Remote-Timeout-Countdown |
number |
Ausgangsleistungsregler |
number |
Maximaler Entladestrom |
number |
Modus-Reset-Timer |
select |
Betriebsmodus |
number (optional) |
Netz-Ausgangsleistungsgrenze — für Export-Limit-Feature |
Hinweis zu Timeout-Countdown & Modus-Reset-Timer: Die Solakon-Fernsteuerung läuft ab, wenn der Countdown-Sensor abläuft. Die Integration hält sie aktiv, indem sie den Modus-Reset-Timer rechtzeitig togglet (Countdown < 120 s). Derselbe Toggle-Mechanismus erzwingt zusätzlich bei jedem Moduswechsel die sichere Übernahme durch den Solakon (siehe Stichwort „Timer-Toggle" in der Falls-Tabelle weiter unten).
Hinweis zum „Maximalen Entladestrom": In der offiziellen Solakon Home-Assistant-Integration ist die Entität
number.solakon_one_maximaler_entladestromstandardmäßig deaktiviert. Wird sie im Einrichtungsformular als „unbekannte Entität" angezeigt, muss sie zunächst in HA unter dem Solakon-Gerät bei den Konfigurations-Entitäten aktiviert werden (Gerät → Entität → Zahnrad → „Aktivieren"). Ohne diese Entität kann die Integration den Entladestrom nicht steuern.
- HACS öffnen → Integrationen → drei Punkte oben rechts → Benutzerdefiniertes Repository hinzufügen
- URL eintragen:
https://github.com/D4nte85/Solakon-One-Nulleinspeisung-integration - Kategorie: Integration → Hinzufügen
- Die Integration Solakon ONE Nulleinspeisung erscheint in der Liste → Herunterladen
- Home Assistant neu starten
Repository klonen oder als ZIP herunterladen und den Ordner custom_components/solakon_nulleinspeisung in das Verzeichnis config/custom_components/ der HA-Installation kopieren, dann HA neu starten.
Nach dem Neustart unter Einstellungen → Geräte & Dienste → Integration hinzufügen nach Solakon suchen.
Im Einrichtungsformular werden zunächst ein Instanzname (z. B. „Speicher 1" — wird zum Gerätenamen in HA, relevant bei mehreren Instanzen, siehe Multi-Instancing) sowie die neun Pflichtentitäten zugewiesen. Alle weiteren Parameter (PI-Regler, SOC-Zonen, optionale Module) werden nicht im Config-Flow konfiguriert, sondern ausschließlich über das Sidebar-Panel.
Die Regelung startet nach der Einrichtung mit deaktiviertem Schreibteil (
Regelung aktiv = Aus). Erst nach Prüfung der Konfiguration im Panel sollte die Regelung aktiviert werden.
Nach der Einrichtung erscheint in der HA-Seitenleiste der Eintrag Solakon ONE. Das Panel ist in zehn Tabs gegliedert. Änderungen werden erst nach Klick auf 💾 Speichern übernommen — die Speicherleiste erscheint automatisch sobald ein Wert geändert wurde.
Alle Eingabefelder für Entity-IDs (z. B. Kapazitäts-, Vorhersage- und Preis-Sensoren) zeigen rechts einen Validierungspunkt, der die eingetragene Entity live gegen Home Assistant prüft: grün = Entity liefert einen Wert, gelb = Entity existiert, ist aber unknown/unavailable, rot = Entity existiert nicht (Tippfehler prüfen). Der Punkt aktualisiert sich beim Tippen und im laufenden Betrieb.
Echtzeit-Übersicht aller Regelzustände: aktive Zone mit farblichem Banner (Zone 0–3), Netzleistung, Solarleistung, Ausgangsleistung, SOC, Netz-Standardabweichung (Stabilitätsindikator), PI-Integral-Wert, aktiver Offset (Zone 1 / Zone 2 / Zone AC) mit Quelle (dynamisch / statisch), Zeitabstand seit letzter Regelaktion und seit letztem Moduswechsel, letzte Aktion und etwaige Fehlermeldungen, Status-Flags: Zyklus, Surplus, AC Laden, Tarif-Laden, Nacht, PV→Tarif, PV→Surplus, Austritts-Sperre, Schaltfläche zum manuellen Zurücksetzen des PI-Integrals.
Kern des Regelkreises. Vollständige Einstellhilfe → PI-Regler Einstellung.
| Parameter | Beschreibung | Empfehlung |
|---|---|---|
| P-Faktor | Proportionale Verstärkung — sofortige Reaktion auf Abweichung | 0,8–1,5 |
| I-Faktor | Integrale Verstärkung — gleicht dauerhaften Offset aus | 0,03–0,08 |
| Totband (W) | Abweichungen innerhalb dieses Bereichs lösen keinen Stelleingriff aus | 10–30 |
| Wartezeit (s) | Feste Pause (ohne Self-Adjust) oder maximales Timeout als Sicherheitsnetz (mit Self-Adjust) | 1–5 |
| Stabw.-Fenster (s) | Zeitfenster für den internen Standardabweichungs-Sensor | 30–300 |
| Self-Adjusting Wait | Wartet auf die tatsächliche WR-Ausgangsleistung statt fester Wartezeit | Empfohlen |
| Zielwert-Toleranz (W) | Abweichung, ab der der Zielwert als erreicht gilt (nur bei Self-Adjust) | 2–5 |
| Periodischer Trigger | Startet die Regelschleife im konfigurierten Intervall neu — auch ohne Sensor-Änderung. Sinnvoll bei stabilen Haushalten, in denen der Netzbezug selten springt. | Aus |
| Trigger-Intervall (s) | Abstand zwischen zwei periodischen Regelläufen. Bereich: 5–300 s. | 10–60 |
SOC-Zonenlogik mit allen Leistungs- und Offset-Parametern.
| Parameter | Beschreibung | Empfehlung |
|---|---|---|
| Zone 1 SOC-Schwelle (%) | SOC über diesem Wert → Zone 1 (aggressiv) | 40–60 |
| Zone 3 SOC-Schwelle (%) | SOC unter diesem Wert → Zone 3 (Stopp) | 15–25 |
| Max. Entladestrom (A) | Entladestrom in Zone 1 (Zone 2 = 0 A, Surplus = 2 A) | 25–40 |
| Hard Limit Z0 — Surplus (W) | Ausgangsleistungs-Obergrenze in Zone 0 (Überschuss-Einspeisung). Typisch: gesetzliches Maximum (z. B. 800 W). | 800 |
| Hard Limit Z1 — Entladung (W) | Ausgangsleistungs-Obergrenze in Zone 1 und Zone 2. In Zone 2 gilt min(Z1, max(0, PV − Reserve)). Wird als max(Z0, Z1) in die optionale Export-Limit-Entität geschrieben. |
800 |
| Zone 1 Offset (W) | Statischer Zielwert in Zone 1. Bei aktivem Dyn. Offset überschrieben | 20–50 |
| Zone 2 Offset (W) | Statischer Zielwert in Zone 2 | 10–30 |
| PV-Ladereserve (W) | Zone-2-Output-Limit: min(Hard-Limit Z1, max(0, PV − Reserve)). Dient auch als Schwelle für Nachtabschaltung |
30–100 |
Ein positiver Offset von z. B. 30 W lässt den Regler auf 30 W Netzbezug regeln (Sicherheitspuffer gegen versehentliche Einspeisung). Ein negativer Wert lässt den Regler gezielt leicht einspeisen.
Wichtig: Zone-1-Schwelle muss größer als Zone-3-Schwelle sein, und bei aktivierter Überschuss-Einspeisung muss die Export-Schwelle über der Zone-1-Schwelle liegen. Bei aktivierter Nacht-Forcierung muss deren Mindest-SOC strikt zwischen Zone-3- und Zone-1-Schwelle liegen. Die Integration prüft alles in jedem Regelzyklus und pausiert mit Fehlermeldung, solange die Grenzen ungültig sind.
Nacht-Forcierung (optional): Erlaubt den Zone-1-Entladezyklus auch unter der normalen Zone-1-Schwelle, wenn die PV-Vorhersage für den Zieltag zeigt, dass die Nacht ohnehin wieder aufgefüllt wird — verhindert ungenutzt liegen gebliebene Kapazität nach einem wolkigen Tag. Bedingung: Vorhersage ≥ Mindest-Ertrag UND PV < PV-Ladereserve (gerade dunkel) UND SOC > eigenes Mindest-SOC. Das Mindest-SOC ist ein eigener, unabhängig einstellbarer Sicherheits-Floor (nicht die Zone-3-Schwelle, die nur den regulären Austritt steuert) — muss strikt zwischen Zone-3- und Zone-1-Schwelle liegen, damit die Forcierung nicht bei SOC-Werten greift, in denen die SOC-Schätzung unzuverlässig wird. Reiner Eintritts-Trigger — der Austritt läuft unverändert ausschließlich über die Zone-3-Schwelle, ein späteres Zurückfallen der Vorhersage beeinflusst einen bereits laufenden Zyklus nicht.
Sensor wechselt an der Mitternachtsgrenze: Vor Mitternacht wird die "PV-Vorhersage morgen" gelesen — das ist der korrekte Zieltag, dessen Ertrag die Nacht auffüllt. Nach Mitternacht (neuer Kalendertag) würde derselbe "morgen"-Sensor auf den übernächsten Tag zeigen, deshalb wird automatisch stattdessen die "PV-Vorhersage heute" verwendet — der Zieltag bleibt über die ganze Nacht hinweg derselbe, nur die Quelle wechselt. Kein Sonnenauf-/untergangs-Helper nötig, Mittag (12 Uhr) ist der Umschaltpunkt.
| Parameter | Beschreibung | Empfehlung |
|---|---|---|
| Aktivieren | Ein/Aus-Schalter | — |
| PV-Vorhersage morgen | 🔌 Sensor wird im Entitäten-Tab zugewiesen | — |
| Mindest-Ertrag (kWh) | Forcierung nur ab dieser Vorhersage | abhängig vom Speicher |
Bündelt alle optionalen Entity-Picker-Felder dieser Instanz an einer Stelle, statt sie über Zonen-, Überschuss- und Tarif-Tab verstreut zu pflegen. Enable-Flags und Zahlen-Schwellen bleiben in ihrem jeweiligen Feature-Tab — hier wird ausschließlich zugewiesen, welche Entität gelesen wird. Bei Multi-Instanz: lokal (hier) überschreibt den globalen Wert aus dem Verteilungs-Tab, sonst gilt dieser. Bleibt ein Feld sowohl hier als auch global leer, ist die jeweilige Funktion inaktiv — auch wenn ihr Enable-Flag gesetzt ist.
| Parameter | Speist |
|---|---|
| PV-Vorhersage heute (optional lokal) | Tarif-Lock-Unterdrückung (Tarif-Tab), Surplus-Forecast-Erzwingung (Überschuss-Tab), 0–12 Uhr zusätzlich Zone-1-Nacht-Forcierung (Zonen-Tab) |
| PV-Vorhersage morgen (optional lokal) | Zone-1-Nacht-Forcierung (Zonen-Tab), gelesen vor Mitternacht — danach automatisch obiges Feld |
| Leistungs-Vorhersage-Sensor (W, optional lokal) | Austritts-Sperre (Überschuss-Tab) |
| Preis-Sensor (optional lokal) | Tarif-Arbitrage (Tarif-Tab) |
| Günstig-Schwelle dynamisch (optional lokal) | Tarif-Arbitrage (Tarif-Tab) |
| Teuer-Schwelle dynamisch (optional lokal) | Tarif-Arbitrage (Tarif-Tab) |
Optionale Überschuss-Einspeisung (Zone 0). Hat absoluten Vorrang vor allen anderen optionalen Modulen — Tarif-Laden, Discharge-Lock (inkl. dessen Recovery-Sperre) und AC Laden werden blockiert solange Zone 0 aktiv ist.
Zone 0 ist ein Overlay über Zone 1: Der Eintritt aktiviert immer auch den Zone-1-Zyklus (cycle_active), beim Austritt wird die Zone aus dem SOC neu abgeleitet (SOC > Zone-1-Schwelle → Zone 1 läuft weiter, sonst Zone 2). Deshalb muss die Export-Schwelle über der Zone-1-Schwelle liegen — die Integration prüft das in jedem Zyklus.
Zum 2-A-Stabilitätspuffer: Ist der Akku voll, kann kein Strom mehr hineinfließen — der Solakon kann PV aber nur regeln solange Batteriestrom fließt, also muss er in diesem Fall herausfließen. Ohne diesen Stromfluss (0 A) schaltet das Gerät komplett ab. Die 2 A sind deshalb eine Entladefreigabe (Obergrenze, kein fester Sollwert) und bewusst niedrig gewählt, um die Batterie dabei so wenig wie möglich zu belasten.
Normaler Eintritt: SOC ≥ Export-Schwelle UND (PV > ((Σ Output aller Instanzen + Grid) × Fehler-Anteil + PV-Hysterese × Fehler-Anteil) ODER (PV = 0 UND Output = 0 im aktuellen und vorherigen Zyklus UND seit dem letzten Austritt erneut PV > 0 gemessen))
Ein- und Austritt nutzen denselben Verbrauchsbezug
(Σ Output + Grid) × Fehler-Anteil(im Einzelbetrieb =Output + Grid). Gleiche Referenz für beide ist zwingend, sonst bricht das Hysterese-Totband zusammen und Zone 0 flackert.
Der
PV = 0-Zweig deckt den Fall ab, dass das MPPT die PV bei vollem Akku auf 0 W drosselt. Die BedingungOutput = 0über zwei aufeinanderfolgende Zyklen (Entprellung) allein reicht nachts nicht: Nach einem Austritt bleibt PV weiterhin bei 0, und sobald die Ausgangsleistung zwei Zyklen in Folge wieder auf 0 zurückfällt (z. B. während der PI aus Zone 1 erst hochregelt), feuert derselbe Zweig erneut — ein Ein-/Austritts-Loop im Sekundentakt. Zusätzliche Sperre (Latch): Nach jedem Austritt beiPV = 0bleibt der Zweig deaktiviert, bis wieder echtesPV > 0gemessen wurde — das passiert tagsüber sofort (die Hardware gibt PV nach dem erzwungenen Zone-0-Eintritt wieder frei), nachts erst bei Sonnenaufgang. Der SOC- und Verbrauchs-Austritt bleiben davon unberührt. (Der Blueprint erreicht dasselbe über getaktete Trigger statt Entprellung.)
Forecast-Eintritt: PV-Vorhersage ≥ Schwelle UND PV > Hard Limit Z0 UND SOC > Zone-3-Schwelle
Sensorwerte mit k-Präfix (kW, kWh, kWp …) werden automatisch ×1000 normalisiert — Schwelle immer in der Basiseinheit (W bzw. Wh) angeben. Standard: 5000 Wh.
Der Vorhersage-Sensor ist ein gemergtes Feld ("PV-Vorhersage heute", konfiguriert im Tarif-Tab) — dieselbe Quelle speist auch die Tarif-Lock-Unterdrückung unten, da beide Features denselben Werttyp brauchen. Bei Multi-Instanz kann dieser Sensor zusätzlich global im Verteilungs-Tab hinterlegt werden; jede Instanz überschreibt optional lokal.
Keine Export-Schwelle — Surplus startet sobald PV die maximale Ausgangsleistung übersteigt, der SOC muss nur über der Zone-3-Schutzgrenze liegen. Gedacht für sonnige Tage: 800 W werden dauerhaft ausgegeben, der Rest lädt die Batterie. Die Forcierung ist an PV > Hard Limit Z0 gekoppelt und endet von selbst, sobald die PV unter das Limit fällt (kein Abregel-Risiko mehr). Die SOC-Untergrenze verhindert, dass die Forcierung gegen den Zone-3-Sicherheitsstopp ankämpft (Modus-Flattern 0A ↔ C).
Austritts-Bedingung: PV ≤ ((Σ Output aller Instanzen + Grid) × Fehler-Anteil − PV-Hysterese × Fehler-Anteil) ODER SOC < (Export-Schwelle − SOC-Hysterese)
Der PV-Term prüft, ob die eigene PV noch den Anteil dieser Instanz am Hausverbrauch übersteigt. Der wahre Hausverbrauch ist
Σ Output (alle Wechselrichter) + Grid— im Einzelbetrieb identisch zuOutput + Grid. Im Multi-Instanz-Betrieb ist die Summe nötig: regelt eine zweite Instanz den Netzwert auf ~0, würdeOutput + Gridder eigenen Instanz den Verbrauch unterschätzen und eine auf 2 A gedrosselte Surplus-Instanz käme nie aus Zone 0 heraus.× Fehler-Anteilskaliert sowohl den Verbrauchsbezug als auch die PV-Hysterese auf den Lastanteil dieser Instanz (Einzelbetrieb: 1,0) — so bleibt das Totband relativ zur Referenz konstant.
Solange die Forcierung aktiv ist (Vorhersage ≥ Schwelle und PV > Hard Limit Z0 und SOC > Zone-3-Schwelle), ist der Austritt komplett gesperrt — SOC- und Verbrauchsterm sind ausgeklammert, damit bei großem PV-Tag früh eingespeist statt abgeregelt wird, ohne auf vollen Akku zu warten. Sobald die PV unter das Hard Limit fällt, die Vorhersage unter die Schwelle sinkt oder der SOC die Zone-3-Schwelle unterschreitet, endet die Forcierung und der normale Austritt greift: bei vollem Akku über den PV-Term (Überschuss weg), bei noch nicht vollem Akku sofort über den SOC-Term. Nachts ist PV = 0 < Hard Limit → Forcierung aus → Austritt, auch bei Tages-/Morgen-Vorhersage. Zone 3 (Safety-Stopp) beendet Surplus zusätzlich jederzeit.
Austritts-Sperre (optional): PV-Austritt gesperrt solange Leistungs-Vorhersage ≥ Sperr-Faktor × Hard Limit Z0 UND SOC > Zone-3-Schwelle
Hält Zone 0 bei kurzen PV-Einbrüchen (Wolken). Liegt die aktuell prognostizierte PV-Leistung deutlich über dem Ausgabelimit (Faktor als Sicherheitsmarge gegen Vorhersagefehler, Standard 1,5), muss ein gemessener Einbruch transient sein — Zone 0 wird gehalten statt auszutreten. Nur der PV-Term ist gesperrt: Der SOC-Austritt bleibt immer aktiv, Zone 3 beendet Surplus jederzeit, und bei nicht verfügbarem Sensor ist die Sperre inaktiv. Der Sensor muss die aktuelle prognostizierte PV-Leistung in W liefern (z. B. Solcast
power_now); k-Einheiten (kW) werden automatisch ×1000 normalisiert.Hintergrund: Verlässt Zone 0 bei vollem Akku, drosselt der Wechselrichter die PV exakt auf den Eigenbedarf herunter — der Überschuss ist danach nicht mehr messbar, und der Wiedereintritt hängt an zufälligen Verbrauchsschwankungen (minutenlange Verzögerung). Die Sperre vermeidet genau diesen Zustand, indem sie den Austritt bei transienten Einbrüchen gar nicht erst zulässt.
Risiko: Meldet der Sensor dauerhaft einen zu hohen Wert, bleibt Zone 0 entsprechend lange aktiv — bis der SOC-Austritt eingreift.
Warum die SOC-Schwelle unter dem Vollladepunkt liegen muss: Der Eintritt prüft PV > Eigenbedarf + Hysterese. Das ist nur messbar, solange der Akku noch lädt — dann läuft die PV ungedrosselt und zeigt Eigenbedarf + Ladeleistung. Am Vollladepunkt (App-Ladeobergrenze) drosselt der Wechselrichter die PV exakt auf den Eigenbedarf herunter; der Überschuss ist dann unsichtbar und der Eintritt hängt von zufälligen Verbrauchsschwankungen ab — minutenlange Verzögerung möglich. Eine Schwelle ~5 % unter der App-Ladeobergrenze (z. B. 95 % bei Max 100 %) legt den Eintritt sicher in die Ladephase, wo der Überschuss zuverlässig messbar ist. Aus demselben Grund kann der Wiedereintritt nach einer Wolke verzögert sein, wenn der SOC bereits am Maximum gepinnt ist — während der Wolke entlädt sich die Batterie nur über den 2-A-Stabilitätspuffer (siehe oben), das bewegt den SOC praktisch nicht. Dagegen hilft die Austritts-Sperre (siehe oben).
| Parameter | Beschreibung | Empfehlung |
|---|---|---|
| Aktivieren | Ein/Aus-Schalter | — |
| SOC-Schwelle (%) | Ab diesem SOC wird Überschuss eingespeist | ~5 % unter App-Ladeobergrenze (z. B. 95) |
| SOC-Hysterese (%) | Austritt erst bei SOC < (Schwelle − Hysterese) | 3–5 |
| PV-Hysterese (W) | Mindestüberschuss über Eigenbedarf für Eintritt und Austritt | 30–80 |
| Austritts-Sperre | Ein/Aus — PV-Austritt gesperrt solange Vorhersage ≥ Faktor × Hard Limit Z0 | — |
| Leistungs-Vorhersage-Sensor | 🔌 Sensor wird im Entitäten-Tab zugewiesen | — |
| Sperr-Faktor | Sicherheitsmarge der Austritts-Sperre gegen Vorhersagefehler | 1,5 |
Optionales Laden bei erkanntem externem Überschuss. Aktiv in Zone 1 und Zone 2. Startet nicht wenn Überschuss-Einspeisung (Zone 0) oder Tarif-Laden aktiv ist.
Eintritts-Bedingung: SOC < Ladeziel UND kein Überschuss aktiv UND kein AC/Tarif-Laden aktiv UND Modus ≠ '3' UND (Grid + ΣOutput_entladend) < −Hysterese
Der Modus-Guard
≠ '3'verhindert einen Re-Eintritt wenn AC Laden bereits aktiv ist.ΣOutput_entladendist im Einzelbetrieb der eigene Output, im Multi-Instanz-Betrieb die Summe aller Instanzen im Entlademodus — sonst würde eine Instanz die Entladung einer Schwester-Instanz als externen Netzüberschuss werten und aus dem Netz genau das nachladen, was die Schwester gerade einspeist.
Abbruch-Bedingung: Modus = '3' UND ac_charge_active UND kein Tarif-Laden UND (SOC ≥ Ladeziel ODER (Grid ≥ ac_offset + Hysterese UND eigener Output = 0 W))
Der
Output = 0 W-Guard verhindert Fehlauslösung während der PI noch aktiv regelt.
Der Lademodus verwendet einen eigenen invertierten PI-Regler: raw_error = (ac_offset − grid) × Fehler-Anteil. Ein positiver Fehler (Grid zu negativ → zu viel Einspeisung) erhöht die Ladeleistung.
Der
Fehler-Anteilhier ist Pool 2 — unabhängig von der Nulleinspeisungs-Verteilung. Laden mehrere Instanzen gleichzeitig, teilen sie sich denselben Netzüberschuss über diesen eigenen Pool, statt sich gegenseitig zu überschätzen.
| Parameter | Beschreibung | Empfehlung |
|---|---|---|
| Aktivieren | Ein/Aus-Schalter | — |
| Ladeziel SOC (%) | Laden stoppt bei diesem SOC | 80–95 |
| Max. Ladeleistung (W) | Obergrenze der AC-Ladeleistung | 400–800 |
| Eintritts-Hysterese (W) | (Grid + ΣOutput_entladend) muss unter −Hysterese liegen | 30–80 |
| Regel-Offset (W) | Zielwert während AC Laden (typisch negativ) | −80 bis −30 |
| AC P-Faktor | Klein halten wegen langer Hardware-Flanke (~25 s) | 0,3–0,5 |
| AC I-Faktor | Ohne Wirkung — die Regelung ist wegen der Hardware-Flanke (~25 s) so träge, dass der I-Anteil bedeutungslos wird | 0,0 |
Optionale Tarif-Arbitrage für dynamische Stromtarife (Tibber, aWATTar …). Wird blockiert solange Überschuss-Einspeisung (Zone 0) aktiv ist.
Drei Preisstufen: Günstig (Preis < Günstig-Schwelle): Tarif-Laden mit fester Leistung bis SOC-Ziel — wenn das Ladeziel bereits erreicht ist, greift stattdessen der Discharge-Lock. Mittel (Günstig ≤ Preis < Teuer): Discharge-Lock — Zone 1 und Zone 2 gesperrt (Output 0 W, Modus Disabled). Der Discharge-Lock gilt für beide Stufen (günstig + mittel), also alles unterhalb der Teuer-Schwelle. Wenn der Preis die Teuer-Schwelle überschreitet, wird der Betrieb automatisch wiederhergestellt. Teuer (Preis ≥ Teuer-Schwelle): normale SOC-Logik, keine Einschränkung.
| Parameter | Beschreibung | Empfehlung |
|---|---|---|
| Aktivieren | Ein/Aus-Schalter | — |
| Preis-Sensor | 🔌 Sensor wird im Entitäten-Tab zugewiesen | — |
| Günstig-Schwelle (ct/kWh) | Unter diesem Preis → Laden | 5–15 |
| Teuer-Schwelle (ct/kWh) | Über diesem Preis → normale SOC-Logik | 20–35 |
| Ladeziel SOC (%) | Tarif-Laden stoppt bei diesem SOC | 85–95 |
| Ladeleistung (W) | Feste Leistung während Tarif-Laden | 400–800 |
PV-Vorhersage-Unterdrückung (optional): Meldet der Vorhersage-Sensor einen Wert ≥ Schwelle, werden Tarif-Laden und Discharge-Lock unterdrückt — automatische Flexibilität an sonnigen Tagen, unabhängig vom aktuellen Preis.
| Parameter | Beschreibung | Empfehlung |
|---|---|---|
| Aktivieren | Ein/Aus-Schalter | — |
| PV-Vorhersage heute | 🔌 Sensor wird im Entitäten-Tab zugewiesen — gemergtes Feld, speist auch die Surplus-Forecast-Erzwingung (siehe Überschuss oben) | — |
| Schwellwert (kWh) | Ab diesem Wert wird Tarif-Laden/Discharge-Lock unterdrückt | 5–15 |
Dynamische Preisschwellen (optional lokal): Günstig-Schwelle-Entität und Teuer-Schwelle-Entität, siehe Entitäten. Können bei Multi-Instanz zusätzlich global im Verteilungs-Tab hinterlegt werden (meist ein gemeinsamer Hausstrom-Tarif) — jede Instanz überschreibt optional lokal.
Optionaler dynamischer Offset. Ersetzt den separaten Dynamic-Offset-Blueprint vollständig.
Offset-Formel:
volatility_buffer = max(0, (StdDev − Rausch-Schwelle) × Faktor)
offset_abs = clamp(min_offset + volatility_buffer, min_offset, max_offset)
offset_out = +offset_abs (Negativer Offset: Aus)
offset_out = −offset_abs (Negativer Offset: Ein)
| Netz-Zustand | StdDev | Ergebnis (min=30, noise=15, factor=1.5) |
|---|---|---|
| Sehr ruhig | 5 W | 30 W (Minimum) |
| Normal | 30 W | 53 W |
| Unruhig | 80 W | 128 W |
| Sehr unruhig | 160 W | 228 W |
| Extrem | 250 W+ | 250 W (Maximum) |
Jede Zone (Zone 1, Zone 2, Zone AC) hat einen eigenen Parameterblock:
| Parameter | Beschreibung | Empfehlung |
|---|---|---|
| Aktivieren | Dyn. Offset für diese Zone verwenden. Überschreibt den statischen Offset. | — |
| Min. Offset (W) | Grundpuffer bei ruhigem Netz | 20–40 |
| Max. Offset (W) | Obergrenze bei unruhigem Netz | 150–300 |
| Rausch-Schwelle (W) | StdDev darunter = Messrauschen, kein Anstieg | 10–20 |
| Volatilitäts-Faktor | Verstärkung oberhalb der Rausch-Schwelle | 1,0–2,0 |
| Negativer Offset | Offset negieren (Regelziel < 0 W) | Aus |
Optionale Nachtabschaltung. Deaktiviert nur Zone 2 wenn PV < PV-Ladereserve (aus den Zonen-Einstellungen — kein separater Parameter). Zone 1 (aggressive Entladung) und AC Laden laufen auch nachts weiter. Zone 2 wird nicht reaktiviert solange ein Tarif-Lock (mittlerer/günstiger Preis) aktiv ist.
Die Regellogik arbeitet mit einer geordneten Liste von Falls. Die Reihenfolge ist entscheidend — der erste zutreffende Fall wird ausgeführt.
| Fall | Bedingung | Aktion |
|---|---|---|
| 0A — Surplus Start | surplus_enabled UND new_surplus = True UND surplus_active = False UND kein AC/Tarif-Laden |
surplus_active → True, cycle_active → True (Zone 0 setzt auf Zone 1 auf). Integral eingefroren. Falls Modus ≠ '1': Timer-Toggle + Modus → '1'. (Entladestrom 2 A setzt der zentrale Abgleich, siehe Hinweis 12.) |
| 0B — Surplus Ende | surplus_active = True UND (Überschuss-Option AUS ODER Austritts-Bedingung erfüllt) |
surplus_active → False, cycle_active → (SOC > Zone-1-Schwelle) (Zone aus SOC neu abgeleitet). Integral = 0. Das Ausschalten der Option erzwingt den Austritt, sonst bliebe surplus_active hängen und die Batterie auf 2 A gedrosselt. |
| A — Zone 1 Start | SOC > Zone-1-Schwelle UND cycle_active = False UND kein AC/Tarif-Laden UND (Tarif deaktiviert ODER Preis gültig) UND kein aktiver Tarif-Block (Preis < Teuer) |
cycle_active → True. Integral = 0. Timer-Toggle. Modus → '1'. |
| B — Zone 3 Stop | SOC < Zone-3-Schwelle UND cycle_active = True UND kein AC/Tarif-Laden |
cycle_active → False. Integral = 0. Output → 0 W. Timer-Toggle. Modus → '0'. |
| C — Zone 3 Absicherung | SOC < Zone-3-Schwelle UND cycle_active = False UND Modus ≠ '0' UND kein AC/Tarif-Laden |
Output → 0 W. Timer-Toggle. Modus → '0'. Kein Integral-Reset. |
| D — Recovery | (cycle_active = True ODER ac_charge_active = True ODER tariff_charge_active = True) UND Modus ∉ {'1','3'} UND (SOC > Zone-3-Schwelle ODER ac_charge_active/tariff_charge_active aktiv) UND kein aktiver Tarif-Lock (Tarif-Lock greift nicht bei ac_charge_active, tariff_charge_active oder surplus_active) |
Timer-Toggle. Modus → '3' (wenn ac_charge_active oder tariff_charge_active) sonst '1'. Kein Integral-Reset. |
| GT — Tarif-Laden Start | Tarif aktiv UND Preis gültig UND Preis < Günstig-Schwelle UND SOC < Tarif-SOC-Ziel UND kein Tarif-Laden aktiv UND kein Überschuss aktiv UND Modus ≠ '3' |
tariff_charge_active → True. Timer-Toggle. Output → Tarif-Ladeleistung. Modus → '3'. |
| HT — Tarif-Laden Ende | tariff_charge_active = True UND (Preis gültig UND Preis ≥ Günstig-Schwelle ODER SOC ≥ Tarif-SOC-Ziel) |
tariff_charge_active → False. Integral = 0. Zone 1 → Timer-Toggle + '1' / Zone 2 → Timer-Toggle + '0' + 0 W. |
| TM — Discharge-Lock | Tarif aktiv UND Preis gültig UND Preis < Teuer-Schwelle UND kein AC/Tarif-Laden UND kein Überschuss UND Modus = '1' |
Integral = 0. Output → 0 W. Timer-Toggle. Modus → '0'. Sperrt Zone 1 und Zone 2 (greift für günstig + mittel, d.h. alles unter Teuer-Schwelle). |
| G — AC Laden Start | AC aktiv UND kein AC/Tarif-Laden aktiv UND kein Überschuss aktiv UND SOC < Ladeziel UND Modus ≠ '3' UND (Grid + ΣOutput_entladend) < −Hysterese |
ac_charge_active → True. Timer-Toggle. Output → 0 W. Modus → '3'. |
| H — AC Laden Ende | Modus = '3' UND ac_charge_active = True UND kein Tarif-Laden UND (SOC ≥ Ladeziel ODER (Grid ≥ ac_offset + Hysterese UND eigener Output = 0)) |
ac_charge_active → False. Integral = 0. Zone 1 → Timer-Toggle + '1' / Zone 2 → Timer-Toggle + '0' + 0 W. |
| I — Safety | Modus = '3' UND kein aktives AC Laden UND kein Tarif-Laden |
Integral = 0. Zone 1 → Timer-Toggle + '1' / Zone 2 → Timer-Toggle + '0' + 0 W. |
| E — Zone 2 Start | Zone-3 < SOC ≤ Zone-1 UND cycle_active = False UND Modus = '0' UND kein AC/Tarif-Laden UND kein Nacht UND kein Tarif-Lock |
Integral = 0. Timer-Toggle. Modus → '1'. |
| F — Nachtabschaltung | Nacht aktiv UND cycle_active = False UND Modus ≠ '0' UND kein AC/Tarif-Laden |
Integral = 0. Output → 0 W. Timer-Toggle. Modus → '0'. |
Reihenfolge-Begründungen:
- Fall D liegt vor Falls G/H, damit Recovery nur Modus ∉
{'1','3'}prüft — der AC-Lade-Modus'3'wird durch Recovery nie überschrieben. - Fall I fängt jeden
'3'-Zustand ohne legitime Lade-Session auf — egal ob durch externe Modussetzung oder Fehlzustand entstanden. - Fall D ist gegen Tarif-Lock geblockt (außer bei aktiver AC-/Tarif-Lade-Session oder aktivem Überschuss) — verhindert, dass Recovery den Discharge-Lock durch Modus-Wiederherstellung umgeht; Zone 0 ist ausgenommen, weil Einspeisung bei vollem Speicher unabhängig vom Preis richtig ist (konsistent zu Fall TM).
- Fall D verzichtet auf die Zone-3-Schwelle, wenn eine AC-/Tarif-Lade-Session aktiv ist — Laden muss bei jedem SOC möglich sein, sonst bleibt der Modus bei niedrigem SOC dauerhaft auf
'0'hängen, obwohlac_charge_active/tariff_charge_activenochTruesind (z. B. nach Deaktivieren/Reaktivieren der Regelung während laufendem Laden). - Fall E ist gegen Tarif-Lock geblockt — verhindert, dass Zone 2 bei aktivem Lock neu startet.
- Falls GT und G sind gegen aktiven Überschuss geblockt — Zone-0-Einspeisung hat absoluten Vorrang vor Tarif-Laden und AC Laden.
- Fall G verwendet
ΣOutput_entladend(Summe aller Instanzen im Entlademodus, Einzelbetrieb = eigener Output) statt des Eigenanteils — sonst würde eine Instanz die Entladung einer Schwester-Instanz als externen Netzüberschuss werten und daraufhin genau diese Menge aus dem Netz nachladen (Batterie-zu-Batterie-Umpumpen im Multi-Instanz-Betrieb).
Der Regler wird in drei Schritten eingestellt. Ziel ist ein System, das schnell und präzise auf Änderungen reagiert, aber nicht dauerhaft hin- und herschwingt.
Die Wartezeit deckt Wechselrichter-Reaktion und Messlatenz ab. Sinnvolle Wartezeit: 1–3 s.
Bei P = 0,5 beginnen, schrittweise erhöhen bis das System leicht anfängt zu pendeln — dann einen Schritt zurück. Typischer Arbeitsbereich: 0.8–1.5.
Typischer Arbeitsbereich: 0.03–0.08. Für AC Laden separat tunen — P besonders klein halten (~0.3–0.5), I-Faktor auf 0 belassen: die Regelung ist wegen der Hardware-Flanke des Solakon ONE (~25 s) so träge, dass der I-Anteil keine Wirkung mehr hat. Tarif-Laden verwendet keinen PI-Regler.
- Schreibteil erst nach Konfigurationsprüfung aktivieren. Die Regelung startet mit
Regelung aktiv = Aus. Nach Einrichtung im Panel den Schreibteil erst dann einschalten wenn alle Parameter geprüft sind. - Zone-1-Schwelle > Zone-3-Schwelle. Die Integration prüft dies und gibt im Status-Tab einen Fehler aus falls die Limits ungültig sind.
- Netzleistungssensor-Polarität. Positiv = Bezug, negativ = Einspeisung — abweichende Polarität führt zu umgekehrtem Regelverhalten.
- AC Laden Eintritts-Guard. Eintritt in AC Laden ist nur möglich wenn Modus ≠
'3'. Das verhindert einen Re-Eintritt wenn AC Laden bereits aktiv ist. - AC Laden P/I-Tuning. Separates Tuning erforderlich — P klein halten (~0,3–0,5) wegen der langen Hardware-Flanke des Solakon ONE im AC-Lade-Modus (~25 s). I-Faktor bleibt auf 0,0 — bei dieser Trägheit hat der I-Anteil keine Wirkung mehr, reine P-Regelung reicht.
- at_max_limit-Guard. Greift am zonenabhängigen
dynamic_max(Zone 0: AC-Limit, Zone 1: Hard Limit Z1, Zone 2:min(Hard-Limit-Z1, PV−Reserve)). Liegtcurrent_powerüberdynamic_max(z.B. weil PV abgefallen ist), läuft der PI trotz positivem Netzfehler und reduziert den Befehl auf die neue Decke — kein Deadlock wenn das dynamic ceiling sinkt. - at_max/at_min-Guards im AC-Lade-Modus. Beide Guards sind während AC Laden deaktiviert — Fall I übernimmt die Safety-Funktion für unlegitimierte
'3'-Zustände. - Tarif-Discharge-Lock. Der Lock gilt für mittlere UND günstige Preiszonen (alles unterhalb der Teuer-Schwelle) und sperrt sowohl Zone 1 als auch Zone 2 (Output 0 W, Modus Disabled). Solange Überschuss-Einspeisung aktiv ist, wird kein Lock ausgelöst. Die Sperre hebt sich automatisch wenn der Preis die Teuer-Schwelle überschreitet — Recovery (Fall D) stellt dann den vorherigen Modus wieder her.
- Dynamischer Offset. Jede Zone wird einzeln aktiviert. Die Netz-Standardabweichung wird intern berechnet — kein externer Statistik-Sensor erforderlich. Nach dem ersten Start einige Minuten warten bis genug Samples gesammelt sind.
- Self-Adjusting Wait. Polls die tatsächliche Ausgangsleistung nach einem Setpoint-Befehl statt einer festen Wartezeit zu schlafen. Die konfigurierte Wartezeit wird zum maximalen Timeout als Sicherheitsnetz.
- Export-Limit-Sync. Ist die optionale Netz-Ausgangsleistungsgrenze-Entität konfiguriert, schreibt jeder Regelzyklus
max(Hard-Limit-Z0, Hard-Limit-Z1)in diese Entität — sofern er abweicht. Das verhindert, dass externe Eingriffe (App, andere Automation) das Hardware-Limit dauerhaft ändern. - Entladestrom-Abgleich. Der maximale Entladestrom wird in jedem Zyklus zentral aus dem Regelzustand abgeleitet (Surplus → 2 A, AC-/Tarif-Laden → 0 A, Zone 1 → Max-Entladestrom, sonst 0 A) und mit dem Ist-Wert abgeglichen — vor dem PI-Gate, also auch im Disabled-Leerlauf. Das garantiert, dass ein Klemmwert (insb. die 2 A aus dem Surplus-Trick) nie über einen Zustandswechsel hinaus stehen bleibt und die Batterie drosselt; die einzelnen Falls setzen den Strom nicht mehr selbst.
Regelung aktiv = Aus. Bevor der Schreibteil deaktiviert wird, erzwingt die Integration Ausgang → 0 W, Entladestrom → Max-Entladestrom, Timer-Toggle + Modus →'0'— vollständig innerhalb desselben Locks wie der Regelzyklus, damit kein parallel laufender Zyklus den Disabled-Befehl überschreiben kann, bevor das Flag gesetzt ist. Der explizite Entladestrom-Reset verhindert, dass ein während AC-/Tarif-Laden auf 0 A geklemmter Wert nach dem Deaktivieren dauerhaft stehen bleibt — danach blockt der Guard jeden weiteren Schreibbefehl, auch für den regulären Zyklus-Abgleich aus Punkt 12. Die Sequenz läuft zentral im Settings-Update und greift daher auf beiden Ausschaltwegen identisch: Switch-EntitätRegelung aktivund Panel-Button. Der Regelzyklus selbst prüftRegelung aktivals Erstes und bricht bei deaktivierter Regelung sofort ab, ohne weitere Berechnungen oder Schreibversuche. Der Sensor „Betriebsmodus" wird beim Deaktivieren explizit auf „Disabled (Regelung inaktiv)" gesetzt — sonst würde er auf dem zuletzt aktiven Modus (z. B. „AC Charge") stehen bleiben, da der Regelzyklus ihn bei inaktiver Regelung nicht mehr aktualisiert. Die internen Zustands-Flagscycle_activeundtariff_charge_activewerden dabei bewusst nicht zurückgesetzt — sie bilden den operativen Kontext für den nächsten Regelzyklus ab und sollen einen Deaktivieren/Aktivieren-Wechsel unverändert überstehen.
Die Integration erzeugt automatisch folgende Entitäten unter dem Gerät Solakon ONE:
| Entität | Typ | Beschreibung |
|---|---|---|
sensor.solakon_one_aktuelle_zone |
Sensor | Aktive Zone (0–3) mit Zusatzattributen |
sensor.solakon_one_betriebsmodus |
Sensor | Lesbarer Modustext |
sensor.solakon_one_letzte_aktion |
Sensor | Letzter Logeintrag der Steuerlogik |
sensor.solakon_one_netz_standardabweichung |
Sensor | Netz-Stabw. in W über das konfigurierte Fenster |
sensor.solakon_one_aktiver_fall |
Sensor | Aktiver Fall (0A, A, B, … TM) mit Klartext-Label |
sensor.solakon_one_pi_integral |
Sensor | Aktueller I-Anteil des PI-Reglers |
switch.solakon_one_regelung_aktiv |
Switch | Hauptschalter — aktiviert/deaktiviert den Schreibteil |
binary_sensor.solakon_one_entladezyklus_aktiv |
Binary Sensor | Internes Flag Entladezyklus |
binary_sensor.solakon_one_uberschuss_modus |
Binary Sensor | Flag Überschuss-Modus aktiv |
binary_sensor.solakon_one_ac_laden_aktiv |
Binary Sensor | Flag AC-Laden aktiv |
binary_sensor.solakon_one_tarif_laden_aktiv |
Binary Sensor | Flag Tarif-Laden aktiv |
binary_sensor.solakon_one_nachtabschaltung |
Binary Sensor | Flag Nachtabschaltung aktiv |
binary_sensor.solakon_one_pv_vorhersage_tarif_gesperrt |
Binary Sensor | PV-Vorhersage sperrt Tarif-Laden |
binary_sensor.solakon_one_pv_vorhersage_surplus_erzwungen |
Binary Sensor | PV-Vorhersage erzwingt Surplus-Eintritt |
binary_sensor.solakon_one_pv_vorhersage_surplus_austritt_gesperrt |
Binary Sensor | Austritts-Sperre aktiv (Vorhersage ≥ Faktor × Hard Limit Z0) |
binary_sensor.solakon_one_pv_vorhersage_zone_1_nacht_forcierung_aktiv |
Binary Sensor | Zone-1-Nacht-Forcierung aktiv |
Die Diagnose-Binärsensoren sind read-only — sie spiegeln interne Coordinator-Zustände wider.
Panel öffnet sich, zeigt aber keine Werte an
Integration neu laden (Einstellungen → Geräte & Dienste → Solakon → drei Punkte → Neu laden). Falls das Problem bleibt, HA-Protokoll auf Fehler der Domain solakon_nulleinspeisung prüfen.
Werte werden nicht gespeichert Im Browser-Konsolenfenster (F12) nach WebSocket-Fehlern schauen. Häufige Ursache: Integration wurde noch nicht vollständig geladen.
Status-Tab zeigt Fehlermeldung „SOC-Limits ungültig" Zone-1-Schwelle muss größer als Zone-3-Schwelle sein. Im Zonen-Tab prüfen und korrigieren.
Regler schwingt (Leistung pendelt stark) P-Faktor reduzieren oder Wartezeit erhöhen. Der Standardabweichungs-Sensor im Status-Tab zeigt die Netzstabilität — bei hohem Wert (> 50 W) größeres Totband setzen.
Zone 3 aktiv, obwohl Batterie nicht leer Zone-3-Schwelle im Zonen-Tab prüfen. Wert muss kleiner als Zone-1-Schwelle sein.
AC Laden startet nicht trotz Überschuss Prüfen ob Überschuss-Einspeisung (Zone 0) aktiv ist — AC Laden wird durch Zone 0 blockiert. Sonst: AC Laden im Tab aktiviert? (Grid + ΣOutput_entladend) muss unter −Hysterese liegen — im Multi-Instanz-Betrieb zählt die Summe aller Instanzen im Entlademodus, nicht nur der eigene Output. SOC muss unter Ladeziel sein. Status-Flag „AC Laden aktiv" im Status-Tab beobachten.
AC Laden bricht sofort wieder ab Eintritts-Hysterese zu klein — Grid-Wert schwankt bereits über der Abbruch-Schwelle. Hysterese erhöhen oder P/I kleiner setzen.
Tarif-Laden reagiert nicht auf Preisänderungen Preis-Sensor im Tarif-Tab prüfen. Günstig-Schwelle muss über dem aktuellen Preis liegen. Prüfen ob Überschuss-Einspeisung aktiv ist — blockiert Tarif-Laden.
Discharge-Lock greift nicht
Preis muss unterhalb der Teuer-Schwelle liegen (gilt für günstig UND mittel). Modus muss '1' (Discharge aktiv) sein — bei Modus '0' (Disabled) greift TM nicht, weil keine aktive Entladung zu stoppen ist. Überschuss-Einspeisung darf nicht aktiv sein.
Dynamischer Offset bleibt auf Minimum Stabw.-Sensor im Status-Tab prüfen. Nach dem ersten Start einige Minuten warten bis genug Samples gesammelt sind. Volatilitäts-Faktor erhöhen oder Rausch-Schwelle senken.
Recovery (Fall D) greift zu oft Der Modus-Reset-Timer läuft ab bevor der Regler ihn zurücksetzen kann. Solakon-Integration auf Polling-Intervall prüfen.
Integration taucht nach Installation nicht auf Home Assistant vollständig neu starten (nicht nur neu laden). HACS-Download-Status überprüfen.
Eine Instanz zeigt „setup_error" nach HA-Neustart oder Stromausfall (nur bei mehreren Instanzen) Seltene Race Condition beim parallelen Setup mehrerer Config-Entries, behoben (siehe CHANGELOG). Tückisch: die betroffene Instanz friert dabei auf ihrem letzten Wert ein, statt einen sichtbaren Fehlerzustand zu zeigen — im Dashboard wirkt sie gesund, ist aber ungeregelt. Workaround bei betroffener Version: den fehlgeschlagenen Config-Entry manuell neu laden (Einstellungen → Geräte & Dienste → Solakon-Instanz → drei Punkte → Neu laden).
SOC der Instanzen läuft bei mehreren Solakons auseinander Bei unterschiedlich großen Batterien im Verteilungs-Tab prüfen, dass der Verteilungs-Modus wirklich auf „Kapazitätsgewichtet" steht (nicht „SOC-gewichtet" — das gewichtet bewusst rein nach Prozentpunkten, ohne Kapazität, und lässt unterschiedlich große Batterien dauerhaft auseinanderlaufen). Danach die Kapazitätssensoren prüfen — ein roter Validierungspunkt neben dem Feld bedeutet, dass die eingetragene Entity nicht existiert (häufig ein Tippfehler in der Entity-ID). Ohne gültigen Kapazitätswert bei allen Instanzen degradiert „Kapazitätsgewichtet" automatisch zu reiner SOC-%-Gewichtung.
MIT — siehe LICENSE