Skip to content

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

26 stars

Watchers

4 watching

Forks

Repository files navigation

⚡ Solakon ONE Nulleinspeisung

HACS Default HA Version License: MIT Ko-fi

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; alternativ rechnet eine Stellwertrechnung auf Ist-Basis den Sollwert in einem Schritt. Alle Parameter werden über ein Sidebar-Panel direkt in der HA-Oberfläche konfiguriert und persistent gespeichert.

Important

Voraussetzung: die offizielle Solakon-ONE-Integration. Sie liefert per Modbus TCP alle Geräteentitäten — SOC, PV-Leistung, Ist-Leistung, Betriebsmodus, Entladestrom —, die diese Integration regelt. Ohne sie funktioniert hier nichts.

Repository: https://github.com/solakon-de/solakon-one-homeassistant

Sie ist nicht im HACS-Standardstore enthalten und muss als benutzerdefiniertes Repository hinzugefügt werden: HACS → Integrationen → ⋮ → Benutzerdefiniertes Repository hinzufügen → obige URL, Kategorie Integration.

Danach zwingend: Die Entität number.solakon_one_maximaler_entladestrom ist dort standardmäßig deaktiviert und muss von Hand aktiviert werden (Gerät → Entität → Zahnrad → Aktivieren). Ohne sie kann der Entladestrom nicht gesteuert werden; im Einrichtungsformular erscheint sie sonst als „unbekannte Entität“.

Inhalt


☀️ 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 (adaptive Wartezeit).

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 (bei Dunkelheit optional Nacht-Offset) Läuft bis Zone-3-Schwelle — kein Yo-Yo-Effekt. Auch nachts aktiv. Lädt eine andere Instanz derselben Netzgruppe, gilt das Ausgangsleistungs-Limit von Zone 2 (Eine Energierichtung je Netzgruppe), ebenso beim Aufladen des Zielladens mit Hausvorrang.
Zone 2 Zone-3 < SOC ≤ Zone-1 '1' 0 A 0 W + Offset 2 Ausgangsleistungs-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' Max. Entladestrom (AC Laden: 0 A) — Ausgangsleistung 0 W. Vollständiger Batterieschutz. AC Laden bleibt möglich.

Optionale Module

☀️ Surplus (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 < min(ac_offset, 0) − Hysterese, Σ über alle Instanzen im Entlademodus, je Instanz das Größere aus Ist-Leistung und Ausgangsleistung). Kein PI: Stellwertrechnung auf Ist-Basis mit eigenem Offset, Mindestladeleistung 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.

📈 Dynamic 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 1 Nacht, 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.

🎯 Zielladen — Lädt die Batterie über zuschaltbare Ladequellen (PV, AC Laden, Tarif-Laden, Netz-Laden) bis zum Ziel-SOC und schaltet danach die Regelung ab: Entladepause, bis Zielladen ausgeschaltet oder die Regelung wieder eingeschaltet wird. Für die Winterpause oder eine Unwetter-Vorsorge per Automation, siehe Zielladen.

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) 🎯 Zielladen (Aufladen) Surplus (0A); AC Laden (G) und Tarif-Laden (GT) ohne Zuschaltung; bei Batterievorrang Zone-1/2-Start (A, E)
2 ☀️ Surplus Tarif-Laden (GT), Tarifsperre (TM), AC Laden (G)
3 💹 Tarif-Laden (günstig) AC Laden (via Modus '3'), Tarifsperre
4 💹 Tarifsperre (< Teuer) Zone-1-Start (Fall A), Zone-1/2-Recovery (Fall D), Zone-2-Start (Fall E)
5 ⚡ AC Laden Tarif-Laden (via Modus '3'), Tarifsperre
6 🌙 Nachtabschaltung Zone-2-Start (Fall E)
7 (niedrigste) Zone 1 / Zone 2 —

AC Laden und Tarif-Laden blockieren sich gegenseitig über den Modus-Guard (Modus ≠ '3'). Surplus hat Vorrang vor allen übrigen optionalen Modulen — keines kann während Zone 0 starten. Nur das Aufladen des Zielladens sperrt Surplus; Netz-Laden hat Vorrang vor dem Tarif-Laden.

Multi-Instancing

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

Netzgruppen (mehrere Smartmeter)

Instanzen werden automatisch nach ihrem konfigurierten Netz-Leistungssensor gruppiert — Instanzen mit demselben Sensor bilden eine Netzgruppe. Fehleraufteilung und Leistungsverteilung (siehe unten) laufen ausschließlich innerhalb einer Gruppe; Instanzen an unterschiedlichen Smartmetern (z. B. zwei getrennte Stromkreise mit je eigenem Zähler) beeinflussen sich nicht gegenseitig.

Bei nur einer Gruppe (Normalfall) ist diese Zuordnung unsichtbar — es gibt genau einen gemeinsamen Verteilungs-Tab. Bei mehreren Gruppen ersetzt die oberste Tab-Ebene die einzelnen Instanz-Tabs durch Bereichs-Tabs (Bereich: <Name>); jede Gruppe öffnet darunter ihre eigene zweite Tab-Ebene mit „Verteilung" und den zugehörigen Instanzen. Die Übersichtsseite zeigt weiterhin alle Instanzen aller Gruppen, untereinander nach Gruppe sortiert mit einer eigenen Gesamt-Karte je Gruppe mit mehr als einer Instanz: SOC-Mittelwert (kapazitätsgewichtet, wenn bei allen Instanzen der Gruppe ein gültiger Kapazitätssensor gesetzt ist, sonst ungewichteter Mittelwert — Kennzeichnung „⌀"), Summe der Ausgangsleistung, Netzleistung (direkt vom gemeinsamen Netzsensor) sowie der aktuelle Verteilungs-Modus. Degradiert der Coordinator den konfigurierten Modus diesen Zyklus mangels gültigem Fremdinstanz-Sensor (siehe unten), zeigt die Karte beide Modi (Kapazitätsgewichtet → SOC-gewichtet ⚠️).

Anzeigename einer Gruppe: der Home-Assistant-Bereich des Netzsensors — direkt zugewiesen oder über sein Gerät geerbt. Ohne Bereich wird der Anzeigename des Sensors verwendet, ersatzweise seine Entity-ID. Bei der von Home Assistant empfohlenen Entitätsbenennung (Bereich, Gerät, Entität) heißen die Netzsensoren mehrerer Stromkreise sonst alle gleich (z. B. „Netz Leistung") und die Gruppen wären nicht unterscheidbar. Die Gruppenzuordnung selbst bleibt unverändert an der Sensor-Entität — der Bereich ist reine Beschriftung.

Zustandskennzeichnung der Instanz-Karten: Der farbige Kartenkopf zeigt die aktive Zone. Zusätzlich wird eine Karte ausgegraut, solange die Regelung dieser Instanz inaktiv ist, und erhält bei anliegender Fehlermeldung einen roten Rahmen samt ⚠️ hinter dem Namen — die Meldung selbst erscheint als Tooltip auf der Karte und im Status-Tab.

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:

# Gewicht w_i je Instanz — abhängig vom Verteilungs-Modus:
Gleichverteilung     w_i = 1 / Anzahl aktiver Instanzen
SOC-gewichtet        w_i = nutzbar_i / Σ nutzbar_j
                     nutzbar_i = (SOC_i − Zone-3-Schwelle_i) / 100
Kapazitätsgewichtet  wie SOC-gewichtet, zusätzlich × Kapazität_kWh_i
SOC-Umschaltung      genau eine Instanz aktiv (w_i = 1), alle anderen 0

# Pool 2 (AC Laden): Platz bis zum Ladeziel statt SOC über Zone 3
                     nutzbar_i = max(0, AC-Ladeziel_i − SOC_i) / 100
                     SOC-Umschaltung wirkt hier wie SOC-gewichtet

# Daraus je Instanz:
allocated_power_i = wasserfüll(total_power, {w_i}, {hard_limit_i})
error_share_i     = w_i        → Anteil am Netzfehler im PI-Regler

Wasserfüllverfahren: roh_i = total_power × w_i. Übersteigt roh_i das Hard-Limit einer Instanz, wird sie darauf gekappt und der ungenutzte Rest unter den übrigen erneut nach w_i verteilt — iterativ, bis nichts mehr verteilbar ist. Bei gleich dimensionierten Instanzen ohne Wirkung; bei unterschiedlichen verhindert es, dass Spielraum verfällt. Die Werte werden abgerundet. Jede Instanz rechnet in ihrem eigenen Zyklus und hebt ihr Limit nur so weit an, wie die aktuellen Limits der übrigen Instanzen der Netzgruppe freilassen. Wechselt die Zuteilung (z. B. bei der SOC-Umschaltung), bekommt die neue Instanz ihren vollen Anteil erst, nachdem die alte gesenkt hat. Die Summe übersteigt total_power dadurch nie.

SOC-Umschaltung: Die aktive Instanz entlädt exklusiv, bis ihr SOC seit Übernahme um die Divergenz-Schwelle gefallen ist — dann übernimmt die Instanz mit dem höchsten verbleibenden SOC (nie zweimal in Folge dieselbe). Der Zustand gilt je Netzgruppe und übersteht HA-Neustarts. Zone 0 hat Vorrang: eine Instanz im Surplus übernimmt sofort die Führung, mehrere teilen sich gleichmäßig. Beim Verlassen von Zone 0 wird die Rotations-Baseline auf den aktuellen SOC neu verankert.

Zwei getrennte Pools: Pool 1 sind die Instanzen in Modus '1' (Nulleinspeisung), Pool 2 die mit aktivem AC Laden. Pool 2 bekommt nur einen eigenen error_share, kein allocated_power — die AC-Ladeleistung bleibt unabhängig vom Hard-Limit. Gewichtet wird dort nach dem Platz bis zum Ladeziel: die Instanz mit dem niedrigeren SOC lädt stärker, die SOCs laufen beim Laden zusammen. Eine Instanz in Modus '0' trägt zu keinem Pool bei (error_share = 0, allocated_power = None, statisches Hard-Limit gilt). Bei nur einer aktiven Instanz je Pool ist 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.

Degradations-Warnung: Ist bei Modus „SOC-gewichtet", „Kapazitätsgewichtet" oder „SOC-Umschaltung" der SOC- oder Kapazitätssensor einer fremden Instanz gerade unknown/unavailable (z. B. kurz nach einem HA-Neustart der anderen Instanz), fällt der gesamte Pool für diesen Regelzyklus automatisch auf Gleichverteilung zurück (bzw. „Kapazitätsgewichtet" auf „SOC-gewichtet"). Das erscheint als Meldung im Status-/Fehlerfeld jeder betroffenen Instanz, bis der Sensor wieder verfügbar ist — kein stiller Fallback. Zusätzlich sichtbar in der Übersicht: die Gesamt-Karte zeigt den tatsächlich angewandten Modus, wenn er vom konfigurierten abweicht (siehe Netzgruppen).

Ausgangsbasis für den PI-Stelleingriff (Pool 1): Im normalen Entlade-PI baut die Korrektur nicht auf dem eigenen zuletzt kommandierten Wert dieser Instanz auf, sondern auf ihrem proportionalen Anteil am Gruppen-Sollwert:

power_base_i = (Σ kommandierte Leistung aller Instanzen in Pool 1) × error_share_i
neuer_output_i = power_base_i + PI-Korrektur

Dadurch gleicht sich die Aufteilung zwischen den Instanzen bei jedem Stelleingriff automatisch wieder an die Gewichtung w_i an, statt eine einmal entstandene Schieflage (z. B. durch zeitversetzte Rückkehr aus einem Zonenwechsel) über beliebig viele Zyklen fortzuschreiben. Im Einzelbetrieb (error_share = 1,0, nur eine Instanz im Pool) ist power_base_i identisch zum eigenen kommandierten Wert — kein Unterschied zum bisherigen Verhalten.

Eine Energierichtung je Netzgruppe

Instanzen einer Netzgruppe laden oder entladen, nie beides zugleich. Solange eine Instanz lädt (AC Laden, Tarif-Laden oder Netz-Laden des Zielladens), gilt für jede andere Instanz der Gruppe in Zone 1 das Ausgangsleistungs-Limit von Zone 2: min(Hard-Limit Z1, max(0, PV − Reserve)). Ihre Batterie entlädt dann nicht, PV wird weiter eingespeist. Der Zone-1-Zyklus bleibt aktiv; endet das Laden, gilt wieder das volle Limit, ohne neuen Start. Status und letzte Aktion zeigen „Zone 1: Batterieentladung gesperrt — Schwesterinstanz lädt“.

Ohne diese Sperre regeln beide Instanzen auf denselben Netzsensor: die entladende deckt die Ladeleistung der anderen als Hausverbrauch, die ladende wertet diese Entladung als Überschuss. Je nach Lage von AC-Offset und Offset 1 bleibt das Umpumpen stehen oder schaukelt sich bis an die Grenzen auf.

AC Laden startet nur bei Überschuss ohne die Entladung der Schwester-Instanzen (ΣOutput_entladend, siehe AC Laden). Tarif-Laden und Netz-Laden starten und laufen immer. Solange sie laufen, speisen die übrigen Instanzen in Zone 1 nur Solarstrom ein, ihre Batterie deckt die Tarif-Ladeleistung nicht.

Leistungsverteilung konfigurieren

Im Panel wird bei mehreren Instanzen ein zusätzlicher Verteilungs-Tab eingeblendet — bei mehreren Netzgruppen (siehe oben) je Gruppe ein eigener, unabhängig konfigurierbarer Verteilungs-Tab.

Parameter Beschreibung
Gesamte Max. Ausgangsleistung (W) Absolute Obergrenze aller Instanzen zusammen
Verteilungs-Modus Gleichverteilung / SOC-gewichtet / Kapazitätsgewichtet / SOC-Umschaltung — vier 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 eine Zahl liefert (grün/gelb/rot)
Divergenz-Schwelle (Prozentpunkte) Nur bei Modus „SOC-Umschaltung" wirksam. Die aktive Instanz entlädt exklusiv, bis ihr SOC um diesen Wert gefallen ist, dann Übergabe an die Instanz mit dem höchsten verbleibenden SOC. Standard 5

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, Wh/MWh automatisch normalisiert) Surplus-Forecast-Erzwingung (Überschuss-Tab), Prognose-Unterdrückung (Tarif-Tab), 0–12 Uhr zusätzlich Zone-1-Nacht-Forcierung (Zonen-Tab)
PV-Vorhersage morgen (kWh, Wh/MWh automatisch normalisiert) 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)

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.


Voraussetzungen

  • Home Assistant 2024.12 oder neuer
  • HACS installiert
  • Solakon ONE Wechselrichter mit der offiziellen Solakon-ONE-Integration in HA (siehe Hinweis ganz oben)
  • Sensor für die Netzleistung (z. B. Shelly 3EM, Shelly PM) — positiv = Bezug, negativ = Einspeisung

Wichtig — einmalige Einstellung in der App: Die Fernsteuerung der Solakon-Integration kennt kein echtes „Disabled" — '0' schaltet die Fernsteuerung ab, danach greifen die Einstellungen des Geräts. Die Regelung nutzt das bewusst als definierten Fallback, etwa in Zone 3. Damit das Gerät dort nichts ausgibt und PV-Leistung in den Akku lädt, einmalig in der Solakon-App einstellen:

  • Standard-Ausgangsleistung 0 W (oder ein 0-W-Zeitplan für 24 Stunden)
  • keine anderen Zeit- oder Energiepläne
  • kein Smart Meter in der App — sonst regelt das Gerät in Modus '0' selbst auf Nulleinspeisung, bis zum Export-Limit. Die App-Option „Überschussladung" ist genau diese Regelung. Ohne Smart Meter blendet die App sie aus, und das Gerät lädt PV-Leistung auch so in den Akku.

Die App wird nur für diese Einstellung gebraucht, danach läuft das Gerät ohne sie. Lädt der Akku in Zone 3 bei PV-Leistung nicht, fehlt meist eine dieser Einstellungen.

Die folgenden Solakon-Entitäten müssen in HA vorhanden sein und werden beim Einrichten zugewiesen:

Typ Beschreibung
sensor (power) Netzleistung
sensor (power) Ist-Leistung des Wechselrichters
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).


Installation

Über HACS (empfohlen)

Die Integration steht im HACS-Standardkatalog.

  1. HACS öffnen und nach Solakon ONE Nulleinspeisung suchen
  2. Die Integration öffnen → Herunterladen
  3. Home Assistant neu starten

Erscheint sie in der Suche nicht, etwa bei einer älteren HACS-Version, als benutzerdefiniertes Repository hinzufügen:

  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: Integration → Hinzufü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. Jede Instanz ist in elf Tabs gegliedert. Änderungen werden erst nach Klick auf 💾 Speichern übernommen — die Speicherleiste erscheint automatisch sobald ein Wert geändert wurde. Bei mehr als einer Instanz kommen zusätzlich eine Übersichtsseite und ein Verteilungs-Tab hinzu, siehe Multi-Instancing.

Adminrechte: Das Panel ist für jeden angemeldeten Home-Assistant-Benutzer sichtbar, alle Anzeigen sind frei lesbar. Schreibende Aktionen — Speichern der Einstellungen, Regelung ein/aus, Zyklus umschalten, Integral zurücksetzen und Speichern der Leistungsverteilung — erfordern dagegen ein Administratorkonto. Ohne Adminrechte quittiert das Panel diese Aktionen mit einer Fehlermeldung.

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 eine Zahl, gelb = Entity existiert, ist aber unknown/unavailable oder liefert keine Zahl (z. B. on) — die Regelung schaltet die zugehörige Funktion dann ab und meldet es im Status-Tab, 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, Standardabweichung der Netzleistung roh und getrimmt (Stabilitätsindikator, getrimmt ausgegraut bei Trim 0), zugeteiltes Zone-1-Limit, PI-Integral-Wert (ausgegraut bei ausgeschaltetem Entlade-PI), aktiver Offset (Zone 1 / Zone 1 Nacht / Zone 2 / Zone AC) mit Quelle (dynamisch / statisch), Zeitabstand seit letzter Regelaktion und seit letztem Moduswechsel, letzte Aktion und etwaige Fehlermeldungen, Status-Flags: PI-Regler (grün bei eingeschaltetem Entlade-PI), Zyklus, Surplus, AC Laden, Tarif-Laden, Netz-Laden, Nacht, PV→Tarif, PV→Surplus, Austritts-Sperre. Bei eingeschaltetem Zielladen zusätzlich dessen Phase: Aufladen mit SOC und Ziel-SOC oder Entladepause. Rein lesend — manuelle Eingriffe liegen im Debug-Tab.


🎛️ Regelung

Kern des Regelkreises. Oben die für beide Entladeverfahren geltenden Werte (Totband, Wartezeit), darunter die Entladeregelung mit PI-Regler oder Stellwertrechnung. Vollständige Einstellhilfe → PI-Regler Einstellung.

Parameter Beschreibung Empfehlung
Entlade-PI An: Zone 1 und 2 entladen über den PI-Regler. Aus: Stellwertrechnung auf Ist-Basis wie beim AC-Laden, P- und I-Faktor werden ausgegraut. Beim Umschalten wird das Integral genullt. An
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 — weder PI-Schritt noch Stellwertrechnung, im AC-Laden bezogen auf den AC-Offset. Im Entladen wird bei Netzbezug zusätzlich nicht nachgeführt, solange die Ausgangsleistung höchstens um das Totband unter dem Zone-1/2-Limit liegt 10–30
Wartezeit (s) Feste Pause (ohne adaptive Wartezeit) oder maximales Timeout als Sicherheitsnetz (mit adaptiver Wartezeit) 1–5
Adaptive Wartezeit Wartet auf die Ist-Leistung statt fester Wartezeit Empfohlen
Zielwert-Toleranz (W) Abweichung, ab der der Zielwert als erreicht gilt (nur bei adaptiver Wartezeit) 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, und in Aufbauten ohne eigene PV am Gerät, in denen der Solar-Sensor als Trigger-Quelle ausfällt. Aus
Trigger-Intervall (s) Abstand zwischen zwei periodischen Regelläufen. Bereich: 5–300 s. 10–60

Stellwertrechnung im Entladen (Entlade-PI aus): Der neue Sollwert entsteht in einem Schritt aus der Ist-Leistung, ohne Integral:

Stellwert_i = Fehler-Anteil_i × (Σ Ist-Entladeleistung des Entlade-Pools + grid − Offset)

Geklemmt auf 0 … Zone-1/2-Limit (mit Richtungssperre). Gate, Totband und Stillstandsprüfung bleiben wie beim PI; eine Mindestleistung gibt es nicht. Solange die Ist-Leistung mehr als 15 W unter der Ausgangsleistung liegt, wird nur gesenkt — dieselbe Regel wie im AC-Laden; das Anstiegsverhalten beim Entladen ist nicht gemessen.


🔋 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 auf oder unter diesem Wert → Zone 3 (Stopp) 15–25
Max. Entladestrom (A) Entladestrom in Zone 1 und in der Ruhe in Modus '0' (Zone 2 = 0 A, Surplus = 2 A) 25–40
Hard Limit Z0 — Surplus (W) Ausgangsleistungs-Obergrenze in Zone 0 (Surplus). Typisch: gesetzliches Maximum (z. B. 800 W). Höhere Werte als die Gerätegrenze des Solakon ONE (1200 W, DEVICE_MAX_POWER) werden darauf gedeckelt. 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, bei Dunkelheit mit aktiviertem Nacht-Offset ersetzt 20–50
Zone 2 Offset (W) Statischer Zielwert in Zone 2 10–30
Nacht-Offset aktivieren Ersetzt im Zone-1-Zyklus bei Dunkelheit den Zone-1-Offset durch den Nacht-Offset Aus
Nacht-Offset Zone 1 (W) Statischer Zielwert in Zone 1 bei Dunkelheit. Bei aktivem Dyn. Offset (Spalte Zone 1 Nacht) überschrieben 0–30
PV-Ladereserve (W) Ausgangsleistungs-Limit in Zone 2: min(Hard-Limit Z1, max(0, PV − Reserve)). Dient auch als Ausschaltschwelle der Nachtabschaltung und als Umschaltschwelle des Nacht-Offsets 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.

Nacht-Offset (optional): Eigener Satz statischer und dynamischer Zone-1-Werte, der im Zone-1-Zyklus bei Dunkelheit an die Stelle des Zone-1-Offsets tritt — etwa negativ am Tag, positiv in der Nacht, damit nachts keine Batterieenergie ins Netz geht. Dunkelheit beginnt bei PV < PV-Ladereserve und endet ab PV ≥ PV-Ladereserve + Hysterese Einschalten (Nacht-Tab). Keine Uhrzeit, unabhängig von der Nachtabschaltung. Zone 2 und AC Laden sind nicht betroffen; nachts ist Zone 2 ohnehin auf 0 W gedeckelt.

Wichtig: Zone-1-Schwelle muss größer als Zone-3-Schwelle sein, und bei aktiviertem Surplus 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-Zyklus 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
Mindest-SOC (%) Sicherheits-Floor der Forcierung — muss strikt zwischen Zone-3- und Zone-1-Schwelle liegen —

🔌 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-Instancing: 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) Prognose-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

Optionaler Surplus (Zone 0). Hat Vorrang vor allen anderen optionalen Modulen außer dem Zielladen — Tarif-Laden, Tarifsperre (inkl. deren Recovery-Sperre) und AC Laden werden blockiert solange Zone 0 aktiv ist. Während des Aufladens des Zielladens startet Surplus nicht, ein laufendes Surplus endet sofort (Fall 0B).

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_entladend + 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 den Verbrauchsbezug (Σ Output + Grid) × Fehler-Anteil (im Einzelbetrieb = Output + Grid). Der Eintritt zählt dabei ΣOutput_entladend, je Instanz das Größere aus Ist-Leistung und Ausgangsleistung: Nach einem Lastabwurf zeigt die Ist-Leistung noch den Stand vor dem Hochregeln, und Zone 0 träte ohne echten Überschuss ein. Der Austritt zählt die Ist-Leistung, weil die Ausgangsleistung in Zone 0 fest auf Hard Limit Z0 steht. Der Eintrittsbezug ist nie kleiner als der Austrittsbezug, das Hysterese-Totband bleibt also erhalten.

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 Sperr-Zustand übersteht einen HA-Neustart (persistiert im Store). (Der Blueprint erreicht dasselbe über getaktete Trigger statt Entprellung.)

Forecast-Eintritt: PV-Vorhersage ≥ Schwelle UND PV > Hard Limit Z0 UND SOC > Zone-3-Schwelle

Die Schwelle ist ein kWh-Tagesertrag, nicht eine Leistung: ein Sensor mit Einheit Wh oder MWh wird automatisch auf kWh normalisiert, ein Wert ohne erkannte Energie-Einheit (z. B. input_number) gilt unverändert als kWh. Standard: 15 kWh.

Der Vorhersage-Sensor ist ein gemergtes Feld ("PV-Vorhersage heute", konfiguriert im Tarif-Tab) — dieselbe Quelle speist auch die Prognose-Unterdrückung unten, da beide Features denselben Werttyp brauchen. Bei Multi-Instancing 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-Instancing-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. Der Eintritt zählt je Instanz das Größere aus Ist-Leistung und Ausgangsleistung wie Fall G: Nach einer Erhöhung zeigt die Ist-Leistung noch den alten Stand, und nach einem Lastabwurf ergäbe sie allein einen scheinbaren Überschuss. Der Austritt zählt die Ist-Leistung, weil in Zone 0 die Ausgangsleistung fest auf Hard Limit Z0 steht.

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
Forecast-Erzwingung Ein/Aus — Zone-0-Eintritt ohne Export-Schwelle bei guter Tagesprognose —
Mindest-Ertrag für Surplus (kWh) Forcierung nur ab dieser Tagesprognose 10–20
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 Surplus (Zone 0) oder Tarif-Laden aktiv ist.

Eintritts-Bedingung: SOC < Ladeziel UND kein Überschuss aktiv UND keine Lade-Session (AC, Tarif, Netz) aktiv UND Modus ≠ '3' UND (Grid + ΣOutput_entladend) < min(ac_offset, 0) − Hysterese

Eintritt und Abbruch liegen symmetrisch um den Offset, je eine Hysterese darunter und darüber; sie können sich auch bei stark negativem (dynamischem) Offset nicht überkreuzen. Bei positivem Offset bleibt der Eintritt bei −Hysterese: AC-Laden startet nur bei externem Überschuss.

Der Modus-Guard ≠ '3' verhindert einen Re-Eintritt wenn AC Laden bereits aktiv ist. ΣOutput_entladend zählt je Instanz das Größere aus Ist-Leistung und Ausgangsleistung, die Ausgangsleistung nur in Modus '1' (nicht ruhend). Eine Instanz im Surplus zählt mit ihrer Ist-Leistung, solange diese nicht negativ ist — ihre Ausgangsleistung steht fest auf Hard Limit Z0, abgegeben wird nur, was PV und Entladestrom hergeben. Die Ist-Leistung hinkt dem Schreibbefehl um ein Pollintervall nach; nach einem Lastabwurf ergäbe sie allein einen scheinbaren Überschuss. Summiert werden im Einzelbetrieb die eigene Instanz, im Multi-Instancing-Betrieb zusätzlich alle Schwester-Instanzen, die in Modus '1' entladen (nicht ruhend) — 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.

Nach dem Eintritt deckelt jede andere Instanz der Netzgruppe ihre Zone-1-Entladung auf PV − Reserve, solange diese Instanz lädt — siehe Eine Energierichtung je Netzgruppe.

Während des Aufladens des Zielladens startet AC Laden nur, wenn es dort als Ladequelle zugeschaltet ist; der Schalter dieses Tabs muss zusätzlich an sein.

Abbruch-Bedingung: Modus = '3' UND ac_charge_active UND kein Tarif-Laden UND (AC-Option aus ODER Aufladen des Zielladens ohne AC Laden als Ladequelle ODER SOC ≥ Ladeziel ODER (Grid ≥ ac_offset + Hysterese UND eigener Output = 0 W))

Der Output = 0 W-Guard verhindert Fehlauslösung, solange noch geladen wird. actual_power_sensor folgt derselben Vorzeichenkonvention wie der Netzsensor (positiv = Bezug, negativ = Einspeisung) — während aktivem AC-Laden ist er durchgehend deutlich negativ (Größenordnung der tatsächlichen Ladeleistung, nicht nur Rauschen nahe 0). Der frühere einseitige ≤ 0-Vergleich war dadurch praktisch die gesamte Ladedauer erfüllt, unabhängig von der Ladeleistung. Der exakte Vergleich auf 0 W verlangt stattdessen, dass die Ladeleistung tatsächlich auf null heruntergeregelt ist, bevor der Grid-Zweig greift.

Der Lademodus verwendet keinen PI-Regler, sondern eine Stellwertrechnung auf Basis der Ist-Leistung. Die Netzleistung ist Hauslast plus Ladeleistung, daraus folgt die nötige Ladeleistung in einem Schritt:

Stellwert_i = Fehler-Anteil_i × (Σ Ist-Ladeleistung aller ladenden Instanzen + ac_offset − grid)

Einzelbetrieb bzw. nur eine ladende Instanz: eigene Ist-Ladeleistung + (ac_offset − grid).

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.

Regeln der Stellwertrechnung:

  • Geschrieben wird, wenn |ac_offset − grid| > Totband oder die Ausgangsleistung über der Max. Ladeleistung liegt. Der Stellwert wird auf 0 … Max. Ladeleistung geklemmt.
  • Unter der Mindestladeleistung (Standard 50 W) wird 0 geschrieben: Das Gerät hält kleinere Ladeleistungen nicht ruhig. Die 50 W sind gemessen — 10 W setzt das Gerät nicht um, 20–30 W pendeln um etwa ±20 W, ab etwa 50 W ist die Ladeleistung stabil. Eine Änderung geschieht auf eigene Gefahr. Liegt die Mindestladeleistung über der Max. Ladeleistung, gilt die Max. Ladeleistung als Schwelle.
  • Solange die Ladeleistung noch hochfährt (Ist-Ladeleistung mehr als 15 W unter der Ausgangsleistung), wird nur gesenkt. Die Ladeleistung des Solakon ONE steigt mit etwa 34 W/s, aus dem Stillstand anfangs schneller; Senken wirkt nach etwa 2 s als Sprung. Der Netzsensor zeigt während des Anstiegs einen älteren Stand, eine Erhöhung darauf würde überschwingen.
Parameter Beschreibung Empfehlung
Aktivieren Ein/Aus-Schalter —
Ladeziel SOC (%) Laden stoppt bei diesem SOC 80–95
Max. Ladeleistung (W) Obergrenze der AC-Ladeleistung; das Netz-Laden im Zielladen hat eine eigene Netz-Ladeleistung 400–800
Mindestladeleistung (W) Kleinster geschriebener Ladesollwert, darunter 0; 0 schaltet die Schwelle ab. 50 W gemessen, Änderung auf eigene Gefahr 50
Hysterese (W) Wirkt auf Eintritt und Austritt: Eintritt unter min(Offset, 0) − Hysterese, Austritt ab Offset + Hysterese 30–80
Regel-Offset (W) Zielwert während AC Laden (typisch negativ) −80 bis −30

💹 Tarif

Optionale Tarif-Arbitrage für dynamische Stromtarife (Tibber, aWATTar …). Wird blockiert solange Surplus (Zone 0) aktiv ist. Während des Aufladens des Zielladens startet Tarif-Laden nur, wenn es dort als Ladequelle zugeschaltet ist; eine laufende Session ohne Zuschaltung endet (Fall HT). Netz-Laden hat Vorrang.

Drei Preisstufen: Günstig (Preis < Günstig-Schwelle): Tarif-Laden mit fester Leistung bis SOC-Ziel — liegt der SOC am Ladeziel oder weniger als die SOC-Hysterese darunter, greift stattdessen die Tarifsperre. Mittel (Günstig ≤ Preis < Teuer): Tarifsperre — Zone 1 und Zone 2 gesperrt (Ausgangsleistung 0 W, Modus Disabled). Die Tarifsperre 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.

Im Multi-Instancing-Betrieb läuft das Tarif-Laden immer durch. Die übrigen Instanzen derselben Netzgruppe speisen währenddessen in Zone 1 nur Solarstrom ein, ihre Batterie entlädt nicht — siehe Eine Energierichtung je Netzgruppe.

Parameter Beschreibung Empfehlung
Aktivieren Ein/Aus-Schalter — auch als Entität switch.solakon_one_tarif_steuerung_aktiv (siehe Erzeugte Entitäten) —
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
SOC-Hysterese (%) Tarif-Laden startet erst unter Ladeziel − Hysterese; verhindert Pendeln zwischen Tarif-Laden und Tarifsperre am Ladeziel. 0 = Start direkt unter dem Ladeziel 3
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 Tarifsperre 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/Tarifsperre unterdrückt 5–15, Standard 15

Einheiten-Plausibilität: Beide Schwellen sind ct/kWh. Liefert der Preis-Sensor €/kWh (0,28 statt 28), liegt der Preis dauerhaft unter der Günstig-Schwelle — die Integration lädt durchgehend aus dem Netz und sperrt zusätzlich die Entladung. Erkannt wird das am Wert, nicht an der Einheit: ein Preis zwischen 0 und 1 bei einer Günstig-Schwelle ab 3 gilt nach sechs Stunden ununterbrochen als Verdacht und erscheint als Fehlermeldung im Panel. Trägt der Sensor eine Einheit mit „€" oder „EUR", erscheint die Meldung sofort; eine Einheit mit „ct", „Cent" oder „öre" unterdrückt sie. Umgerechnet wird nichts — negative Börsenpreise und einzelne Nulltarif-Stunden lösen keine Meldung aus.

Dynamische Preisschwellen (optional lokal): Günstig-Schwelle-Entität und Teuer-Schwelle-Entität, siehe Entitäten. Können bei Multi-Instancing zusätzlich global im Verteilungs-Tab hinterlegt werden (meist ein gemeinsamer Hausstrom-Tarif) — jede Instanz überschreibt optional lokal. Liefert eine Schwellen-Entität keine Zahl, gilt der eingestellte Zahlenwert, und last_error nennt die Entität.


📈 Dyn. Offset

Optionaler Dynamic 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, max=250, noise=15, factor=1.5)
Sehr ruhig 5 W 30 W (Minimum)
Normal 30 W 52 W
Unruhig 80 W 128 W
Sehr unruhig 160 W 248 W
Extrem ab 162 W 250 W (Maximum)

Jede Zone (Zone 1, Zone 1 Nacht, Zone 2, Zone AC) hat einen eigenen Parameterblock. Zone 1 Nacht wirkt nur bei eingeschaltetem Nacht-Offset (Zonen-Tab):

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

Gilt für alle Zonen gemeinsam (Zeitfenster-Ebene, nicht pro Zone):

Parameter Beschreibung Empfehlung
Stabw.-Fenster (s) Zeitfenster, über das die Netz-Standardabweichung gebildet wird 30–300
Trim (Anzahl Werte pro Seite) Schließt die N höchsten UND N niedrigsten Einzelmesswerte im Stabw.-Fenster vor der Berechnung aus — pro Seite, nicht insgesamt (N=5 → 10 Samples ausgeschlossen). Trennt kurze, seltene Lastspitzen (Kompressor-/Pumpen-Anlaufstrom) von echter Dauerunruhe anhand des betroffenen Fensteranteils, nicht der Ereignisdauer. Wert als Anzahl Samples, nicht Prozent, da die Sample-Zahl im Fenster von der Update-Rate des Netzsensors abhängt. Wirkung live vergleichbar über den ungetrimmten Rohwert (stddev_raw). 0 (Standard, kein Trimmen); vorsichtig erhöhen

Mehrere Instanzen am selben Netzsensor: Der StdDev-Ringpuffer gehört der Netzgruppe. Nur der Gruppen-Leader (kleinste entry_id unter den aktiv regelnden Instanzen) fügt Messwerte hinzu, alle anderen übernehmen seinen Wert. Wechselt der Leader, läuft der Puffer ohne Neustart weiter. Verhindert, dass mehrere unabhängig berechnete, leicht phasenversetzte StdDev-Historien sich gegenseitig hochschaukeln (siehe Troubleshooting). Bei Einzelbetrieb ist die Instanz immer ihr eigener Leader — kein Unterschied zum bisherigen Verhalten.


🌙 Nacht

Optionale Nachtabschaltung. Deaktiviert nur Zone 2 wenn PV < PV-Ladereserve (aus den Zonen-Einstellungen). Die Nacht endet erst bei PV ≥ PV-Ladereserve + Hysterese Einschalten (Standard 0 W); dazwischen bleibt der letzte Zustand erhalten. Zone 1 (aggressive Entladung) und AC Laden laufen auch nachts weiter. Zone 2 wird nicht reaktiviert solange der Tarif-Block greift (Preis unter der Teuer-Schwelle).

Dieselbe Dunkelheit mit denselben Schwellen schaltet den Nacht-Offset von Zone 1 — auch bei ausgeschalteter Nachtabschaltung.

Parameter Beschreibung Empfehlung
Nachtabschaltung aktivieren Zone 2 bei PV < PV-Ladereserve deaktivieren; Zone 1 und AC Laden laufen weiter —
Hysterese Einschalten (W) Die Nacht endet erst ab PV ≥ PV-Ladereserve + Hysterese. Gilt auch für den Nacht-Offset. 0 = Ein- und Ausschaltschwelle gleich —

🎯 Zielladen

Lädt die Batterie bis zum Ziel-SOC und schaltet danach die Regelung ab. Zwei Phasen, abgeleitet aus den beiden gespeicherten Schaltern „Zielladen“ und „Regelung aktiv“ — sie überstehen damit jeden Neustart:

  • Aufladen (Zielladen an, Regelung an, SOC < Ziel-SOC): Die Batterie lädt über die zugeschalteten Ladequellen. Surplus (Zone 0) ist gesperrt, ein laufendes Surplus endet sofort. AC Laden und Tarif-Laden starten nur, wenn sie hier zugeschaltet und in ihrem eigenen Tab eingeschaltet sind; eine laufende Session ohne Zuschaltung endet.
  • Entladepause (Zielladen an, Regelung aus): Bei SOC ≥ Ziel-SOC schaltet Fall ZE die Regelung über denselben Pfad ab wie der Schalter „Regelung aktiv“ — Ausgangsleistung 0 W, Entladestrom 40 A, Modus '0'. Das Gerät gibt im Standardzustand 0 W aus. Die Regelung von Hand während des Aufladens auszuschalten zieht die Entladepause vor.

Kopplung der Schalter: Zielladen an schaltet die Regelung ein. Zielladen aus schaltet die Regelung ein und Netz-Laden aus — auch während des Aufladens. Regelung an während der Entladepause schaltet Zielladen und Netz-Laden aus. Beides stellt den normalen Betrieb her.

PV beim Aufladen: Mit Hausvorrang (Standard) laufen Zone 1 und Zone 2 weiter, die Ausgangsleistung ist aber auch mit Zyklus auf min(Hard-Limit Z1, max(0, PV − Reserve)) gedeckelt; die Batterie lädt nur die PV über dem Hausverbrauch. Mit Batterievorrang setzt Fall ZB Ausgangsleistung 0 W im Ruhemodus, die ganze PV geht in die Batterie und das Haus bezieht vom Netz; Zone-1- und Zone-2-Start (A, E) sind gesperrt.

Netz-Laden (Fälle GN/HN) lädt sofort mit der eigenen Netz-Ladeleistung (Standard 800 W, unabhängig von der Max. Ladeleistung des AC-Ladens) im Modus '3', ohne Preisbedingung, und hat Vorrang vor dem Tarif-Laden. Es endet am Ziel-SOC oder wenn Netz-Laden oder Zielladen ausgeschaltet wird. Netz-Laden zählt als Lade-Session für die Energierichtung der Netzgruppe. Wann aus dem Netz geladen wird, entscheiden Nutzer oder Automation über den Schalter.

Ziel-SOC und Ladequellen lassen sich auch bei ausgeschaltetem Zielladen einstellen. Der Max-SOC des Geräts bleibt Obergrenze: liegt das Ziel darüber, wird es nie erreicht und die Entladepause tritt nicht ein.

Ziel-SOC ändern: Während des Aufladens gilt ein geänderter Ziel-SOC sofort — Fall ZE prüft ihn in jedem Regelzyklus. Ein gesenktes Ziel unter dem aktuellen SOC beginnt also im nächsten Zyklus die Entladepause. In der Entladepause bewirkt die Änderung nichts: Die Regelung ist aus, das Zielladen bleibt in der Pause. Der neue Wert gilt erst, wenn Zielladen aus- und wieder eingeschaltet wird.

Parameter Beschreibung Empfehlung
Zielladen aktivieren Ein/Aus — auch als Entität switch.solakon_one_zielladen —
Ziel-SOC (%) Aufladen endet bei diesem SOC, danach Entladepause. 70 % lagert die Batterie im mittleren Ladebereich, der die Zellen über Wochen schont, mit Reserve gegen Selbstentladung — auch als Entität number.solakon_one_ziel_soc 70 (Winterpause), 100 (Unwetter-Vorsorge)
Batterievorrang Aus = Hausvorrang, An = Batterievorrang Aus
AC Laden als Ladequelle AC Laden darf während des Aufladens starten An
Tarif-Laden als Ladequelle Tarif-Laden darf während des Aufladens starten An
Netz-Laden Lädt sofort mit der Netz-Ladeleistung aus dem Netz — auch als Entität switch.solakon_one_netz_laden; geht mit dem Ende des Zielladens aus Aus
Netz-Ladeleistung (W) Feste Ladeleistung des Netz-Ladens, unabhängig von der Max. Ladeleistung des AC-Ladens. 800 W wie Max. Ladeleistung und Tarif-Ladeleistung, mit Standardwerten lädt das Netz-Laden wie bisher — auch als Entität number.solakon_one_netz_ladeleistung 800

🔧 Debug

Manuelle Eingriffe in den laufenden Regelzustand. Jede Aktion wird im Status-Tab unter Letzte Aktion protokolliert.

Aktion Wirkung
Integral zurücksetzen Setzt den I-Anteil des PI-Reglers auf 0. Sinnvoll nach einem manuellen Eingriff am Wechselrichter.
Zone 1 aktivieren Setzt cycle_active = true → aggressiver Entladebetrieb mit vollem Entladestrom. Integral wird zurückgesetzt.
Zone 2 aktivieren Setzt cycle_active = false → batterieschonender Betrieb, 0 A Entladestrom, dynamisches Ausgangsleistungs-Limit. Integral wird zurückgesetzt.
Ruhezustand in Modus 1 (Schalter, Standard aus) Die Regelung ruht in Modus '1' mit 0 W statt in Modus '0', siehe Hinweis 15. Nicht empfohlener Hack — das Gerät verlässt die Fernsteuerung nur noch bei ausgeschalteter Regelung.

Der Zonenwechsel ist ein Eingriff in den internen Zustand, kein dauerhafter Modus — der nächste Regelzyklus bewertet die Zonenbedingungen normal weiter und kann ihn sofort wieder überschreiben.


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
ZE — Ziel erreicht Zielladen an UND SOC ≥ Ziel-SOC Alle Zyklus- und Lade-Flags → False. Integral = 0. Regelung aus über den Abschaltpfad (Ausgangsleistung 0 W, Entladestrom 40 A, Modus '0'), gespeichert: Entladepause.
0A — Surplus Start surplus_enabled UND new_surplus = True UND surplus_active = False UND keine Lade-Session UND kein Aufladen des Zielladens 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 ODER Aufladen des Zielladens) surplus_active → False, cycle_active → (SOC > Zone-1-Schwelle) (Zone aus SOC neu abgeleitet). Integral = 0. Ausgangsleistung → 0 (analog Fall B/C/F/G/H). 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 ODER Nacht-Forcierung aktiv) UND cycle_active = False UND keine Lade-Session UND kein aktiver Tarif-Block (gültiger Preis < Teuer) UND kein Aufladen mit Batterievorrang cycle_active → True. Integral = 0. Timer-Toggle. Modus → '1'.
B — Zone 3 Stop SOC ≤ Zone-3-Schwelle UND cycle_active = True UND keine Lade-Session cycle_active → False. Integral = 0. Ausgangsleistung → 0 W. Timer-Toggle. Modus → '0'.
C — Zone 3 Absicherung SOC ≤ Zone-3-Schwelle UND cycle_active = False UND Modus ≠ '0' UND keine Lade-Session Ausgangsleistung → 0 W. Timer-Toggle. Modus → '0'. Kein Integral-Reset.
D — Recovery (cycle_active = True ODER Lade-Session mit geltendem Ladegrund) UND Modus ∉ {'1','3'} UND (SOC > Zone-3-Schwelle ODER Lade-Session mit geltendem Ladegrund) UND keine Tarifsperre (Preis < Teuer-Schwelle; greift nicht bei einer Lade-Session oder surplus_active) UND ohne Lade-Session kein Aufladen mit Batterievorrang Timer-Toggle. Modus → '3' (wenn eine Lade-Session mit geltendem Ladegrund läuft) sonst '1'. Kein Integral-Reset. Als geltender Ladegrund zählt ac_charge_active bei eingeschalteter AC-Option, tariff_charge_active bei ausgewiesenem Günstig-Preis und grid_charge_active bei eingeschaltetem Netz-Laden während des Aufladens — sonst räumt HT bzw. H die Session im selben Zyklus, und Recovery würde das Netzladen davor noch einmal anwerfen.
GN — Netz-Laden Start Aufladen des Zielladens UND Netz-Laden an UND keine Lade-Session UND kein Überschuss aktiv UND Modus ≠ '3' grid_charge_active → True. Timer-Toggle. Ausgangsleistung → Netz-Ladeleistung. Modus → '3'.
HN — Netz-Laden Ende grid_charge_active = True UND (SOC ≥ Ziel-SOC ODER Netz-Laden aus ODER Zielladen aus) grid_charge_active → False. Integral = 0. Ausgangsleistung 0 W. Timer-Toggle. Zone 1 → '1' / Zone 2 → '0'.
GT — Tarif-Laden Start Tarif aktiv UND Preis gültig UND Preis < Günstig-Schwelle UND SOC < Tarif-SOC-Ziel − SOC-Hysterese UND kein Tarif-Laden aktiv UND kein AC-Laden aktiv UND kein Netz-Laden aktiv UND kein Überschuss aktiv UND Modus ≠ '3' UND (kein Aufladen des Zielladens ODER Tarif-Laden als Ladequelle zugeschaltet) tariff_charge_active → True. Timer-Toggle. Ausgangsleistung → Tarif-Ladeleistung. Modus → '3'.
HT — Tarif-Laden Ende tariff_charge_active = True UND (kein Günstig-Preis ausgewiesen ODER SOC ≥ Tarif-SOC-Ziel ODER Aufladen des Zielladens ohne Tarif-Laden als Ladequelle) — der Ausweis fehlt bei Preis ≥ Günstig-Schwelle, abgeschalteter Tarif-Option, PV-Prognose-Unterdrückung und unlesbarem Preissensor tariff_charge_active → False. Integral = 0. Ausgangsleistung 0 W. Timer-Toggle. Zone 1 → '1' / Zone 2 → '0'.
ZB — Batterievorrang Aufladen des Zielladens mit Batterievorrang UND keine Lade-Session UND Modus = '1' UND nicht im Ruhezustand Integral = 0. cycle_active → False. Ausgangsleistung → 0 W. Timer-Toggle. Ruhemodus. Die ganze PV lädt die Batterie.
TM — Tarifsperre Tarif aktiv UND Preis gültig UND Preis < Teuer-Schwelle UND keine Lade-Session UND kein Überschuss UND Modus = '1' Integral = 0. cycle_active → False. Ausgangsleistung → 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 keine Lade-Session aktiv UND kein Überschuss aktiv UND (kein Aufladen des Zielladens ODER AC Laden als Ladequelle zugeschaltet) UND SOC < Ladeziel UND Modus ≠ '3' UND (Grid + ΣOutput_entladend) < min(ac_offset, 0) − Hysterese ac_charge_active → True. Timer-Toggle. Ausgangsleistung → 0 W. Modus → '3'.
H — AC Laden Ende Modus = '3' UND ac_charge_active = True UND kein Tarif-Laden UND (AC-Option AUS ODER Aufladen des Zielladens ohne AC Laden als Ladequelle ODER SOC ≥ Ladeziel ODER (Grid ≥ ac_offset + Hysterese UND eigener Output = 0 W)) ac_charge_active → False. Integral = 0. Ausgangsleistung 0 W. Timer-Toggle. Zone 1 → '1' / Zone 2 → '0'.
I — Safety Modus und Lade-Session widersprechen sich, in einer von zwei Richtungen: (a) Modus = '3' UND keine Lade-Session (AC, Tarif, Netz); (b) eine Lade-Session läuft, aber Modus ≠ '3', oder mehrere Lade-Flags sind zugleich gesetzt (a) Integral = 0. Zone 1 → Timer-Toggle + '1' / Zone 2 → Timer-Toggle + '0' + 0 W. (b) Integral = 0. Alle Lade-Flags → False, Modus bleibt unangetastet. Waren mehrere Flags gesetzt, endet zusätzlich eine Meldung im Status-Tab.
E — Zone 2 Start Zone-3 < SOC ≤ Zone-1 UND cycle_active = False UND Modus = '0' UND keine Lade-Session UND kein aktiver Tarif-Block (gültiger Preis < Teuer) UND kein Nacht UND kein Aufladen mit Batterievorrang Integral = 0. Timer-Toggle. Modus → '1'.
F — Nachtabschaltung Nacht aktiv UND cycle_active = False UND Modus ≠ '0' UND keine Lade-Session Integral = 0. Ausgangsleistung → 0 W. Timer-Toggle. Modus → '0'.

Eine Tarifsperre für A, D, E und TM: Fall TM, die Eintritts-Blockade der Falls A und E und die Sperre von Fall D prüfen dieselbe Tarifsperre — jeder Preis unter der Teuer-Schwelle, also günstig und mittel. Eine laufende Lade-Session (AC, Tarif oder Netz) und aktiver Surplus heben sie auf; so lässt Recovery die Lade-Session von Fall GT zu.

Lade-Session heißt hier AC Laden, Tarif-Laden oder Netz-Laden (ac_charge_active, tariff_charge_active, grid_charge_active).

Session-Flags: Die Falls A, B und C setzen zusätzlich surplus_active, ac_charge_active und tariff_charge_active auf False — sie stellen einen definierten Ausgangszustand her, statt nur ihr eigenes Flag zu ändern.

Reihenfolge-Begründungen:

  • Fall ZE steht vor allen anderen: Am Ziel-SOC endet das Aufladen in jedem Zustand, auch aus einer Lade-Session oder aus Surplus.
  • Falls GN/HN stehen vor GT/HT: Ist Netz-Laden eingeschaltet, lädt die Instanz mit der Netz-Ladeleistung, auch wenn gleichzeitig ein günstiger Preis Tarif-Laden mit der Tarif-Ladeleistung starten würde. Endet Netz-Laden bei noch günstigem Preis, startet GT im nächsten Zyklus.
  • Fall ZB steht direkt vor TM und hat dieselbe Mechanik. Fall A und E sind bei Batterievorrang gesperrt — sonst würde A einen Zyklus starten, den ZB im nächsten Zyklus wieder beendet.
  • 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 Widerspruch zwischen Modus und Lade-Flags auf — egal ob durch externe Modussetzung oder Fehlzustand entstanden. Bei einem Widerspruch gewinnt der Modus: er ist der beobachtete Zustand des Geräts, das Flag nur die Buchführung darüber. Eine so beendete Session wird nicht wieder aufgenommen, sie muss über Fall G oder GT neu eintreten.
  • Fall I steht hinter H und HT, nicht davor: eine Doppelsession, die deren Wertbedingungen erfüllt, wird regulär von ihnen beendet; I greift erst, wenn das nicht passiert.
  • Fall D ist gegen die Tarifsperre geblockt (außer bei aktiver Lade-Session — AC, Tarif oder Netz — oder aktivem Surplus) — verhindert, dass Recovery die Tarifsperre 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 Lade-Session (AC, Tarif oder Netz) 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 den Tarif-Block (Preis < Teuer) geblockt — verhindert, dass Zone 2 bei gesperrter Entladung neu startet.
  • Falls GT und G sind gegen aktiven Überschuss geblockt — Zone-0-Einspeisung hat Vorrang vor Tarif-Laden und AC Laden.
  • Fall G verwendet ΣOutput_entladend (eigene Instanz plus alle in Modus '1' entladenden Schwester-Instanzen, je Instanz das Größere aus Ist-Leistung und Ausgangsleistung) 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-Instancing-Betrieb).
  • Nach dem Eintritt verhindert das Ausgangsleistungs-Limit der übrigen Instanzen das Umpumpen: solange eine Instanz der Netzgruppe AC-, Tarif- oder Netz-lädt, gilt in Zone 1 das Limit von Zone 2 (PV − Reserve).

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. AC Laden und Tarif-Laden verwenden keinen PI-Regler und brauchen kein Tuning.


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 ohne PI. Die Ladeleistung wird in einem Schritt aus Netz und Ist-Leistung berechnet (siehe AC Laden). Es gibt keine Faktoren einzustellen.
  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)), jeweils zusätzlich gedeckelt auf die Gerätegrenze von 1200 W. Liegt current_power über dynamic_max (z.B. weil PV abgefallen ist), läuft der PI trotz positivem Netzfehler, auch wenn der Netzfehler im Totband liegt, und reduziert den Befehl auf die neue Decke — kein Deadlock wenn das dynamic ceiling sinkt. Nach oben greift das Totband auch an der Decke: Bei positivem Netzfehler gilt eine Ausgangsleistung über 0 W, die höchstens um das Totband unter dynamic_max liegt, als gesättigt — steigt die PV-Decke in Zone 2 nur um wenige Watt, wird nicht geschrieben.
  7. Grenzen im AC-Lade-Modus. Die Stellwertrechnung klemmt auf 0 … Max. Ladeleistung und schreibt unter der Mindestladeleistung 0; liegt die Ausgangsleistung über einer gesenkten Max. Ladeleistung, wird auch bei Netzfehler im Totband gesenkt. Fall I übernimmt die Safety-Funktion für jeden Widerspruch zwischen Modus und Lade-Flags.
  8. Tarifsperre. Sie gilt für mittlere UND günstige Preiszonen (alles unterhalb der Teuer-Schwelle) und sperrt sowohl Zone 1 als auch Zone 2 (Ausgangsleistung 0 W, Modus Disabled). Solange Surplus aktiv ist, wird keine Tarifsperre ausgelöst. Die Sperre hebt sich automatisch wenn der Preis die Teuer-Schwelle überschreitet. Der Zyklus startet danach über Fall A (SOC über Zone-1-Schwelle) bzw. Zone 2 über Fall E neu — Recovery (Fall D) greift hier nicht, weil TM cycle_active bereits zurückgesetzt hat und Fall D genau dieses Flag als Bedingung hat.
  9. Dynamic 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. Bei mehreren Instanzen am selben Netzsensor pflegt nur der Gruppen-Leader den Ringpuffer, alle anderen übernehmen seinen Wert. Optionales Trimmen (stddev_trim_count, Standard 0): schließt die N höchsten UND die N niedrigsten Einzelmesswerte im Fenster vor der Berechnung aus — pro Seite, nicht insgesamt (N=5 → 10 Samples ausgeschlossen). Trennt kurze, seltene Lastspitzen (z. B. Kompressor-/Pumpen-Anlaufstrom) von echter Dauerunruhe anhand des betroffenen Fensteranteils, nicht der Ereignisdauer — ein Puls, der nur eine Minderheit der Samples füllt, fällt komplett raus, eine Schwankung über den Großteil des Fensters bewegt den Offset weiterhin. Wert wird als Anzahl Samples angegeben, nicht als Prozent, weil die Sample-Zahl im Fenster von der Update-Rate des Netzsensors abhängt. Effekt live vergleichbar über den ungetrimmten Rohwert (Attribut stddev_raw am Netz-Stabw.-Sensor, bzw. „StdDev (roh)" im Panel).
  10. Adaptive Wartezeit. Liest die Ist-Leistung wiederholt 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- und Netz-Laden → 0 A, Zone 1 → Max-Entladestrom, Zone 2 und Ruhe in Modus '1' → 0 A, sonst — Ruhe in Modus '0', Tarifsperre — Max-Entladestrom, damit das Gerät beim Verlassen der Fernsteuerung nicht mit 0 A stehen bleibt) 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. Beim Ausschalten erzwingt die Integration Ausgang → 0 W, Entladestrom → 40 A (Gerätestandard) und Modus '0' — unabhängig vom Schalter Ruhezustand in Modus 1 (Punkt 15), damit das Gerät die Fernsteuerung verlässt — innerhalb desselben Locks wie der Regelzyklus, damit kein laufender Zyklus den Disabled-Befehl überschreibt. Danach blockt der Guard jeden weiteren Schreibbefehl, auch den Entladestrom-Abgleich aus Punkt 12. Der Sensor „Betriebsmodus“ wird explizit auf disabled_regulation_off gesetzt. Die Flags cycle_active und tariff_charge_active bleiben bewusst erhalten, damit ein Aus/Ein-Wechsel den Regelkontext nicht verliert. Nach dem Wiedereinschalten fängt die Falltabelle jede Lage, die daraus entstehen kann: eine Lade-Session, deren Option inzwischen aus ist, beenden Fall HT bzw. H; einen Widerspruch zwischen Modus und Lade-Flags räumt Fall I. Gilt identisch für Switch-Entität und Panel-Button, und ebenso für Fall ZE, der die Regelung am Ziel-SOC des Zielladens abschaltet. Bei eingeschaltetem Zielladen schaltet „Regelung aktiv = An“ zugleich Zielladen und Netz-Laden aus.
  14. Ausgangs-Stillstandserkennung. Steht der Sollwert am oberen Limit (dynamic_max) oder im Totband darunter und besteht der Netzfehler in dieselbe Richtung fort, kann die Entladeregelung nicht weiter hochregeln und schreibt nicht mehr. Bleibt der Wechselrichter in genau diesem Zustand stehen, ohne den Modus zu wechseln, erhält er von sich aus keinen neuen Befehl mehr — Fall D greift nicht, da er einen Modus außerhalb '1'/'3' voraussetzt. Die Regelung prüft deshalb in diesem gesättigten Zustand die Ist-Leistung gegen den geschriebenen Sollwert: weicht sie um mehr als 5 % ab und steht der Messwert dabei länger als fünf Minuten unverändert, wird der Sollwert neu geschrieben und unter Letzte Aktion protokolliert. Hält die Abweichung an, wird der Wechselrichter nach weiteren fünf Minuten aus dem Regelmodus genommen — Ausgangsleistung 0 W, Timer-Toggle, Modus Disabled — und im nächsten Zyklus von Fall D regulär zurückgeholt (Timer-Toggle + Modus '1'), woraufhin die Entladeregelung wieder hochläuft. Das ist derselbe Weg, der einen aus dem Tritt geratenen Wechselrichter auch sonst wiederherstellt, und erzeugt eine echte Modus-Flanke statt den bestehenden Modus auf sich selbst zu schreiben. Zusätzlich erscheint eine Fehlermeldung im Status-Tab; das wiederholt sich im selben Abstand, bis der Ausgang dem Limit wieder folgt. Die Dauer stammt aus dem Zeitstempel der letzten Wertänderung des Ist-Sensors — er steht damit für „Wert seit dann unverändert" und macht eine eigene Uhr überflüssig; ein Ist-Sensor, der um den abweichenden Wert rauscht, löst entsprechend nicht aus. Die Prüfung gilt ausschließlich für diesen gesättigten Entlade-Zustand, mit PI-Regler wie mit Stellwertrechnung: Zone 0, AC Laden und Tarif-Laden halten den Ausgang bewusst unterhalb ihres jeweiligen Limits und sind ausgenommen, ebenso die Totbänder. Ohne konfigurierten oder verfügbaren Ist-Leistungssensor findet keine Prüfung statt. Gegenstück zur Nullungs-Bestätigung aus Punkt 10 — dort wird eine kommandierte 0 verifiziert, hier eine kommandierte Leistung.
  15. Ruhezustand. Alle Übergänge, in denen die Regelung ruht — Fall B, C, F, TM, ZB, Lade-Ende (HT, H, HN) und Fall I ohne aktiven Zyklus, und Stillstands-Recovery aus Punkt 14 — schreiben Ausgangsleistung 0 W und den Ruhemodus. Standard ist Modus '0'; Modus '0' wird sonst nur von Regelung aktiv = Aus (Punkt 13) geschrieben. Mit dem Schalter Ruhezustand in Modus 1 im Debug-Tab ist der Ruhemodus stattdessen '1' mit 0 W, Modus '0' wird dann nur noch beim Ausschalten der Regelung geschrieben. Die Ruhe in Modus '1' trägt ein eigenes Zustandsflag: in ihr läuft kein PI, die Instanz zählt nicht zum Entlade-Pool der Verteilung, Fall C, F und TM lösen nicht erneut aus, und Fall E, A, D, 0A, G und GT holen sie zurück wie aus Modus '0'. Der Betriebsmodus-Sensor zeigt rest_discharge. Gedacht für Geräte, die in Modus '0' trotz der App-Einstellungen nicht laden. Nicht empfohlen: das Gerät verlässt die Fernsteuerung nur noch bei ausgeschalteter Regelung. Umschalten wirkt im nächsten Zyklus — eine ruhende Instanz wechselt dann einmal in den anderen Ruhemodus.

Erzeugte Entitäten

Die Integration erzeugt automatisch folgende Entitäten unter dem Gerät Solakon ONE:

Alle Entitätsnamen kommen aus den Übersetzungen und erscheinen in der Sprache von Home Assistant (Deutsch oder Englisch). Die in der Tabelle genannten Entity-IDs gelten für eine deutschsprachige Neuinstallation; bestehende IDs ändern sich durch ein Update nicht, weil sie in der Entitätsregistrierung stehen.

Entität Typ Beschreibung
sensor.solakon_one_betriebszustand Sensor Was die Instanz gerade tut — ein Zustand aus zwölf (siehe unten). Übersetzter Enum-Sensor: der Zustandswert ist ein sprachneutraler Schlüssel, Automationen brechen damit nicht, wenn ein Anzeigetext sich ändert. Attribute: Zone, Gerätemodus, letzter Fall, letzte Aktion, anliegender Fehler, Zeitpunkt des letzten Wechsels
sensor.solakon_one_aktuelle_zone Sensor Aktive Zone (0–3) mit Zusatzattributen
sensor.solakon_one_betriebsmodus Sensor Gerätemodus als übersetzter Enum-Sensor — waiting, disabled, discharge, ac_charge, disabled_regulation_off, unknown
sensor.solakon_one_letzte_aktion Sensor Letzter Logeintrag der Steuerlogik, in der Sprache der Instanz. Sprachneutral auswertbar über das Attribut action_key; die Werte der Meldung stehen als weitere Attribute daneben
sensor.solakon_one_netz_standardabweichung Sensor Netz-Stabw. in W über das konfigurierte Fenster (getrimmt, falls konfiguriert); Rohwert als Attribut stddev_raw
sensor.solakon_one_aktiver_fall Sensor Zuletzt ausgeführter Fall als übersetzter Enum-Sensor — der Zustandswert ist der kleingeschriebene Fall-Schlüssel (0a, a, b, … tm, ze, gn, hn, zb), die Anzeige kommt aus den Übersetzungen
sensor.solakon_one_pi_integral Sensor Aktueller I-Anteil des PI-Reglers
sensor.solakon_one_uberschussleistung Sensor Verwertbarer PV-Überschuss in W — min(aktuell geltendes Hard-Limit, PV-Leistung) − Ausgangsleistung, geklemmt auf ≥0. Zeigt die Leistung, die über das aktuelle Hard-Limit oder die verfügbare Sonne hinaus nicht mehr sinnvoll ausgegeben werden kann, ohne den Akku zu belasten — z. B. für eine Automation, die bei Überschuss einen Zusatzverbraucher schaltet
switch.solakon_one_regelung_aktiv Switch Hauptschalter — aktiviert/deaktiviert den Schreibteil
switch.solakon_one_tarif_steuerung_aktiv Switch Tarif-Steuerung ein/aus — derselbe Schalter wie im Tarif-Tab des Panels, aus Dashboard, Skript und Automation heraus bedienbar. Beim Ausschalten endet eine laufende Tarif-Lade-Session im nächsten Regelzyklus (Fall HT)
switch.solakon_one_zielladen Switch Zielladen ein/aus — derselbe Schalter wie im Zielladen-Tab. Gekoppelt mit „Regelung aktiv“, siehe Zielladen
switch.solakon_one_netz_laden Switch Netz-Laden des Zielladens ein/aus — lädt während des Aufladens sofort mit der Netz-Ladeleistung; geht mit dem Ende des Zielladens aus
number.solakon_one_ziel_soc Number Ziel-SOC des Zielladens (10–100 %) — derselbe Wert wie im Zielladen-Tab. Wirkt im Aufladen sofort, in der Entladepause erst nach erneutem Einschalten von Zielladen
number.solakon_one_netz_ladeleistung Number Netz-Ladeleistung (100–1200 W) — derselbe Wert wie im Zielladen-Tab
binary_sensor.solakon_one_entladezyklus_aktiv Binary Sensor Internes Flag Zyklus
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_netz_laden_aktiv Binary Sensor Flag Netz-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.

Betriebszustand

Der Zustand wird aus den Zustandsflags abgeleitet, nicht aus dem zuletzt ausgeführten Fall. Der erste zutreffende gewinnt:

# Schlüssel Anzeige Gilt wenn
1 disabled Regelung inaktiv Hauptschalter aus, Zielladen aus
2 discharge_pause Entladepause Hauptschalter aus, Zielladen an — nach Fall ZE oder von Hand
3 blocked Regelung blockiert Zyklus bricht ab — Kernsensor (Netz, PV, Ist-Leistung, Leistungssollwert, SOC) fehlt, ist nicht verfügbar oder liefert keine Zahl, oder SOC-Grenzen unplausibel, Grund in last_error
4 target_charging Zielladen: Aufladen Zielladen an, SOC unter dem Ziel-SOC — auch während Netz-, Tarif- oder AC-Laden
5 exporting Surplus Zone 0 aktiv
6 tariff_charging Tarif-Laden Lade-Session bei günstigem Preis
7 ac_charging AC-Laden Lade-Session Zone 1
8 discharge_locked Entladung gesperrt (Tarif) Preis unter Teuer-Schwelle, keine Lade-Session, kein Überschuss
9 night_off Nachtabschaltung Nachtabschaltung greift
10 battery_supply Batteriebetrieb Zyklus aktiv — gilt auch, wenn der PI-Ausgang gerade auf 0 steht
11 safety_stop Sicherheitsstopp (SOC-Minimum) Zone 3 — SOC auf oder unter der Zone-3-Schwelle, Modus 0, Ausgangsleistung 0 W
12 pv_direct PV-Direktnutzung sonst — Zone 2 bei Tag, Wechselrichter auf PV-Vorrang, Ausgangsleistung 0

Sprache

Entitätsnamen und die Zustände der drei Enum-Sensoren (Betriebszustand, Aktiver Fall, Betriebsmodus) übersetzt Home Assistant selbst — sie folgen der Sprache des angemeldeten Benutzers. Zonen-Label, Modustext, letzte Aktion und Fehlermeldungen kann Home Assistant nicht übersetzen, weil sie Attribute bzw. Panel-Inhalte sind; sie werden von der Integration gerendert und folgen der Sprache der Home-Assistant-Instanz (Einstellungen → System → Allgemein). Weicht die persönliche Sprache eines Benutzers davon ab, erscheinen diese Texte in der Instanzsprache.

Für Automationen sind die sprachneutralen Schlüssel die richtige Quelle: der Zustandswert der Enum-Sensoren und das Attribut action_key der letzten Aktion.

Abgrenzung zu „Aktiver Fall": Der Fall-Sensor hält den zuletzt ausgeführten Übergang — er ist Diagnose-Historie und wird nicht zurückgesetzt, wenn der Zustand endet. Der Betriebszustand beschreibt, was gerade gilt. Für Automationen ist der Betriebszustand die richtige Quelle; die Übersicht des Panels zeigt seit dieser Version ihn statt des Falls, der Status-Tab führt den Fall weiterhin.


FAQ

Integration oder Blueprint — was soll ich nehmen? Die Integration, wenn du neu anfängst: kein Helfer-Entitäten- und Script-Gerüst, Konfiguration im Panel statt in YAML, Multi-Instancing und Dynamic Offset schon eingebaut. Die Blueprints bleiben gepflegt und sind die bessere Wahl, wenn du eine laufende Installation hast, die du nicht anfassen willst. Parallelbetrieb auf demselben Wechselrichter geht nicht — beide schreiben auf dieselbe Fernsteuerungs-Entität.

Ich habe keine PV-Panels am Solakon angeschlossen — worauf muss ich achten? Der Betrieb als reiner AC-Speicher (eigene PV-Anlage am Hausnetz, nichts am DC-Eingang des Geräts) funktioniert, aber fünf Funktionen hängen am geräteeigenen Solar-Sensor und verhalten sich dann anders:

  • Überschuss (Zone 0) aus lassen. Zone 0 rechnet ausschließlich mit der PV-Leistung des Geräts gegen den Hausverbrauch; ohne eigene Panels kann sie nicht eintreten. Sie hat aber Vorrang vor AC Laden — solange der Überschuss-Modus aktiv ist, startet AC Laden nicht.
  • Surplus-Forecast-Erzwingung und Austritts-Sperre hängen ebenfalls an Zone 0 und bleiben wirkungslos.
  • Nachtabschaltung aus lassen. Sie prüft PV < PV-Ladereserve — bei dauerhaft 0 W ist die Bedingung immer erfüllt und Zone 2 dauerhaft gesperrt.
  • Nacht-Offset aus lassen. Er schaltet bei PV < PV-Ladereserve — bei dauerhaft 0 W gilt er immer statt des Zone-1-Offsets.
  • Periodischen Trigger einschalten. Die Regelschleife läuft sonst nur auf Sensor-Änderungen, und von den schnell wechselnden Quellen bleibt ohne eigene PV nur der Netzsensor. Ohne periodischen Trigger reagiert die Regelung auf Lastsprünge entsprechend träge.

Zone 2 gibt in diesem Aufbau folgerichtig 0 W aus — ihr Ausgang ist auf PV − PV-Ladereserve gedeckelt. Geladen wird über AC Laden oder Tarif-Laden.

Die Anlage zieht dauerhaft Strom aus dem Netz, obwohl geregelt wird. Eine bekannte Ursache ist die Solakon-App: Läuft sie parallel, kann sie ihre eigene Standard-Ausgangsleistung zurückschreiben und den Regler überschreiben. Im Verlauf sieht das nach Sägezahn aus — der Ausgang läuft sauber herunter und springt periodisch wieder hoch. Abhilfe: Standard-Ausgangsleistung in der App auf 0 W oder einen 0-W-Zeitplan über 24 h setzen (siehe Voraussetzungen).

Der SOC ist unter die Zone-1-Schwelle gefallen, der Akku entlädt aber weiter. So ist es gedacht. Die SOC-Schwellen sind keine Zustandsgrenzen, sondern Eintritts- bzw. Austrittsbedingungen mit einem breiten Hystereseband dazwischen: Die Zone-1-Schwelle startet den Zyklus (Fall A), beendet wird er ausschließlich von der Zone-3-Schwelle (Fall B). Ohne diesen Abstand würde der Zyklus an der Zone-1-Schwelle dauernd ein- und ausschalten. Zone 2 ist entsprechend kein Zustand, in den man beim Unterschreiten der Zone-1-Schwelle fällt, sondern das Verhalten, solange kein Zyklus läuft.

Der Akku entlädt nachts, obwohl keine Sonne scheint — ist das ein Fehler? Nein, gleiche Ursache: Ein einmal gestarteter Zone-1-Zyklus läuft unabhängig von der Tageszeit bis zur Zone-3-Schwelle weiter. Die Nachtabschaltung (Nacht-Tab) greift bei PV < PV-Ladereserve und wirkt ausschließlich auf Zone 2, also auf den zyklusfreien Betrieb. Wie viel der Zyklus nachts ins Netz abgibt, bestimmt der Zone-1-Offset; mit dem Nacht-Offset (Zonen-Tab) gilt bei Dunkelheit ein eigener Wert, etwa positiv statt negativ. Davon zu unterscheiden ist eine dauerhafte Restentladung von rund 10 W: Der Wechselrichter kann nicht vollständig abschalten — Firmware-Eigenschaft, über die Regelung nicht beeinflussbar.

Die Batterie entleert sich zu stark. Der Hebel ist die Zone-3-Schwelle — sie beendet den Zyklus. Die Zone-1-Schwelle anzuheben hilft nicht: sie verzögert nur den Start des nächsten Zyklus und stoppt keinen laufenden.

Was bedeutet das Vorzeichen beim Offset? Der Offset ist der Zielwert am Netzzähler, nicht am Wechselrichter: 0 regelt auf die Nulllinie, +20 hält 20 W Bezug, −20 hält 20 W Einspeisung als Sicherheitsabstand. Beim AC Laden verhindert ein negativer Offset entsprechend, dass aus dem Netz mitgeladen wird.

