Skip to content

Repository files navigation

⚡ Solakon ONE Nulleinspeisung

HACS Custom HA Version License: MIT

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.


☀️ Solakon ONE Dashboard Vorschau

Hier kannst du das Dashboard interaktiv testen:

Live Demo

Note

Dies ist eine statische Web-Vorschau zur Demonstration des UI-Designs. Die Werte sind Beispieldaten.


Funktionsübersicht

Kernfunktion — Nulleinspeisung mit PI-Regler

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).

SOC-Zonenverwaltung

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.

Optionale Module

☀️ Ü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.

Multi-Instancing

Bei mehr als einer installierten Instanz zeigt das Sidebar-Panel oben eine Instanzleiste sowie eine Übersichtsseite mit Echtzeit-Status aller Instanzen.

Automatische Fehleraufteilung und Leistungsverteilung

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.

Leistungsverteilung konfigurieren

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)

Voraussetzungen

  • 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_entladestrom standardmäß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.


Installation

Über HACS (empfohlen)

  1. HACS öffnen → Integrationen → drei Punkte oben rechts → Benutzerdefiniertes Repository hinzufügen
  2. URL eintragen: https://github.com/D4nte85/Solakon-One-Nulleinspeisung-integration
  3. Kategorie: IntegrationHinzufügen
  4. Die Integration Solakon ONE Nulleinspeisung erscheint in der Liste → Herunterladen
  5. Home Assistant neu starten

Manuell

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.


Einrichtung

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.


Konfiguration im Sidebar-Panel

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.


📊 Status

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.


🎛️ PI-Regler

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

🔋 Zonen

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

🔌 Entitäten

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)

☀️ Überschuss

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 Bedingung Output = 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 bei PV = 0 bleibt der Zweig deaktiviert, bis wieder echtes PV > 0 gemessen 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 zu Output + Grid. Im Multi-Instanz-Betrieb ist die Summe nötig: regelt eine zweite Instanz den Netzwert auf ~0, würde Output + Grid der eigenen Instanz den Verbrauch unterschätzen und eine auf 2 A gedrosselte Surplus-Instanz käme nie aus Zone 0 heraus. × Fehler-Anteil skaliert 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

⚡ AC Laden

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_entladend ist 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-Anteil hier 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

💹 Tarif

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.


📈 Dyn. Offset

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

🌙 Nacht

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.


SOC-Zonen und Steuerlogik (Falls)

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, obwohl ac_charge_active/tariff_charge_active noch True sind (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).

PI-Regler Einstellung

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.

Schritt 1: Wartezeit finden (P = 1, I = 0)

Die Wartezeit deckt Wechselrichter-Reaktion und Messlatenz ab. Sinnvolle Wartezeit: 1–3 s.

Schritt 2: P-Faktor finden (I = 0)

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.

Schritt 3: I-Faktor hinzufügen

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.


Wichtige Hinweise

  1. 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.
  2. 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.
  3. Netzleistungssensor-Polarität. Positiv = Bezug, negativ = Einspeisung — abweichende Polarität führt zu umgekehrtem Regelverhalten.
  4. 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.
  5. 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.
  6. 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)). Liegt current_power über dynamic_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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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ät Regelung aktiv und Panel-Button. Der Regelzyklus selbst prüft Regelung aktiv als 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-Flags cycle_active und tariff_charge_active werden 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.

Erzeugte Entitäten

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.


Fehlerbehebung

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.


Lizenz

MIT — siehe LICENSE


Autor

@D4nte85

About

Home Assistant custom integration for Solakon ONE zero export (Nulleinspeisung) — PI controller, SOC zones, surplus feed-in, tariff arbitrage, sidebar panel

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages