{"id":13062,"date":"2026-09-18T12:46:00","date_gmt":"2026-09-18T10:46:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13062"},"modified":"2026-10-26T13:25:45","modified_gmt":"2026-10-26T12:25:45","slug":"tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/","title":{"rendered":"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen"},"content":{"rendered":"<p>Ein Modbus-Register ist ein nummerierter Speicherplatz f\u00fcr 16 Bit. SunSpec legt fest, wie Gruppen solcher Register Messwerte und Ger\u00e4teangaben beschreiben. Die Modellkette erlaubt das Auffinden unterst\u00fctzter Datenbl\u00f6cke, statt eine Adresse von einem anderen Wechselrichter zu kopieren. <strong>Erforderlich bleiben die richtige Ger\u00e4tekonfiguration und passende Modelldefinitionen. Nicht jeder Messwert ist auf jedem Wechselrichter verf\u00fcgbar.<\/strong><\/p>\n<p>Dieses Tutorial liest den Strom der Phase A aus dem ganzzahligen Wechselrichtermodell 103. Das Python-Beispiel verwendet die am 24. Oktober 2026 gepr\u00fcfte Schnittstelle von PyModbus 3.16.1 und f\u00fchrt ausschlie\u00dflich Holding-Register-Lesezugriffe aus. Host, Port und Ger\u00e4tekennung sind ger\u00e4tespezifisch. Freischaltung und Registerauswahl richten sich nach der Herstellerdokumentation.<\/p>\n<h2>1. Die Karte mit eindeutiger Adressz\u00e4hlung finden<\/h2><p>Die standardisierten SunSpec-Protokolladressen sind 0, 40000 und 50000, jeweils ab null gez\u00e4hlt. Die ersten beiden Register enthalten <code>0x5375<\/code> und <code>0x6E53<\/code>, zusammen die Zeichen <code>SunS<\/code>. Diese Angaben sind bereits Protokolloffsets.<\/p><p>Handb\u00fccher k\u00f6nnen Offsets ab null, Registernummern ab eins oder traditionelle 4xxxx-Referenzen f\u00fcr Holding-Register verwenden. Eine gedruckte \u201e40001\u201c l\u00e4sst sich deshalb nicht pauschal in 40000 umrechnen. In traditioneller Referenzschreibweise kann 40001 das erste Holding-Register mit Protokolloffset 0 meinen. Dokumentierte Z\u00e4hlweise und gefundene Marke m\u00fcssen zusammenpassen.<\/p><p>Z\u00e4hler und Wechselrichter k\u00f6nnen getrennte Ger\u00e4tekennungen, getrennte Verbindungen oder unterschiedliche Modelle innerhalb einer gemeinsamen Karte verwenden. Weder eine zweite Kennung noch ein bestimmter Auslieferungszustand ist universell. Eine g\u00fcltige Modbus-Antwort beweist allein nicht, dass das beabsichtigte Ger\u00e4t geantwortet hat.<\/p>\n<figure class=\"lw-diagram\"><img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/quality-13062-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" decoding=\"async\" alt=\"SunSpec-Beispielkarte mit Protokolladressen ab null, zwei Register langen K\u00f6pfen und Endmodell; Phasenstrom und gepr\u00fcfter vorzeichenbehafteter Skalierungsfaktor\"><figcaption>Die Beispieladressen gelten nur f\u00fcr diese Modellkette. Namen und Offsets ben\u00f6tigen die passende Modelldefinition.<\/figcaption><\/figure>\n<h2>2. Den Modellk\u00f6pfen folgen<\/h2><p>Nach den beiden Markierungsregistern enth\u00e4lt jeder Kopf eine Modell-ID und eine L\u00e4nge. Die L\u00e4nge z\u00e4hlt die Datenregister nach dem zwei Register langen Kopf. Der n\u00e4chste Kopf liegt deshalb bei <code>aktueller_Kopf + 2 + L\u00e4nge<\/code>. Das Endmodell <code>0xFFFF<\/code> hat L\u00e4nge 0.<\/p><p>Modell-IDs kennzeichnen Datenlayouts. Namen, Einheiten und Punktpositionen stammen jedoch aus den ver\u00f6ffentlichten Modelldefinitionen, nicht aus einem vollst\u00e4ndig vom Ger\u00e4t \u00fcbertragenen W\u00f6rterbuch. Unbekannte Modelle lassen sich anhand der L\u00e4nge \u00fcberspringen; bekannte Modelle ben\u00f6tigen weiterhin einen passenden Decoder.<\/p><ul><li><strong>1:<\/strong> gemeinsame Ger\u00e4teidentifikation.<\/li><li><strong>101\/102\/103:<\/strong> ganzzahlige Wechselrichtermodelle f\u00fcr Einphase, Split Phase und Dreiphasenbetrieb.<\/li><li><strong>111\/112\/113:<\/strong> entsprechende Gleitkommafamilie mit anderem Datenlayout.<\/li><li><strong>160:<\/strong> Erweiterung f\u00fcr mehrere MPP-Tracker; Eingangsgruppen sind nicht pauschal einzelne physische Strings.<\/li><li><strong>201\u2013204:<\/strong> ganzzahlige Z\u00e4hlermodelle f\u00fcr unterschiedliche Anschlussarten.<\/li><\/ul><p>Unterst\u00fctzte Modelle und eine m\u00f6gliche Ganzzahl-\/Gleitkommaauswahl h\u00e4ngen vom Produkt ab. Modell 102 bezeichnet Split Phase, nicht eine beliebige zweiphasige Anlage. Das Beispiel meldet bewusst einen Fehler, wenn nicht genau eine Instanz von Modell 103 vorhanden ist.<\/p>\n<h2>3. Den Phasenstrom konsistent dekodieren<\/h2><p>Alle folgenden Offsets z\u00e4hlen ab null vom ersten Datenregister, ohne ID und L\u00e4nge: <code>A<\/code> liegt bei 0, <code>AphA<\/code> bei 1, <code>AphB<\/code> bei 2, <code>AphC<\/code> bei 3 und <code>A_SF<\/code> bei 4. Beginnen die Daten bei 40071, liegt Phase A bei 40072 und der Skalierungsfaktor bei 40075. Der Adressabstand betr\u00e4gt drei Register.<\/p><p>Der Strom ist vorzeichenlos; der Skalierungsfaktor ist ein vorzeichenbehafteter Zehnerexponent. Rohstrom 1234 und Exponent \u22122 ergeben <code>1234 \u00d7 10^-2 = 12,34 A<\/code>. Ein anderer Exponent ergibt einen anderen Multiplikator. Fehlender Strom <code>0xFFFF<\/code> oder fehlender Skalierungsfaktor <code>0x8000<\/code> d\u00fcrfen nicht zu einem Messwert umgerechnet werden.<\/p>\n<h2>4. Mit Grenzen und Fehlerpr\u00fcfung lesen<\/h2><p>Das folgende Beispiel pr\u00fcft Verbindung, Antwortl\u00e4nge, Modellgrenzen, Endmarke und beide Ung\u00fcltigkeitswerte. Verwendet wird <code>device_id<\/code> entsprechend der dokumentierten PyModbus-Schnittstelle. \u00c4ltere Beispiele mit <code>slave<\/code> ben\u00f6tigen eine Anpassung an die eingesetzte Version.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> pymodbus.client <span class=\"cbb-keyword\">import<\/span> ModbusTcpClient\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> pymodbus.exceptions <span class=\"cbb-keyword\">import<\/span> ModbusException\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">read_words<\/span>(client, address, count, unit):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-number\">1<\/span> &lt;= count &lt;= <span class=\"cbb-number\">125<\/span> <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-number\">0<\/span> &lt;= address &lt;= <span class=\"cbb-number\">65536<\/span> - count:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"Invalid register range\"<\/span>)\n<\/span><span class=\"cbb-line\">    response = client.<span class=\"cbb-function\">read_holding_registers<\/span>(\n<\/span><span class=\"cbb-line\">        address, count=count, device_id=unit\n<\/span><span class=\"cbb-line\">    )\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> response.<span class=\"cbb-function\">isError<\/span>():\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">f\"Modbus error at {address}: {response}\"<\/span>)\n<\/span><span class=\"cbb-line\">    words = response.registers\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">len<\/span>(words) != count <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-function\">any<\/span>(<span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-number\">0<\/span> &lt;= x &lt;= <span class=\"cbb-number\">65535<\/span> <span class=\"cbb-keyword\">for<\/span> x <span class=\"cbb-keyword\">in<\/span> words):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"Incomplete or invalid response\"<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> words\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">find_base<\/span>(client, unit):\n<\/span><span class=\"cbb-line\">    failures = &#91;&#93;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">for<\/span> base <span class=\"cbb-keyword\">in<\/span> (<span class=\"cbb-number\">40000<\/span>, <span class=\"cbb-number\">0<\/span>, <span class=\"cbb-number\">50000<\/span>):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">try<\/span>:\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">read_words<\/span>(client, base, <span class=\"cbb-number\">2<\/span>, unit) == &#91;<span class=\"cbb-number\">0x5375<\/span>, <span class=\"cbb-number\">0x6E53<\/span>&#93;:\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-keyword\">return<\/span> base\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">except<\/span> (ModbusException, OSError, RuntimeError) <span class=\"cbb-keyword\">as<\/span> exc:\n<\/span><span class=\"cbb-line\">            failures.<span class=\"cbb-function\">append<\/span>(<span class=\"cbb-string\">f\"{base}: {exc}\"<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"No SunS marker found; \"<\/span> + <span class=\"cbb-string\">\"; \"<\/span>.<span class=\"cbb-function\">join<\/span>(failures))\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">discover<\/span>(client, base, unit):\n<\/span><span class=\"cbb-line\">    position = base + <span class=\"cbb-number\">2<\/span>\n<\/span><span class=\"cbb-line\">    models = &#91;&#93;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">for<\/span> _ <span class=\"cbb-keyword\">in<\/span> <span class=\"cbb-function\">range<\/span>(<span class=\"cbb-number\">256<\/span>):\n<\/span><span class=\"cbb-line\">        model, length = <span class=\"cbb-function\">read_words<\/span>(client, position, <span class=\"cbb-number\">2<\/span>, unit)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> model == <span class=\"cbb-number\">0xFFFF<\/span>:\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">if<\/span> length != <span class=\"cbb-number\">0<\/span>:\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"Invalid end model length\"<\/span>)\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">return<\/span> models\n<\/span><span class=\"cbb-line\">        next_position = position + <span class=\"cbb-number\">2<\/span> + length\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> model == <span class=\"cbb-number\">0<\/span> <span class=\"cbb-keyword\">or<\/span> length == <span class=\"cbb-number\">0<\/span> <span class=\"cbb-keyword\">or<\/span> next_position &gt; <span class=\"cbb-number\">65534<\/span>:\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"Invalid model header or address range\"<\/span>)\n<\/span><span class=\"cbb-line\">        models.<span class=\"cbb-function\">append<\/span>((model, position + <span class=\"cbb-number\">2<\/span>, length))\n<\/span><span class=\"cbb-line\">        position = next_position\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"Model scan limit reached\"<\/span>)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">phase_a_current<\/span>(client, models, unit):\n<\/span><span class=\"cbb-line\">    matches = &#91;m <span class=\"cbb-keyword\">for<\/span> m <span class=\"cbb-keyword\">in<\/span> models <span class=\"cbb-keyword\">if<\/span> m&#91;<span class=\"cbb-number\">0<\/span>&#93; == <span class=\"cbb-number\">103<\/span>&#93;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">len<\/span>(matches) != <span class=\"cbb-number\">1<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"Exactly one model 103 required\"<\/span>)\n<\/span><span class=\"cbb-line\">    _, start, length = matches&#91;<span class=\"cbb-number\">0<\/span>&#93;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> length &lt; <span class=\"cbb-number\">5<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"Model 103 is too short\"<\/span>)\n<\/span><span class=\"cbb-line\">    block = <span class=\"cbb-function\">read_words<\/span>(client, start, <span class=\"cbb-number\">5<\/span>, unit)\n<\/span><span class=\"cbb-line\">    raw, sf_raw = block&#91;<span class=\"cbb-number\">1<\/span>&#93;, block&#91;<span class=\"cbb-number\">4<\/span>&#93;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> raw == <span class=\"cbb-number\">0xFFFF<\/span> <span class=\"cbb-keyword\">or<\/span> sf_raw == <span class=\"cbb-number\">0x8000<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">    exponent = sf_raw - <span class=\"cbb-number\">65536<\/span> <span class=\"cbb-keyword\">if<\/span> sf_raw &gt;= <span class=\"cbb-number\">32768<\/span> <span class=\"cbb-keyword\">else<\/span> sf_raw\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-number\">-10<\/span> &lt;= exponent &lt;= <span class=\"cbb-number\">10<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"Invalid SunSpec scale factor\"<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> raw * (<span class=\"cbb-number\">10.0<\/span> ** exponent)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">main<\/span>():\n<\/span><span class=\"cbb-line\">    unit = <span class=\"cbb-number\">1<\/span>  <span class=\"cbb-comment\"># Device-specific configuration<\/span>\n<\/span><span class=\"cbb-line\">    client = <span class=\"cbb-function\">ModbusTcpClient<\/span>(<span class=\"cbb-string\">\"192.168.1.50\"<\/span>, port=<span class=\"cbb-number\">502<\/span>, timeout=<span class=\"cbb-number\">3<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">try<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> client.<span class=\"cbb-function\">connect<\/span>():\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"Connection failed\"<\/span>)\n<\/span><span class=\"cbb-line\">        base = <span class=\"cbb-function\">find_base<\/span>(client, unit)\n<\/span><span class=\"cbb-line\">        models = <span class=\"cbb-function\">discover<\/span>(client, base, unit)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-function\">print<\/span>(<span class=\"cbb-string\">\"Base:\"<\/span>, base, <span class=\"cbb-string\">\"Models:\"<\/span>, models)\n<\/span><span class=\"cbb-line\">        current = <span class=\"cbb-function\">phase_a_current<\/span>(client, models, unit)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-function\">print<\/span>(<span class=\"cbb-string\">\"No valid phase A current\"<\/span> <span class=\"cbb-keyword\">if<\/span> current <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">              <span class=\"cbb-keyword\">else<\/span> <span class=\"cbb-string\">f\"{current:.2f} A\"<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">finally<\/span>:\n<\/span><span class=\"cbb-line\">        client.<span class=\"cbb-function\">close<\/span>()\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">if<\/span> __name__ == <span class=\"cbb-string\">\"__main__\"<\/span>:\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">main<\/span>()<\/span><\/code><\/pre><\/figure>\n<p>Die Grenze von 256 Modellk\u00f6pfen ist eine Schutzgrenze dieses Beispiels, keine SunSpec-Grenze f\u00fcr die Modellanzahl. Fehlende Marke, fehlendes Modell oder ung\u00fcltige Antwort beenden die Berechnung, statt eine plausible Zahl auszugeben. Das Beispiel behandelt genau eine Modell-103-Instanz; mehrere Instanzen ben\u00f6tigen eine ausdr\u00fcckliche Auswahl. Die Tests nutzten einen simulierten Client mit alternativen Basisadressen, fehlenden Werten und fehlerhaften K\u00f6pfen. Kein Wechselrichter wurde angesprochen.<\/p>\n<h2>Weitere Typen und Abfrageh\u00e4ufigkeit<\/h2><p>SunSpec legt f\u00fcr Mehrregisterwerte das h\u00f6herwertige Wort zuerst fest. Modbus selbst definiert die Register\u00fcbertragung, nicht s\u00e4mtliche herstellerspezifischen Mehrwortlayouts. Vorzeichenwerte ben\u00f6tigen Zweierkomplement-Dekodierung; Gleitkommawerte das passende IEEE-Format und eine Ung\u00fcltigkeitspr\u00fcfung. Text belegt einen festen Registerbereich und kann durch Nullbytes beendet oder aufgef\u00fcllt sein.<\/p><p>Ung\u00fcltige Bitmuster h\u00e4ngen vom SunSpec-Typ ab: etwa <code>0x8000<\/code> bei <code>int16<\/code>, <code>0xFFFF<\/code> bei <code>uint16<\/code> und null als \u201enicht akkumuliert\u201c bei <code>acc32<\/code>. Ein <code>acc32<\/code> ist trotz gleicher Registerbreite nicht mit <code>uint32<\/code> austauschbar.<\/p><p>Eine Blockabfrage spart \u00dcbertragungswege, garantiert aber keine gleichzeitige physische Abtastung. Funktion 03 erlaubt h\u00f6chstens 125 Register pro Anfrage; ein Ger\u00e4t kann eine kleinere Grenze vorgeben. Abfrageh\u00e4ufigkeit, Verbindungszahl und Aktualisierungstakt richten sich nach der Ger\u00e4tedokumentation. Ein universell problemloses F\u00fcnfsekundenintervall gibt es nicht f\u00fcr jedes Produkt und jeden gemeinsam genutzten Gateway.<\/p>\n<h2>Home Assistant mit klar begrenztem Beispiel<\/h2><p>Diese Konfiguration gilt nur f\u00fcr die gezeigte Karte: Modell-103-Daten beginnen bei 40071 und <code>A_SF = -2<\/code>. Der feste Wert <code>scale: 0.01<\/code> ist ein Multiplikator, nicht der Exponent. Home Assistant entdeckt aus diesem YAML weder das SunSpec-Modell noch dessen Skalierungsfaktor automatisch.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"yaml\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">YAML<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-yaml\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-attr\">modbus<\/span>:\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-operator\">-<\/span> <span class=\"cbb-attr\">name<\/span>: inverter\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">type<\/span>: tcp\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">host<\/span>: 192.168.1.50\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">port<\/span>: <span class=\"cbb-number\">502<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-attr\">sensors<\/span>:\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-operator\">-<\/span> <span class=\"cbb-attr\">name<\/span>: <span class=\"cbb-string\">\"Strom Phase A\"<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">slave<\/span>: <span class=\"cbb-number\">1<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">address<\/span>: <span class=\"cbb-number\">40072<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">input_type<\/span>: holding\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">data_type<\/span>: uint16\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">nan_value<\/span>: <span class=\"cbb-number\">65535<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">scale<\/span>: <span class=\"cbb-number\">0.01<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">precision<\/span>: <span class=\"cbb-number\">2<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">unit_of_measurement<\/span>: <span class=\"cbb-string\">\"A\"<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">device_class<\/span>: current\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">state_class<\/span>: measurement\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-attr\">scan_interval<\/span>: <span class=\"cbb-number\">10<\/span><\/span><\/code><\/pre><\/figure>\n<p><code>nan_value<\/code> schlie\u00dft den ung\u00fcltigen Stromrohwert aus und erzeugt laut aktueller Integrationsdokumentation den Zustand <code>unknown<\/code>. Das separate Skalierungsregister wird dadurch nicht gepr\u00fcft. Die feste Konfiguration passt nur bei weiterhin g\u00fcltiger Karte und Skalierung; nach Firmware- oder Modellkonfigurations\u00e4nderungen sind erneute Erkennung und Vergleich sinnvoll.<\/p><p>Leistung in Watt verwendet <code>device_class: power<\/code> und <code>state_class: measurement<\/code>. Energiez\u00e4hler verwenden <code>device_class: energy<\/code>, eine unterst\u00fctzte Energieeinheit und je nach R\u00fccksetzverhalten <code>total<\/code> oder <code>total_increasing<\/code>. Aktuelle Home-Assistant-Energieansichten k\u00f6nnen zus\u00e4tzlich Leistungsmessungen verwenden. Energie l\u00e4sst sich auch aus der Leistung \u00fcber die Zeit berechnen: Konstant 1 kW \u00fcber zwei Stunden ergeben 2 kWh. Bei wechselnder Leistung h\u00e4ngt die Genauigkeit von der Messh\u00e4ufigkeit und dem Rechenverfahren ab.<\/p>\n<div class=\"lw-faq\"><h2>Fragen und Antworten<\/h2><h3>Warum geh\u00f6rt der Skalierungsfaktor zum Modell?<\/h3><p>Ein vorzeichenbehafteter Exponent verbindet Zahlenbereich und Aufl\u00f6sung. Bei g\u00fcltiger int16-Leistung erlaubt Exponent 0 bis zu 32767 W; positive Exponenten erweitern den Bereich in gr\u00f6\u00dferen Schritten. Die referenzierte SunSpec-Modelldefinition beschreibt Skalierungspunkte als statisch. Ge\u00e4nderte Ger\u00e4tekonfiguration oder Firmware rechtfertigen trotzdem eine Pr\u00fcfung der resultierenden Karte.<\/p><h3>Was kann Energiestatistiken verf\u00e4lschen?<\/h3><p>Eine ung\u00fcltige null mit anschlie\u00dfendem echten Lebensdauerz\u00e4hlerstand kann unter <code>total_increasing<\/code> als R\u00fccksetzung und gro\u00dfer neuer Zuwachs erscheinen. Deshalb z\u00e4hlen Punkttyp und R\u00fccksetzverhalten. Bei einem modellgem\u00e4\u00dfen Akkumulator ist eine ung\u00fcltige rohe null auszuschlie\u00dfen. Diese Regel darf nicht blind auf andere Sensoren mit g\u00fcltigem Nullwert \u00fcbertragen werden. Unbekannte Daten sollten unbekannt bleiben statt k\u00fcnstlich null zu werden.<\/p><h3>Wie l\u00e4sst sich der Zugriff begrenzen?<\/h3><p>Klassisches Modbus TCP auf Port 502 besitzt keine eingebaute Authentifizierung oder Verschl\u00fcsselung. Modbus Security ist ein getrenntes TLS-basiertes Protokoll und ben\u00f6tigt Ger\u00e4teunterst\u00fctzung. F\u00fcr dieses Tutorial gen\u00fcgt Lesezugriff. Ein begrenzter Netzwerkpfad ohne \u00f6ffentliche Portweiterleitung reduziert die Angriffsfl\u00e4che. Eine geroutete Firewall kontrolliert normalerweise keine direkten Verbindungen im selben Subnetz; Host-Firewalls, Switch-ACLs und Client-Isolation k\u00f6nnen solche Verbindungen dennoch einschr\u00e4nken.<\/p><\/div>\n<div class=\"lw-quellen\"><h2>Quellen<\/h2><ul><li><a href=\"https:\/\/sunspec.org\/wp-content\/uploads\/2021\/02\/SunSpec-Device-Information-Model-Specificiation-V1-0-02-01-2021.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">SunSpec: Ger\u00e4teinformationsmodelle, Entwurf 2021<\/a><\/li><li><a href=\"https:\/\/sunspec.org\/wp-content\/uploads\/2019\/08\/SunSpec-Information-Models-12041.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">SunSpec: Informationsmodelle 1.9<\/a><\/li><li><a href=\"https:\/\/raw.githubusercontent.com\/sunspec\/models\/master\/json\/model_103.json\" target=\"_blank\" rel=\"noopener noreferrer\">SunSpec: Definition von Modell 103<\/a><\/li><li><a href=\"https:\/\/raw.githubusercontent.com\/sunspec\/models\/master\/json\/model_160.json\" target=\"_blank\" rel=\"noopener noreferrer\">SunSpec: Definition von Modell 160<\/a><\/li><li><a href=\"https:\/\/pymodbus.readthedocs.io\/en\/stable\/source\/client.html\" target=\"_blank\" rel=\"noopener noreferrer\">PyModbus 3.16.1: Client-Schnittstelle<\/a><\/li><li><a href=\"https:\/\/www.home-assistant.io\/integrations\/modbus\/\" target=\"_blank\" rel=\"noopener noreferrer\">Home Assistant: Modbus-Integration<\/a><\/li><li><a href=\"https:\/\/www.home-assistant.io\/docs\/energy\/faq\/\" target=\"_blank\" rel=\"noopener noreferrer\">Home Assistant: Energie-Fragen<\/a><\/li><li><a href=\"https:\/\/contributors.home-assistant.io\/core\/entities\/sensor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Home Assistant: Zustandsklassen f\u00fcr Sensoren<\/a><\/li><li><a href=\"https:\/\/www.home-assistant.io\/integrations\/integration\/\" target=\"_blank\" rel=\"noopener noreferrer\">Home Assistant: Integral<\/a><\/li><li><a href=\"https:\/\/www.modbus.org\/file\/secure\/modbusprotocolspecification.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Modbus-Anwendungsprotokoll V1.1b3<\/a><\/li><li><a href=\"https:\/\/www.modbus.org\/modbus-specifications\" target=\"_blank\" rel=\"noopener noreferrer\">Modbus- und Modbus-Security-Spezifikationen<\/a><\/li><li><a href=\"https:\/\/icdocs.ismacontrolli.com\/aac20-modbus\/V1.10\/list-of-modbus-registers\" target=\"_blank\" rel=\"noopener noreferrer\">iSMA CONTROLLI: Beispiel zur Modbus-Adressschreibweise<\/a><\/li><\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Die SunSpec-Modellkette f\u00fchrt zu unterst\u00fctzten Registerbl\u00f6cken. Das Tutorial liest den Phasenstrom aus Modell 103, unterscheidet Adresskonventionen, pr\u00fcft fehlende Werte und Skalierung und leitet daraus eine klar begrenzte Home-Assistant-Konfiguration ab.<\/p>\n","protected":false},"author":1,"featured_media":23774,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92626],"tags":[92175,92178,92181,92184,92235],"class_list":["post-13062","post","type-post","status-publish","format-standard","hentry","category-tutorials-de-smart-home-de","tag-energy-management-de","tag-home-assistant-de","tag-modbus-de","tag-photovoltaics-de","tag-tutorial-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Die SunS-Marke finden, die Modellkette ablaufen, Skalierungsfaktoren und Datentypen entschl\u00fcsseln und daraus einen Home-Assistant-Sensor machen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Die SunS-Marke finden, die Modellkette ablaufen, Skalierungsfaktoren und Datentypen entschl\u00fcsseln und daraus einen Home-Assistant-Sensor machen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-18T10:46:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T12:25:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/quality-hero-13062-20261024.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen\",\"datePublished\":\"2026-09-18T10:46:00+00:00\",\"dateModified\":\"2026-10-26T12:25:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/\"},\"wordCount\":1109,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/quality-hero-13062-20261024.png\",\"keywords\":[\"Energy Management\",\"Home Assistant\",\"Modbus\",\"Photovoltaics\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/\",\"name\":\"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/quality-hero-13062-20261024.png\",\"datePublished\":\"2026-09-18T10:46:00+00:00\",\"dateModified\":\"2026-10-26T12:25:45+00:00\",\"description\":\"Die SunS-Marke finden, die Modellkette ablaufen, Skalierungsfaktoren und Datentypen entschl\u00fcsseln und daraus einen Home-Assistant-Sensor machen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/quality-hero-13062-20261024.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/quality-hero-13062-20261024.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/smart-home-de\\\/tutorials-de-smart-home-de\\\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen | Lukas Wojcik","description":"Die SunS-Marke finden, die Modellkette ablaufen, Skalierungsfaktoren und Datentypen entschl\u00fcsseln und daraus einen Home-Assistant-Sensor machen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen | Lukas Wojcik","og_description":"Die SunS-Marke finden, die Modellkette ablaufen, Skalierungsfaktoren und Datentypen entschl\u00fcsseln und daraus einen Home-Assistant-Sensor machen.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-18T10:46:00+00:00","article_modified_time":"2026-10-26T12:25:45+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/quality-hero-13062-20261024.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen","datePublished":"2026-09-18T10:46:00+00:00","dateModified":"2026-10-26T12:25:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/"},"wordCount":1109,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/quality-hero-13062-20261024.png","keywords":["Energy Management","Home Assistant","Modbus","Photovoltaics","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/","name":"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/quality-hero-13062-20261024.png","datePublished":"2026-09-18T10:46:00+00:00","dateModified":"2026-10-26T12:25:45+00:00","description":"Die SunS-Marke finden, die Modellkette ablaufen, Skalierungsfaktoren und Datentypen entschl\u00fcsseln und daraus einen Home-Assistant-Sensor machen.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/quality-hero-13062-20261024.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/quality-hero-13062-20261024.png","width":1200,"height":630,"caption":"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/smart-home-de\/tutorials-de-smart-home-de\/tutorial-sunspec-register-eines-pv-wechselrichters-uber-modbus-tcp-auslesen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: SunSpec-Register eines PV-Wechselrichters \u00fcber Modbus TCP auslesen"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13062"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13062\/revisions"}],"predecessor-version":[{"id":27373,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13062\/revisions\/27373"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/23774"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}