Warum haben AC Laden und die Entladezonen getrennte Offsets und Regelungen? Weil es zwei verschiedene Regelstrecken sind: Beim Entladen regelt der Wechselrichter, beim AC Laden das Ladenetzteil, dessen Leistung nur mit etwa 34 W/s steigt. AC Laden hat deshalb einen eigenen Offset, ein eigenes Leistungslimit und statt des PI eine Stellwertrechnung auf Basis der Ist-Leistung; die Zonen-Offsets greifen währenddessen nicht.

„Max. Entladestrom Zone 1" in A und „Hard-Limit Z1" in W — was von beidem gilt? Beides, an verschiedenen Stellen: Die Ampere begrenzen den Strom auf der Batterieseite, die Watt den AC-Ausgang, gegen den der PI regelt. Sie schließen sich nicht aus. Bei einem niedrigen Watt-Limit wird die Stromgrenze in der Regel nie erreicht — dann wirkt praktisch nur das Watt-Limit.

Warum steht der Entladestrom in Zone 0 dauerhaft auf 2 A, auch bei PV > 0? Weil der Ausgabepfad sonst gesperrt ist: Bei 0 A gibt das Gerät nichts aus, und bei vollem Akku drosselt der MPPT die PV auf 0 W, sobald kein Batteriestrom fließt. Es braucht also irgendeine Freigabe größer null — 2 A ist dabei ein gesetzter Wert, keine Hardware-Untergrenze: bewusst niedrig gewählt, um die Batterie so wenig wie möglich zu belasten. Es ist eine Obergrenze, kein Sollwert; solange Solar die Ausgangsleistung deckt, fließt daraus praktisch nichts.

Kann ich bei guter Wettervorhersage bevorzugt einspeisen, statt die Batterie mittags vollzuladen? Ja — Surplus-Forecast-Erzwingung im Überschuss-Tab: Liegt die PV-Vorhersage über der eingestellten Schwelle, wird der Zone-0-Eintritt erzwungen und der Überschuss geht ins Netz statt in die Batterie. Bei schlechter Vorhersage bleibt es beim normalen Laden. Setzt eigene Panels am DC-Eingang voraus — ohne sie kann Zone 0 nicht eintreten.

Wie schalte ich bei Überschuss einen Verbraucher zu? Über sensor.solakon_one_uberschussleistung. Er zeigt max(0, min(Hard-Limit, PV) − Ausgangsleistung), also den Spielraum zwischen dem, was gerade ausgegeben werden könnte, und dem, was tatsächlich ausgegeben wird — gedacht als Auslöser für eine eigene Automation (Smart Plug, Boiler, Wallbox).

Wie lagere ich die Batterie über den Winter ein? Mit dem Zielladen: Ziel-SOC einstellen (Standard 70 %), Ladequellen wählen und Zielladen einschalten. Am Ziel schaltet die Integration die Regelung ab, die Batterie bleibt in der Entladepause, auch über Neustarts. Liegt der SOC beim Einschalten schon über dem Ziel, beginnt die Entladepause im nächsten Regelzyklus. Im Frühjahr Zielladen ausschalten oder „Regelung aktiv“ einschalten — beides stellt den normalen Betrieb her.

Kann ich vor einem Unwetter die Batterie vollladen? Ja, über eine eigene Automation mit number.solakon_one_ziel_soc, number.solakon_one_netz_ladeleistung und den Schaltern switch.solakon_one_zielladen und switch.solakon_one_netz_laden. Beispiel mit einem Warn-Sensor (etwa aus der DWD-Integration):

automation:
  - alias: Unwetter-Vorsorge Start
    triggers:
      - trigger: numeric_state
        entity_id: sensor.dwd_aktuelle_warnstufe
        above: 2
    actions:
      - action: number.set_value
        target:
          entity_id: number.solakon_one_ziel_soc
        data:
          value: 100
      - action: number.set_value
        target:
          entity_id: number.solakon_one_netz_ladeleistung
        data:
          value: 800
      - action: switch.turn_on
        target:
          entity_id:
            - switch.solakon_one_zielladen
            - switch.solakon_one_netz_laden
  - alias: Unwetter-Vorsorge Ende
    triggers:
      - trigger: numeric_state
        entity_id: sensor.dwd_aktuelle_warnstufe
        below: 3
    actions:
      - action: switch.turn_off
        target:
          entity_id: switch.solakon_one_zielladen

Zielladen aus schaltet die Regelung wieder ein und Netz-Laden aus. Ohne Netz-Laden lädt die Instanz nur über PV und die zugeschalteten Ladequellen.

Läuft das Zielladen schon, etwa die Winterpause mit 70 %, gilt ein neuer Ziel-SOC im Aufladen sofort, in der Entladepause aber erst nach erneutem Einschalten. Die Start-Automation schaltet dann zuerst switch.solakon_one_zielladen aus, setzt den Ziel-SOC und schaltet Zielladen und Netz-Laden wieder ein — Zielladen aus schaltet auch Netz-Laden aus.

Ich habe mehrere Smartmeter für getrennte Stromkreise. Instanzen werden automatisch nach ihrem Netz-Leistungssensor in Netzgruppen sortiert. Jede Gruppe hat ihre eigene, unabhängige Leistungsverteilung; Instanzen an verschiedenen Zählern beeinflussen sich nicht.


Fehlerbehebung

Mein Netz-Leistungssensor lässt sich bei der Einrichtung nicht auswählen Die Auswahl filtert auf device_class: power. Template- und Hilfssensoren, die erst eine Summe bilden (z. B. die drei Phasen eines Shelly 3EM), tragen diese Geräteklasse häufig nicht und erscheinen deshalb nicht in der Liste. Im Template-Sensor device_class: power und unit_of_measurement: W ergänzen, danach ist er auswählbar.

Zone 1 aktiv, aber die Instanz entlädt nicht („Batterieentladung gesperrt — Schwesterinstanz lädt“) Eine andere Instanz am selben Netzsensor lädt gerade (AC Laden, Tarif-Laden oder Netz-Laden). Bis dahin speist diese Instanz nur PV − Reserve ein, damit keine Batterie die andere lädt. Endet das Laden, entlädt sie wieder normal.

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 Der Reihe nach prüfen: Ist Zone 0 (Surplus) aktiv? Die blockiert AC Laden. Ist AC Laden im Tab aktiviert? Liegt (Grid + ΣOutput_entladend) unter min(Offset, 0) − Hysterese — je Instanz zählt das Größere aus Ist-Leistung und Ausgangsleistung, im Multi-Instancing-Betrieb auch alle entladenden Schwester-Instanzen? Ist der SOC unter dem Ladeziel? Das Status-Flag „AC Laden aktiv“ zeigt das Ergebnis.

AC Laden bricht sofort wieder ab 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 Zuerst die Fehlermeldung im Status-Tab prüfen — liefert der Preis-Sensor keine Zahl oder ist er nicht verfügbar, ist die Tarif-Funktion abgeschaltet. Günstig-Schwelle muss über dem aktuellen Preis liegen. Prüfen ob Surplus aktiv ist — blockiert Tarif-Laden.

Tarifsperre greift nicht Zuerst die Fehlermeldung im Status-Tab prüfen (Preis-Sensor ohne Zahl oder nicht verfügbar schaltet die Tarif-Funktion ab). 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. Surplus darf nicht aktiv sein.

Surplus-Forecast, Austritts-Sperre, PV-Vorhersage oder Nacht-Forcierung greift nicht Zuerst die Fehlermeldung im Status-Tab prüfen. Fehlt der Sensor, ist er nicht verfügbar oder liefert er keine Zahl, ist die Funktion abgeschaltet — der Validierungspunkt am Sensorfeld steht dann auf gelb oder rot. Sonst Schwelle und Einheit des Vorhersage-Sensors prüfen.

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

Dynamic Offset kehrt nachts/in Ruhephasen nicht auf das Minimum zurück (Multi-Instancing) Volatilitäts-Faktor senken (1.0 statt 1.5) und Rausch-Schwelle deutlich unter den Min. Offset setzen. Der Ringpuffer ist bei mehreren Instanzen am selben Netzsensor gruppengemeinsam, die Historie also bereits abgeglichen.

Dynamic Offset kehrt trotz Einzelbetrieb nicht auf das Minimum zurück (periodische Haushaltslast) Kühlgeräte oder Pumpen mit wiederkehrendem Anlaufstrom füllen jedes Stabw.-Fenster mit kurzen Ausschlägen — die Netz-Stabw. bleibt strukturell erhöht, obwohl zwischen den Pulsen Ruhe herrscht. Kein Fehlverhalten. Abhilfe: stddev_trim_count im Dyn.-Offset-Tab in kleinen Schritten erhöhen und die Wirkung gegen den Rohwert („StdDev (roh)“) vergleichen. Zu hohe Werte filtern auch echte Dauerunruhe weg.

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. Die betroffene Instanz friert auf ihrem letzten Wert ein statt sichtbar zu scheitern — sie wirkt gesund, ist aber ungeregelt. Abhilfe: Config-Entry neu laden (Einstellungen → Geräte & Dienste → Instanz → drei Punkte → Neu laden).

SOC der Instanzen läuft bei mehreren Solakons auseinander Bei unterschiedlich großen Batterien muss der Verteilungs-Modus auf Kapazitätsgewichtet stehen — „SOC-gewichtet“ rechnet bewusst ohne Kapazität und lässt ungleiche Batterien auseinanderlaufen. Danach die Kapazitätssensoren prüfen: ein roter Validierungspunkt heißt, die Entity existiert nicht (meist ein Tippfehler). Ohne gültige Kapazität bei allen Instanzen degradiert der Modus automatisch, mit Meldung im Status-Feld.

Pool erreicht „Gesamte Max. Ausgangsleistung" nicht, obwohl der Verbrauch das rechtfertigen würde Prüfen, ob die Instanzen unterschiedliche Hard-Limits haben (Zonen-Tab) — eine Instanz unter ihrem rechnerischen Anteil wird gekappt, der Rest per Wasserfüllverfahren weitergereicht. Bleibt der Pool trotzdem darunter, reicht die Summe der Hard-Limits selbst nicht aus.

SOC-Umschaltung rotiert häufiger als die eingestellte Divergenz-Schwelle erwarten lässt Normal, wenn eine Instanz zwischendurch in Zone 0 war — die Rotations-Baseline wird beim Verlassen neu verankert. Rotiert es darüber hinaus zu häufig, Divergenz-Schwelle im Verteilungs-Tab erhöhen.


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

26 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages