!Blick in das geöffnete Innere eines Solar-Wechselrichters mit Platinen und Kabeln

Am 17. Oktober 2026 eröffnete ein Nutzer im GitHub-Repository von Home Assistant ein Issue mit dem Titel „Kostal Plenticore G3 - Battery Manual Charge switch missing after firmware 3.07.03.27419“. Seine Automatisierung, die den Speicher bei günstigem Strom aus dem Netz lädt, lief weiter. Die Bedingungen wurden wahr. Nur der Schalter, den sie umlegen sollte, war verschwunden. Im Log stand: „API Error: Module or setting not found [404 - None]“. Drei Tage später meldete sich ein zweiter Nutzer mit einem Plenticore M G3, gleiche Firmware, gleiche Fehlermeldung. Bei ihm fehlten außerdem „Battery Strategy“ und die beiden Schalter für das Schattenmanagement. Die normalen Sensoren funktionierten, nur die Steuerung war weg.

Das Issue zeigt ziemlich genau, wie fragil die Kostal-Einbindung an einer Stelle ist: Lesen geht fast immer, Schreiben hängt an der Firmware. Es gibt zwei Wege, die offizielle Integration und Modbus. Welcher wann taugt, steht hier.

Der erste Weg: die offizielle Integration

Home Assistant bringt seit Version 2021.5 die Integration „Kostal Plenticore Solar Inverter“ mit. Laut Dokumentation spricht sie die REST-API an, also dieselbe Schnittstelle, die auch die Weboberfläche des Wechselrichters benutzt. Deshalb brauchen Sie dasselbe Passwort wie für den Login im Browser, das Anlagenbetreiber-Passwort. Die Integration läuft lokal (IoT-Klasse „Local Polling“), eine Cloud ist nicht beteiligt. Hinter ihr steckt die Python-Bibliothek pykoplenti, die der Code-Owner @stegm pflegt.

Die Einrichtung ist unspektakulär. Einstellungen, Geräte & Dienste, Integration hinzufügen, nach Kostal suchen, IP-Adresse und Passwort eintragen. Das Feld „Service Code“ lassen Sie leer. Es ist für den Installateurzugang gedacht, dazu unten mehr.

Die erste Überraschung folgt danach. Die Dokumentation sagt es ausdrücklich: Die Integration deaktiviert die meisten Sensoren standardmäßig. Wer nach der Einrichtung eine fast leere Geräteseite sieht, hat nichts falsch gemacht. Unter dem Gerät, bei „Entitäten“, müssen Sie die gewünschten Sensoren selbst einschalten.

Welche Sensoren es gibt

Die Dokumentation listet die Prozessdaten in einer langen Tabelle. Die wichtigsten Gruppen:

  • Leistung in Watt: Solar Power (Summe aller DC-Strings, Batterie eingerechnet), Grid Power (positiv aus dem Netz, negativ ins Netz), Home Power, Home Power from PV, from Battery und from Grid, AC Power und Battery Power.
  • Je String bis zu drei Mal: DC1 bis DC3 Power, Voltage und Current. Hat Ihr Gerät nur zwei Strings, sind die Werte für den dritten leer.
  • Batterie: Battery SoC in Prozent, Battery Cycles, PV to Battery Power.
  • Energiezähler in kWh jeweils für Tag, Monat, Jahr und Total: Energy Yield, Energy PV1 bis PV3, Home Consumption (aufgeteilt nach PV, Batterie und Netz), Battery Charge from Grid, Battery Charge from PV, Battery Discharge und Energy to Grid.
  • Quoten: Autarky und Own Consumption Rate, ebenfalls pro Zeitraum.
Beim Energy to Grid steht ein Hinweis in der Doku, der oft überlesen wird: Der Wechselrichter liefert die eingespeiste Energie nicht direkt, die Bibliothek pykoplenti errechnet sie als „virtuelle“ Prozessdaten.

Was ins Energie-Dashboard gehört

Die Dokumentation empfiehlt für das Energie-Dashboard diese Zuordnung:

DashboardSensor
NetzbezugHome Consumption from Grid Total
SolarproduktionEnergy PV1 Total, Energy PV2 Total, Energy PV3 Total
BatteriesystemeBattery Discharge Total, Battery Charge from PV Total
Sie nehmen also die Zähler der einzelnen Strings und nicht einen einzigen Gesamtwert. Das ist etwas mühsamer, aber die Zähler sind monoton steigende Totalwerte und genau dafür gemacht. Dazu der Hinweis der Doku: Ein Teil der Energie wird auf der DC-Seite gemessen, ein Teil auf der AC-Seite. Die Summen weichen deshalb leicht voneinander ab, die Differenz sind die Wandlungsverluste. Wie das Dashboard grundsätzlich aufgebaut wird und was bei Statistikfehlern hilft, steht im Artikel Home Assistant Energy Dashboard einrichten.

Wie aktuell die Werte sind

Im Quellcode der Integration stehen zwei Abfrageintervalle: Die Prozessdaten in sensor.py werden alle 10 Sekunden geholt, die Einstellungswerte für Number, Select und Switch in 30-Sekunden-Takten. Die Dokumentation nennt für die Einstellungswerte übrigens fünf Minuten, im Code stehen aber 30 Sekunden.

Das ist schnell genug für Leistungswerte. Bei den Energiezählern bremst der Wechselrichter selbst. Im September 2025 beschwerte sich ein Nutzer in Issue #152455, die Energiewerte kämen nur auf eine Nachkommastelle gerundet an, für 5-Minuten-Grafiken zu grob. Stegm prüfte die API und fand etwas anderes: Er fragte Statistic:EnergyHome:Year mehrfach ab, und der Wert blieb mehrere Minuten identisch, bis er plötzlich sprang (von 9.580.997 auf 9.581.356 Wh). Der Fragesteller bestätigte später, der Wechselrichter aktualisiere seine Energiestatistik etwa alle fünf Minuten. Mehr Nachkommastellen hätten also nichts gebracht. Seine Lösung: Für feine Verlaufsgrafiken die Leistungssensoren statt der Energiezähler verwenden und deren Mittelwert-Statistik auswerten. Das Issue wurde Ende September 2025 geschlossen.

Steuern über die Integration, und was der Installateurzugang damit zu tun hat

Neben den Sensoren bietet die Integration einige Stellgrößen:

EntitätTypFunktion
Battery min SocNumberMindest-Ladestand der Batterie
Battery min home consumptionNumberMindest-Hausverbrauch für die Batterie
Battery dynamic SoCSelectDynamischer SoC
Battery smart controlSwitchintelligente Batteriesteuerung
Battery strategySwitchStrategie „Automatisch“ oder „Automatisch wirtschaftlich“
Shadow managementSwitchSchattenmanagement je DC-String
Battery manual chargeSwitcherzwingt Laden der Batterie aus dem Netz
Der letzte Eintrag ist der heikle. Laut Dokumentation gibt es „Battery manual charge“ nur mit Installateurzugang. Dafür tragen Sie als Passwort den Master Key ein und füllen das Feld „Service Code“. Die Doku warnt in einem eigenen Kasten, das könne die Garantie gefährden und das Gerät beschädigen, wenn Einstellungen falsch gesetzt werden. Ich halte diese Warnung für berechtigt. Wer den Master Key nicht hat, bekommt ihn nur vom Installateur, und der hat gute Gründe, ihn nicht herauszugeben. Wer einen dynamischen Stromtarif nutzt und den Speicher gezielt in günstigen Stunden laden will, sollte vorher klären, ob das im Rahmen der Garantie liegt. Zu den Tarifen selbst: Dynamische Stromtarife 2026 im Vergleich.

Die Strategie-Einstellung hat einen schönen Haken im Detail. Eingeschaltet entspricht „Battery strategy“ dem Modus „Automatisch“, den Kostal für schneearme Regionen empfiehlt. Ausgeschaltet gilt „Automatisch wirtschaftlich“, bei dem der Wechselrichter die Batterie abschaltet, wenn länger zu wenig PV-Energie zum Laden da ist, gedacht für schneereiche Gegenden.

Plenticore G3: wenn die Firmware die API verschiebt

Zurück zum Issue vom Oktober. Der Fall wiederholt sich nämlich. Im Dezember 2025 öffnete derselbe Nutzer, der jetzt das Firmware-Issue meldete, bereits Issue #158199 („Missing entities with Kostal Plenticore G3“). Damals fehlten „Battery Manual Charge“ und „Battery Strategy“ auf einem G3 mit Firmware 3.06.01.20869, und das Log zeigte einen API-Fehler 500. Stegm baute eine Korrektur in der Bibliothek pykoplenti, stellte sie als Custom Component bereit, und ein Tester bestätigte am 14. Januar 2026, dass es auf dem G3 funktioniert. Das Issue wurde am 20. Januar 2026 geschlossen.

