!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.
pykoplenti errechnet sie als „virtuelle“ Prozessdaten.
Was ins Energie-Dashboard gehört
Die Dokumentation empfiehlt für das Energie-Dashboard diese Zuordnung:
| Dashboard | Sensor |
|---|---|
| Netzbezug | Home Consumption from Grid Total |
| Solarproduktion | Energy PV1 Total, Energy PV2 Total, Energy PV3 Total |
| Batteriesysteme | Battery Discharge Total, Battery Charge from PV Total |
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ät | Typ | Funktion |
|---|---|---|
| Battery min Soc | Number | Mindest-Ladestand der Batterie |
| Battery min home consumption | Number | Mindest-Hausverbrauch für die Batterie |
| Battery dynamic SoC | Select | Dynamischer SoC |
| Battery smart control | Switch | intelligente Batteriesteuerung |
| Battery strategy | Switch | Strategie „Automatisch“ oder „Automatisch wirtschaftlich“ |
| Shadow management | Switch | Schattenmanagement je DC-String |
| Battery manual charge | Switch | erzwingt Laden der Batterie aus dem Netz |
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:// 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:
| Register | Bedeutung | Typ |
|---|---|---|
| 100 | Total DC power | Float |
| 172 | Total AC active power | Float |
| 200 | Batterie-Strom (minus Laden, plus Entladen) | Float |
| 210 | Ladezustand (SoC) | Float |
| 214 | Batterietemperatur | Float |
| 1024 | Batterie-Ladeleistung AC, Sollwert (nur schreibbar) | S16 |
| 1034 | Ladeleistung DC, Sollwert absolut | R32 |
| 1038 / 1040 | max. Lade- bzw. Entladeleistung | U32 |
| 1042 / 1044 | minimaler bzw. maximaler SoC | U32 |
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.
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“.