Im Oktober 2026 war es dann wieder so weit, diesmal mit 404 statt 500. Der Nutzer vermutet nach den Release Notes zur Firmware 3.07.03.27419 eine Änderung der API. Er zitiert darin unter anderem: „Fixed: External battery control does not react to commands on Modbus TCP register 1024“ und eine geänderte Smart-AC-Link-Funktion. Ob das die Ursache ist, hat im Issue niemand bestätigt. Stegm schrieb am 20. Oktober, das könne mit dem offenen Pull Request #187539 zusammenhängen. Der passt den „API-Payload“ für neuere Firmware an: Einzel- und Tuple-Abfragen werden als Listen gesendet, um 404- und 500-Fehler zu vermeiden. Stand 22. Oktober war er noch nicht gemergt.

Praktisch heißt das: Die Integration nutzt die Weboberfläche-API, und die ist keine dokumentierte Schnittstelle. Kostal darf sie mit jedem Update ändern. Die reinen Lesesensoren sind davon bisher nicht betroffen, die Schalter schon. Meine Empfehlung: Spielen Sie Firmware-Updates am G3 nicht am gleichen Tag ein, an dem eine Automatisierung Ihren Speicher laden soll. Und bauen Sie die Automatisierung so, dass sie eine nicht verfügbare Entität erkennt (unavailable) und Ihnen eine Nachricht schickt, statt still nichts zu tun.

Ein zweiter G3-Stolperstein stammt aus Issue #166779 vom März 2026: Ein Nutzer legte einen neuen Plenticore G3 an, bekam nach langer Wartezeit „Unknown error“, und die Entitäten erschienen mit dem Namen {"Hostname":"PlenticoreG3L"} als Präfix. Das Issue wurde im September 2026 geschlossen. Falls Sie bei der Ersteinrichtung ein Timeout bekommen, rufen Sie im Browser http:///api/v1/ auf. Das ist die Frage, die der Code-Owner in diesem Issue stellte, und sie trennt Netzwerkprobleme von Integrationsproblemen.

Der zweite Weg: Modbus TCP

Wer Steuerbefehle braucht, die nicht von der Weboberfläche abhängen, nimmt Modbus. Kostal beschreibt es in der Bedienungsanleitung des Plenticore G3 unter Einstellungen, „Modbus / Sunspec (TCP)“: Dort aktivieren Sie das Protokoll, und der Wechselrichter nennt Port 1502 und Parameter-ID 71, die in der Modbus-Welt als Unit-ID auftaucht. Zusätzlich lässt sich die Bytereihenfolge wählen. Kostal schreibt, die Geräte und die meisten Partneranwendungen nutzten „little-endian“, in Einzelfällen müsse man auf „big-endian“ umstellen.

In der Home-Assistant-Konfiguration sieht der Hub dann so aus:

modbus:
  - name: kostal
    type: tcp
    host: 192.168.1.50
    port: 1502

Die Slave-ID tragen Sie bei den einzelnen Sensoren ein (slave: 71). Dazu kommt der Typ je Register. Kostal gibt viele Werte als 32-Bit-Float an, Home Assistant liest das mit data_type: float32. Wie so ein Modbus-Setup in der Praxis aussieht, zeigt das Marstek-Venus-E-Tutorial mit lokalem Modbus, die Grundlagen sind dieselben.

Register, die sich lohnen

Die vollständige Registerbeschreibung („Modbus/SunSpec Interface“) veröffentlicht Kostal als eigenes PDF für Installateure. Als Gedächtnisstütze taugt das Skript kostal-modbusquery von Kilian Knoll auf GitHub, das die Kostal-Tabelle (laut Kommentar Stand 17. September 2020) abbildet. Einige Beispiele daraus:

RegisterBedeutungTyp
100Total DC powerFloat
172Total AC active powerFloat
200Batterie-Strom (minus Laden, plus Entladen)Float
210Ladezustand (SoC)Float
214BatterietemperaturFloat
1024Batterie-Ladeleistung AC, Sollwert (nur schreibbar)S16
1034Ladeleistung DC, Sollwert absolutR32
1038 / 1040max. Lade- bzw. EntladeleistungU32
1042 / 1044minimaler bzw. maximaler SoCU32
Prüfen Sie die Werte gegen das PDF Ihrer Firmware. Die Register sind über Jahre gewachsen, und wie die Fehlerberichte zu 1024 zeigen, verhält sich die Firmware nicht in jeder Version gleich.

Externe Batteriesteuerung freischalten

Schreibbefehle an die Batterie nimmt der Wechselrichter nur an, wenn Sie das ausdrücklich erlauben. Nach der Kostal-Dokumentation („Externe Batteriesteuerung über Modbus (TCP)“) so: im Webserver als Installateur anmelden, Batterie, Batterieeinstellungen, bei Batteriesteuerung „Extern über Protokoll Modbus (TCP)“ wählen und speichern.

Kostal beschreibt, was dann passiert: Der Wechselrichter empfängt Lade- und Entladekommandos per Modbus. Das interne Energiemanagement bleibt aktiv, wird aber von den externen Vorgaben übersteuert. Möglich sind Lade- und Entladevorgaben über Strom oder Leistung, in Prozent oder Watt, sowie ein Bereich für minimalen und maximalen SoC. Bleiben die Steuersignale länger aus, kehrt der Wechselrichter zur internen Steuerung zurück. Die Zeitspanne stellen Sie im Webserver ein.

Aus diesem letzten Satz folgt die Regel für jede Automatisierung: Der Sollwert muss regelmäßig erneuert werden. Im Forum heimnetz.de beschrieb ein Nutzer im April 2024, er löse dafür ein Skript alle 15 Sekunden aus, um den Speicher mit Netzstrom zu laden (er hat einen dynamischen Stromanbieter). Dann stoppte das Schreiben mit „unknown Error“, auch ein externes Modbus-Tool bekam trotz offenem Port 1502 und Unit 71 weder Lese- noch Schreibzugriff, nach dem Update auf Version 1.80 eines Plenticore plus G1. Eine Lösung steht im Thread nicht. Er zeigt aber, dass Modbus-Schreibzugriff keine Dauergarantie ist: Firmware-Updates können ihn ändern, genau wie bei der REST-API.

Dazu kommt ein Hinweis aus der Kostal-Beschreibung, den man leicht übersieht: Für die externe Batteriesteuerung soll der Wechselrichter laut Doku per LAN mit dem Internet verbunden sein.

Was ich nehmen würde

  • Nur beobachten, Energie-Dashboard, Auswertungen: die offizielle Integration. Sensoren aktivieren, fertig. Sie ist lokal, pflegeleicht und liefert alle Zähler, die das Dashboard braucht.
  • Den Speicher gezielt steuern, etwa nach Strompreis: Modbus mit externer Batteriesteuerung. Das ist ein Eingriff, den Ihr Installateur freischalten muss. Wer mit Installateurzugang in der Integration arbeitet, geht dasselbe Risiko ein, nur über eine weniger stabile Schnittstelle.
  • Mehrere Verbraucher koordinieren, Wallbox, Wärmepumpe, Speicher: dann lohnt der Blick auf ein übergeordnetes System. evcc mit Wallbox und Tibber erledigt vieles davon, ohne dass Sie Register selbst schreiben.
Die Geschichte vom verschwundenen Schalter hat übrigens eine ruhige Pointe. Die Sensoren des betroffenen Nutzers liefen ungestört weiter, Ladezustand, Energiewerte, Erzeugung. Wer Kostal nur zum Zählen braucht, merkt von Firmware-Wechseln meist nichts. Wer steuert, sollte wissen, dass er auf einer Schnittstelle baut, die dem Hersteller gehört.

Quellen: Dokumentation „Kostal Plenticore Solar Inverter“ auf home-assistant.io; Kostal-Bedienungsanleitung Plenticore G3 (documents.kostal.com), Kapitel „Modbus / Sunspec (TCP)“ und „Externe Batteriesteuerung über Modbus (TCP)“; GitHub-Issues home-assistant/core #187002, #158199, #152455, #166779 und Pull Request #187539; Skript kilianknoll/kostal-modbusquery; Forum heimnetz.de, Thread „MODBUS Problem mit Kostal Plenticore und Home Assistant“.