---
title: "SolaX X3 Hybrid Ultra"
description: "PV-Strings, Batterie-SOC, Netz-V/F überwachen und Lademodus am SolaX X3-Ultra Hybrid-Wechselrichter über Modbus RTU steuern."
url: "https://taphome.com/de/compatibility/solax-hybrid-ultra-x3/"
language: de
lastmod: 2026-10-14
generator: hugo
ai:
  topics: ["modbus-rtu","inverter","solar","rs485","battery-storage","3-phase","hybrid-inverter","energy-monitoring","gen5"]
  questions: ["Unterstützt TapHome den SolaX X3 Hybrid Ultra Wechselrichter?","Wie verdrahtet man RS-485 vom COM-1-Port des SolaX X3-Ultra zu TapHome?","Welche SolaX X3-Ultra Modelle funktionieren mit der TapHome-Vorlage?","Welche ist die Standard-Modbus-Baudrate am SolaX X3-Ultra?","Wie liest man Batterie-SOC vom SolaX X3 Hybrid Ultra über Modbus RTU?","Warum lesen PV3 und Batterie-2-SOC null auf meinem SolaX X3-Ultra?"]
---

# SolaX X3 Hybrid Ultra

Kommunikation: Modbus RTU

- [Offizielle Website von SolaX Power](https://www.solaxpower.com)
- [SolaX X3-Ultra Produktseite](https://www.solaxpower.com/x3-ultra/)

## Integrationsanleitung

Der SolaX X3 Hybrid Ultra (Gen5) ist ein dreiphasiger Hybrid-PV-/Batterie-Wechselrichter mit einer Nennleistung von 10 kW bis 30 kW. Die TapHome-Vorlage kommuniziert mit dem Wechselrichter über **Modbus RTU am RS-485-COM-1-Port** (Pins REMOTE_485A / REMOTE_485B) und implementiert die Register-Map des SolaX Modbus-Protokolls V3.29. Sie liest PV-Strang-Leistung, Batterie-Ladezustand und -Temperatur, dreiphasige Netzspannung und -frequenz, lebenslange und tägliche Energiesummen, Einspeiseleistung vom externen Zähler und stellt schreibbare Lademodus, Nachtladungs-SOC (Eigenverbrauch) und maximale Einspeiseleistungsgrenze bereit.

Der X3-Ultra **unterstützt** Modbus TCP nicht nativ — TCP ist nur über ein SolaX-Überwachungsmodul (Pocket WiFi 3.0, Pocket LAN oder DataHub) verfügbar, das RTU am Port 502 zu TCP überbrückt. Für entfernte Installationen kann TapHome auch über ein RS-485-zu-Ethernet-Gateway eines Drittanbieters (z. B. Waveshare, USR-DR302) angeschlossen werden, das als Modbus RTU-over-TCP konfiguriert ist.

## Modelle

Die TapHome-Vorlage deckt die gesamte X3-Ultra-Serie ab. Die PV3- und Batterie-2-SOC-Sensoren funktionieren nur bei der 3-MPPT-/Doppelbatterie-30-kW-Variante.

| Modell | Nennleistung AC | MPPT-Tracker | Hinweise |
|--------|-----------------|--------------|----------|
| X3-ULT-15K | 15 kW | 2 | Standard 2-MPPT |
| X3-ULT-15KP | 15 kW | 3 | 3-MPPT (Modellcode H3BC) |
| X3-ULT-19.9K | 19,9 kW | 2 | Standard 2-MPPT |
| X3-ULT-20K | 20 kW | 2 | Standard 2-MPPT (Modellcode H3BD) |
| X3-ULT-20KP | 20 kW | 3 | 3-MPPT |
| X3-ULT-25K | 25 kW | 3 | Modellcode H3BF |
| X3-ULT-25KW | 25 kW | 3 | — |
| X3-ULT-30K | 30 kW | 3 | Doppelbatterie, PV3 aktiv (Modellcode H3BG) |
| X3-ULT-10K-GLV | 10 kW | — | Niederspannungsvariante (GLV) |
| X3-ULT-15K-GLV | 15 kW | — | Niederspannungsvariante (GLV) |

Der Modellcode kann zur Laufzeit über das Modul-Attribut **Model** ausgelesen werden (Register H:0x000E, 4-Zeichen-ASCII-String).

## Kompatibilitätsumfang

Die Vorlage implementiert die Teilmenge des SolaX Modbus-Protokolls V3.29, die am häufigsten für das Heim-Energiemanagement verwendet wird — 19 Geräte, 2 modulebene Service-Attribute und eine Service-Aktion. Das vollständige Protokoll stellt deutlich mehr Register bereit; die nützlichsten nicht implementierten Funktionen (phasenweise Netzleistung und -strom, Batteriespannung/-strom/-leistung, BMS-Status, Inselbetriebsstunden, Fernsteuerung der Leistung usw.) können in einem zukünftigen Vorlagen-Update ergänzt werden. Die korrigierte Community-Vorlage im TapHome-Portal ergänzt bereits die Fernsteuerung der Leistung und Schreibvorgänge für Einstellungen, die nur bei einer Wertänderung erfolgen — siehe Bekannte Fehler der offiziellen Vorlage und Fernsteuerung der Leistung weiter unten.

## Hardware-Anschluss

Der X3-Ultra hat einen einzigen multifunktionalen **COM-1-Port** (RJ45-Stil-Stecker mit beschrifteter Kabelhalterung). Dieselben physikalischen Pins erfüllen unterschiedliche Funktionen, je nachdem, in welche beschriftete Position der Kabelhalterung Sie verdrahten. Für die Modbus-Integration eines Drittanbieters verwenden Sie die Position **RS485** — die Leitungen **REMOTE_485A** und **REMOTE_485B**.

### COM-1-Port-Pinout

![Pin-Zuordnung des COM-1-Ports des SolaX X3-Ultra für alle sechs beschrifteten Positionen (Parallel-1, Parallel-2, BMS-1, BMS-2, RS485, DRM)](https://taphome.com/images/compatibility/solax-hybrid-ultra-x3/com1-pinout_hu_4124a3cd9e8bc981.jpg)

Pin-Zuordnung der **RS485-Position** (die einzige für TapHome relevante Position):

| Pin | Signal | TapHome-Verdrahtung |
|-----|--------|---------------------|
| **1** | **REMOTE_485A** | A+ / D+ |
| **2** | **REMOTE_485B** | B− / D− |
| 3 | PARALLEL_485AA | nicht verwenden (nur SolaX-Zubehör) |
| 4 | PARALLEL_485AA | nicht verwenden (nur SolaX-Zubehör) |
| 5 | PARALLEL_485BB | nicht verwenden (nur SolaX-Zubehör) |
| 6 | PARALLEL_485BB | nicht verwenden (nur SolaX-Zubehör) |
| **7** | **REMOTE_485A** | Duplikat von Pin 1 (für Daisy-Chain) |
| **8** | **REMOTE_485B** | Duplikat von Pin 2 (für Daisy-Chain) |

> [!WARNING]
> Die Pins 3–6 gehören zum SolaX-proprietären PARALLEL_485-Kanal und sind für SolaX-Zubehör reserviert (Adapter Box G2, EV-Charger, DataHub, parallele Wechselrichter). Schließen Sie **keinen** Modbus-Master eines Drittanbieters an diese Pins an.

> [!NOTE]
> Ältere SolaX-Wechselrichter (Gen4 X3-Hybrid) verwendeten **Pin 4 = 485A** und **Pin 5 = 485B**. Das X3-Ultra-COM-1-Pinout ist anders — überprüfen Sie vor dem Crimpen immer die Kabelhalterungs-Beschriftung an Ihrer Einheit. Manche Community-Dokumentation verweist noch auf das ältere Gen4-Pinout.

### RS-485-Verdrahtung

![Installation des RJ45-Terminals in die RS485-Position der COM-1-Kabelhalterung](https://taphome.com/images/compatibility/solax-hybrid-ultra-x3/wiring-rs485_hu_ac07cf89af382c1.jpg)

Verdrahtungsregeln aus dem X3-Ultra-Benutzerhandbuch (Abschnitt 8.6.4):

- **Kabeltyp:** Standard-Cat5- oder Cat6-UTP-Twisted-Pair
- **Maximale Länge:** **30 m** RS-485-Kabel zwischen Wechselrichter und TapHome CCU
- **Polarität ist wichtig:** wenn keine Kommunikation, tauschen Sie A und B
- **Ein einziger Modbus-Master:** auf dem Bus ist nur ein Master erlaubt. Wenn ein SolaX-Überwachungsmodul die Leitung teilt, ist mit Konflikten zu rechnen

Die COM-1-Kabelhalterung hat dedizierte beschriftete Positionen für jeden Kanal — verdrahten Sie Ihr Cat5/Cat6-Kabel in den Schlitz mit der Beschriftung **RS485** (nicht in Parallel-1, Parallel-2, BMS-1, BMS-2 oder DRM).

### Anschlussoptionen

- **Direktes Modbus-RTU-CCU:** verdrahten Sie das COM-1-RS485-Paar direkt mit dem TapHome Modbus-RTU-CCU. Niedrigste Latenz, empfohlen für Echtzeit-Steuerung.
- **RS-485-zu-Ethernet-Gateway (Modbus RTU-over-TCP):** für Installationen, bei denen der Wechselrichter weit vom TapHome Core entfernt ist, verwenden Sie ein Waveshare RS485-zu-Ethernet-, USR-DR302- oder ähnliches Gateway, das als Modbus RTU-over-TCP am Port 502 konfiguriert ist. Der Vorlagen-Importparameter `IpAddress` ermöglicht dieses Muster.
- **SolaX Pocket WiFi 3.0 / Pocket LAN / DataHub (Modbus TCP):** wenn das SolaX-Überwachungsmodul bereits installiert ist, überbrückt es RTU am Port 502 zu TCP mit einem Abfragezyklus von etwa 1 Sekunde — langsamer als direktes RTU und nicht für Echtzeit-Steuerschleifen empfohlen.

## Konfiguration

### Modbus-Kommunikation am Wechselrichter aktivieren

Navigieren Sie am Wechselrichter-LCD zu:

```
Menu → Setting → Advance Setting → Modbus
```

Das Menü Advanced Settings erfordert möglicherweise ein Installateur-Passwort. Überprüfen oder setzen Sie Folgendes:

| Parameter | TapHome-Vorlagen-Standard | Wechselrichter-Standard | Bereich |
|-----------|---------------------------|-------------------------|---------|
| Modbus-Adresse (Slave-ID) | 1 | 1 | 1–255 |
| Baudrate | 19200 | 19200 | 9600 / 19200 / 38400 / 57600 / 115200 |
| Parität | None | None | None / Odd / Even |
| Datenbits | 8 | 8 | — |
| Stoppbits | 1 | 1 | 1 oder 2 |

> [!WARNING]
> Die Baudrate muss zwischen Wechselrichter und TapHome übereinstimmen. Das Protokoll V3.29 spezifiziert **19200** als X3-Ultra-Standard; einige ältere SolaX-Vorlagen und Dokumentationen erwähnen noch 9600. Falls die Kommunikation fehlschlägt, prüfen Sie zuerst die Baudrate.

Der Wechselrichter kann die Modbus-Slave-Adresse auch über das Holding-Register `H:0x00AC` und die Baudrate über das Holding-Register `H:0x00AD` bereitstellen.

### Importparameter in TapHome

Beim Import der Vorlage in TapHome müssen zwei Parameter gesetzt werden:

| Parameter | Zweck |
|-----------|-------|
| **IpAddress** | IP-Adresse des RS-485-zu-TCP-Gateways (oder des SolaX Pocket WiFi/LAN-Überwachungsmoduls). Beim Standardwert belassen, wenn der Wechselrichter direkt mit dem TapHome Modbus-RTU-CCU verbunden ist. |
| **SlaveId** | Modbus-Slave-Adresse des Wechselrichters (Standard `1`). Muss mit der Modbus-Adresseinstellung des Wechselrichters übereinstimmen. |

### Kommunikations-Timing

Das SolaX Modbus-Protokoll erfordert ein Mindestintervall zwischen aufeinanderfolgenden Anfragen und verwendet individuelle Abfrageintervalle pro Gerät in der Vorlage (von einigen Sekunden für Netzspannung/-frequenz bis zu 80 s für Batterietemperatur). Pollen Sie kein Gerät aggressiv — der Wechselrichter drosselt Anfragen intern.

## Gerätefunktionen

### Batterieüberwachung

- **Batterie 1 SOC** — Ladezustand der primären Batterie als 0–1-Analogeingang (Rohregister in 1-%-Einheiten, geteilt durch 100 für den TapHome-Bereich 0–1)
- **Batterie 2 SOC** — Ladezustand der zweiten Batterie, **nur bei der X3-ULT-30K** Doppelbatterie-Variante funktionsfähig; andere Modelle liefern 0
- **Batterietemperatur** — Temperatur des Batterie-Packs in °C, alle 80 Sekunden abgefragt

### Solar-PV-Leistung

- **PV1-Leistung (Ost)** — DC-Leistung von PV-Strang 1 in kW
- **PV2-Leistung (Ost)** — DC-Leistung von PV-Strang 2 in kW
- **PV3-Leistung (West)** — DC-Leistung von PV-Strang 3 in kW, **nur bei 3-MPPT-Modellen** (siehe Modelltabelle) funktionsfähig; andere Modelle liefern 0

Die Suffixe „Ost" / „West" sind eine Richtungsbenennung, die aus der ursprünglichen slowakischen Vorlage übernommen wurde — die PV-Strang-Nummer entspricht dem physischen MPPT-Eingang am Wechselrichter, nicht der tatsächlichen Ausrichtung der Anlage.

### Netz- und Energiemessung

- **Netzspannung L1 / L2 / L3** — phasenweise Netzspannung in Volt (Register `A:0x006A`, `A:0x006E`, `A:0x0072`)
- **Netzfrequenz L1 / L2 / L3** — phasenweise Netzfrequenz in Hertz (Register `A:0x006D`, `A:0x0071`, `A:0x0075`)
- **Netzeinspeisung (Zähler)** — gedacht als Einspeiseleistung vom externen SolaX-Zähler / CT, aber die offizielle Vorlage liest das Register `A:0x0046` mit falscher Wortreihenfolge (`Int32` statt `LittleEndianInt32`), sodass der Wert bedeutungslos ist (zum Beispiel −7340,033 statt −0,117 kW). Es ist kein Alias von Netz-Bezug / -Einspeisung — verwenden Sie dieses Gerät oder korrigieren Sie das Skript wie unter Bekannte Fehler der offiziellen Vorlage beschrieben
- **Netz-Bezug / -Einspeisung** — die korrekte Ablesung der Zähler-/CT-Leistung (`A:0x0046`, `LittleEndianInt32`) in kW; positiv = Einspeisen, negativ = Bezug
- **Tages-/Aktuelle Wechselrichter-Erzeugung** — kombiniert in der offiziellen Vorlage die heutige Wechselrichter-Energie (Register `A:0x0050`, ein Tageszähler, der jede Nacht zurückgesetzt wird) mit dem Register `A:0x0002`, das SolaX nur für einphasige X1-Modelle dokumentiert — am X3-Ultra liefert es 0. Die korrigierten Skripte finden Sie unter Bekannte Fehler der offiziellen Vorlage
- **Gesamt erzeugte Energie** — kumulative Gesamtenergie, die vom AC-Port des Wechselrichters ins Netz eingespeist wurde, in kWh

### Lade- und Einspeisesteuerung (schreibbar)

- **Lademodus** — Betriebsmodus des Batterieladers: Self Use, Feed-in Priority, Backup oder Manual
- **Nachtladungs-SOC (Eigenverbrauch)** — oberer SOC-Zielwert (10–100 %) für das Laden der Batterie aus dem Netz während der Nacht im Eigenverbrauchsmodus
- **Max. Einspeiseleistungs-Grenze** — maximal zulässige Einspeiseleistung ins Netz **in kW** (kein Prozentsatz): Das Register zählt bei X3-Modellen in 10-W-Schritten, und die Vorlage teilt durch 100

> [!WARNING]
> Für alle drei oben genannten schreibbaren Geräte gilt das **EEprom-Schreiblimit** (Lademodus → `SH:0x001F`, Nachtladungs-SOC → `SH:0x0063`, Max. Einspeiseleistung → `SH:0x0042`). Die zugrundeliegenden Register sind EEprom-gestützt mit begrenzten Schreibzyklen — häufige Schreibvorgänge (alle paar Sekunden in einer Automatisierungsschleife) beschädigen das EEprom des Wechselrichters dauerhaft. Verwenden Sie nur manuelle Änderungen oder geplante Schreibvorgänge mit niedriger Frequenz.

### Modulebene-Attribute und -Aktionen

- **Betriebsmodus** (Service-Attribut) — Betriebszustand des Wechselrichters als Text: Waiting, Checking, Normal, Fault, Permanent Fault, Update, Off-grid waiting, Off-grid, Self Testing, Idle, Standby
- **Model** (Service-Attribut) — Modellcode des Wechselrichters als 4-Zeichen-ASCII-String (H3BC = 15K/15KP, H3BD = 19,9K/20K/20KP, H3BF = 25K, H3BG = 30K)
- **Admin entsperren** (Service-Aktion) — schreibt die Konstante `2014` in `SH:0x0000`, um die erweiterten Wechselrichter-Einstellungen zu entsperren (selten erforderlich, nur zur Diagnose)

### Fehlererkennung

Das Modul-ReadScript überwacht das Betriebsmodus-Register (`A:0x0009`) und meldet einen TapHome-Systemfehler, wenn der Wechselrichter in den Zustand 3 (Fault) oder 4 (Permanent Fault) eintritt. Zwei Fehlerregister werden Bit für Bit analysiert:

- **Wechselrichter-Fehlercodes** (32-Bit, `A:0x0040`–`A:0x0041`) — 31 individuelle Fehler, darunter Netzspannungs-/Frequenzfehler, PV-Spannungsfehler, Batteriefehler, Isolationsfehler, Übertemperatur, Überstromschutz, Relaisfehler und Kommunikationsfehler
- **Manager-Fehlercodes** (16-Bit, `A:0x0043`) — 11 Fehlerbits, darunter Leistungstyp-Fehler, EEPROM-Fehler, NTC-Sensor-Probleme, Batterietemperatur-Warnungen, Zählerfehler und Lüfterfehler

Einzelne Fehler erscheinen als diskrete Fehler im TapHome-Systemprotokoll, sodass Installateure das fehlerhafte Subsystem identifizieren können, ohne das Wechselrichter-LCD ablesen zu müssen.

## Bekannte Fehler der offiziellen Vorlage

Die offizielle TapHome-Vorlage für den X3-Ultra liest mehrere Register falsch und schreibt eine Einstellung periodisch (geprüft anhand des SolaX Modbus-Protokolls V3.29 und V001.02 sowie anhand von Werten in installierten Anlagen). Ein aus der offiziellen Vorlage importiertes Modul **aktualisiert sich nicht selbst**, wenn sich die Vorlage ändert. Korrigieren Sie entweder die Skripte des bestehenden Moduls und seiner Geräte von Hand, oder importieren Sie die korrigierte Community-Vorlage aus dem TapHome-Portal: [SolaX X3-Ultra Hybrid Inverter — monitoring and power control](https://portal.taphome.com/portal/community/solax-x3-ultra-power-control-modbus-rtu) (anmelden, XML herunterladen und als neues Modul importieren).

**[SolaX X3-Ultra Hybrid Inverter — monitoring and power control (Modbus RTU)](https://portal.taphome.com/de/portal/community/solax-x3-ultra-power-control-modbus-rtu)** — SolaX, Modbus RTU. SolaX X3-Ultra hybrid inverter over Modbus RTU — Energy Dashboard set, corrected readings, settings written only on change, remote AC power control for spot-price charging and discharging.

| Wo | Offizielles Skript | Korrigiertes Skript | Auswirkung des Fehlers |
|----|--------------------|---------------------|------------------------|
| Modul — Leseskript | `var x3 := MODBUSR(A, 0x0040, Uint32);` | `var x3 := MODBUSR(A, 0x0040, LittleEndianUint32);` | Die beiden Hälften des 32-Bit-Fehlercodes sind vertauscht: Ein Fehler in Bit 1 (Grid Lost Fault) wird als Bit 17 (Bat Power Low) gemeldet. Parallel Fault (Bit 21) und Hard Limit Fault (Bit 22) werden überhaupt nicht gemeldet |
| Netzeinspeisung (Zähler) | `MODBUSR(A,0x0046, Int32)/1000` | `MODBUSR(A, 0x0048, LittleEndianUint32) / 100` — Gesamtenergie ins Netz in kWh | Die Leistung liest bereits Netz-Bezug / -Einspeisung korrekt; dieses Gerät zeigt eine bedeutungslose Zahl. Gesamtenergie aus dem Netz: `MODBUSR(A, 0x004A, LittleEndianUint32) / 100` |
| Tages-/Aktuelle Wechselrichter-Erzeugung — Gesamtverbrauch | `MODBUSR(A, 0x50, UInt16) /10` | `MODBUSR(A, 0x0094, LittleEndianUint32) / 10` | 0x0050 ist ein Tageszähler, der jede Nacht auf 0 fällt; 0x0094 ist die gesamte PV-Energie |
| Tages-/Aktuelle Wechselrichter-Erzeugung — Momentanleistung | `MODBUSR(A,0x02, Int16)/1000` | `(MODBUSR(A, 0x000A, UInt16) + MODBUSR(A, 0x000B, UInt16) + MODBUSR(A, 0x0124, UInt16)) / 1000` | 0x0002 ist die Netzleistung einphasiger X1-Modelle und liefert am X3-Ultra 0 |
| Batterietemperatur | `MODBUSR(A,0x0018, UInt16)` | `MODBUSR(A, 0x0018, Int16)` | Unter 0 °C zeigt die offizielle Vorlage etwa 65535 °C |
| Nachtladungs-SOC (Eigenverbrauch) — Schreibskript | `MODBUSW(SH, 0x0063,  Uint16, Le * 100)` mit eingeschaltetem periodischem Schreiben | `IF(MODBUSR(H, 0x0094, UInt16) != ROUND(Le * 100), MODBUSW(SH, 0x0063, Uint16, ROUND(Le * 100)));` | Das offizielle Gerät schreibt den Nachtladungs-Zielwert bei jeder Abfrage (etwa alle 55 s) in den Wechselrichter — 0x0063 ist ein EEPROM-Register mit etwa 1 Million Schreibzyklen. Mit dem korrigierten Skript schreibt es nur, wenn sich der Wert tatsächlich ändert |

Das Register `H:0x0094` ist auch im Protokoll V3.29 der Ziel-Ladezustand der Nachtladung (SelfUse_NightCharge_UpperSoC); die Nachtladung aus dem Netz wird im niederwertigen Byte von `H:0x0093` eingeschaltet (Schreibregister `0x0062`).

## Fernsteuerung der Leistung

Die korrigierte Community-Vorlage ergänzt das Gerät **Remote control - AC power target**. Es nutzt den SolaX-Fernsteuerungsmodus (VPP) 1: Ein positiver Zielwert in kW lässt den Wechselrichter an seinem AC-Port Leistung aufnehmen (er lädt die Batterie, aus dem Netz, wenn die PV-Leistung nicht reicht), ein negativer Zielwert lässt ihn Leistung abgeben (er entlädt die Batterie, und was das Haus nicht verbraucht, geht ins Netz); 0 beendet die Fernsteuerung. Die Vorlage entsperrt bei Bedarf die Wechselrichter-Einstellungen mit dem Standardpasswort 2014 und wiederholt den Befehl alle 60 s. Die Fernsteuerung startet nicht, solange sich der Wechselrichter im Arbeitsmodus Manual befindet.

> [!WARNING]
> SolaX kennzeichnet die Fernsteuerungsregister (0x007C–0x0088) in seinem Protokoll nicht als EEPROM-Register, bestätigt das Gegenteil aber auch nicht schriftlich. Diese Vorlage stützt sich auf die Erfahrung der Home-Assistant- und openHAB-Communitys, die diese Register alle paar Sekunden bis Minuten schreiben. Die oben genannten Einstellungen sind EEPROM-Register (von SolaX mit ★ gekennzeichnet, etwa 1 Million Schreibzyklen): Ändern Sie sie selten und nie aus häufigen Automatisierungen — für das Laden und Entladen nach Spotpreisen verwenden Sie den AC-Leistungszielwert der Fernsteuerung.

## Fehlerbehebung

### Keine Kommunikation mit dem Wechselrichter

1. Überprüfen Sie, dass die RS-485-Verdrahtung an den **REMOTE_485A / REMOTE_485B**-Pins liegt (1+2 oder 7+8 an der COM-1-RS485-Position), nicht an den PARALLEL_485-Pins 3–6
2. Prüfen Sie, dass die Baudrate zwischen Wechselrichter (`Menu → Setting → Advance Setting → Modbus`) und TapHome-Modul übereinstimmt — beide müssen standardmäßig 19200 sein
3. Bestätigen Sie, dass die Slave-ID übereinstimmt (Standard `1`)
4. Überprüfen Sie, dass nur **ein** Modbus-Master am RS-485-Bus angeschlossen ist — Modbus unterstützt keinen Multi-Master
5. Tauschen Sie die A- und B-Adern, falls die Kabelpolarität unsicher ist
6. Bestätigen Sie, dass das Kabel **30 m** Gesamt-RS-485-Länge nicht überschreitet

### PV3 oder Batterie-2-SOC liest null

Diese Geräte funktionieren nur am **X3-ULT-30K** (3-MPPT-/Doppelbatterie-Variante). Bei kleineren Modellen liefern die Register `A:0x0124` (PV3-Leistung) und `A:0x012D` (Batterie-2-SOC) null. Verbergen Sie die nicht verwendeten Geräte in der TapHome-UI für Nicht-30K-Installationen.

### Batterietemperatur liest einen unerwartet hohen Wert

Das Batterietemperatur-Register (`A:0x0018`) wird von der offiziellen Vorlage als `UInt16` gelesen, der Wert ist jedoch vorzeichenbehaftet. Temperaturen unter null (z. B. −1 °C) laufen zu großen positiven Werten über (z. B. 65535). Ändern Sie das Skript in `MODBUSR(A, 0x0018, Int16)` — siehe Bekannte Fehler der offiziellen Vorlage.

### Schreibvorgänge in Lademodus / Nachtladungs-SOC / Max. Einspeiseleistung wirken sich nicht aus

Diese Register sind EEprom-gestützt und der Wechselrichter begrenzt Schreibvorgänge, um das EEprom zu schützen. Stellen Sie sicher, dass die Schreibvorgänge selten sind (manuell oder geplant, nicht in einer engen Automatisierungsschleife). Einige Firmware-Versionen erfordern auch, dass der Lademodus auf **Manual** (`3`) eingestellt ist, bevor bestimmte erzwungene Lade-/Entladungs-Submodi reagieren.

### Modbus TCP über das SolaX-Überwachungsmodul ist langsam

Pocket WiFi 3.0 / Pocket LAN / DataHub überbrücken RTU zu TCP mit einem Abfragezyklus von etwa 1 Sekunde und handhaben nur einen Modbus-TCP-Client gleichzeitig. Wenn SolaX-Cloud-Monitoring ebenfalls Daten zieht, ist mit Konflikten zu rechnen. Für Echtzeit-Steuerung (Frequenzantwort, Peak Shaving) verwenden Sie direktes Modbus RTU oder ein dediziertes RS-485-zu-Ethernet-Gateway eines Drittanbieters.

## Verfügbare Geräte 19

Diese Geräte erscheinen nach dem Import in TapHome.

SolaX X3 Hybrid Ultra Modul

Serviceattribute

|               |                                                                                                                                                          |
|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Betriebsmodus | Betriebszustand des Wechselrichters — Waiting, Checking, Normal, Fault, Permanent Fault, Update, Off-grid waiting, Off-grid, Self Testing, Idle, Standby |
| Modell        | Modellcode des Wechselrichters als 4-Zeichen-ASCII-String (H3BC = 15K/15KP, H3BD = 19,9K/20K/20KP, H3BF = 25K, H3BG = 30K)                               |

Serviceaktionen

|                  |                                                                                                                                                              |
|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Admin entsperren | Schreibt die Konstante 2014 in das Register SH:0x0000, um die erweiterten Wechselrichter-Einstellungen zu entsperren — selten erforderlich, nur zur Diagnose |

Lesen (Modul)

```taphome
var reg := MODBUSR(A, 0x09, UInt16);
IF(reg = 3, ADDERROR("Run Mode Fault"));
IF(reg = 4, ADDERROR("Run Mode Permanent Fault"));
#error table  2-3 for x3
var x3 := MODBUSR(A, 0x0040, Uint32);
IF(GETBIT(x3, 0) = 1, ADDERROR("TZ Protect Fault"));
IF(GETBIT(x3, 1) = 1, ADDERROR("Grid Lost Fault"));
IF(GETBIT(x3, 2) = 1, ADDERROR("Grid Volt Fault"));
IF(GETBIT(x3, 3) = 1, ADDERROR("Grid Freq Fault"));
IF(GETBIT(x3, 4) = 1, ADDERROR("PV Volt Fault"));
IF(GETBIT(x3, 5) = 1, ADDERROR("Bus Volt Fault"));
IF(GETBIT(x3, 6) = 1, ADDERROR("Bat Volt Fault"));
IF(GETBIT(x3, 7) = 1, ADDERROR("AC10mins Volt Fault"));
IF(GETBIT(x3, 8) = 1, ADDERROR("DCI OCP Fault"));
IF(GETBIT(x3, 9) = 1, ADDERROR("DCV OCP Fault"));
IF(GETBIT(x3, 10) = 1, ADDERROR("SW OCP Fault"));
IF(GETBIT(x3, 11) = 1, ADDERROR("RC OCP Fault"));
IF(GETBIT(x3, 12) = 1, ADDERROR("Isolation Fault"));
IF(GETBIT(x3, 13) = 1, ADDERROR("Temp Over Fault"));
IF(GETBIT(x3, 14) = 1, ADDERROR("BatConnDir Fault"));
IF(GETBIT(x3, 15) = 1, ADDERROR("Off-grid Overload"));
IF(GETBIT(x3, 16) = 1, ADDERROR("Overload"));
IF(GETBIT(x3, 17) = 1, ADDERROR("Bat Power Low"));
IF(GETBIT(x3, 18) = 1, ADDERROR("BMS Lost"));
IF(GETBIT(x3, 19) = 1, ADDERROR("Fan Fault"));
IF(GETBIT(x3, 20) = 1, ADDERROR("Low Temp Fault"));
IF(GETBIT(x3, 23) = 1, ADDERROR("INV Volt Sample Fault"));
IF(GETBIT(x3, 24) = 1, ADDERROR("Inner Comm Fault"));
IF(GETBIT(x3, 25) = 1, ADDERROR("INV EEPROM Fault"));
IF(GETBIT(x3, 26) = 1, ADDERROR("RCD Fault"));
IF(GETBIT(x3, 27) = 1, ADDERROR("Grid Relay Fault"));
IF(GETBIT(x3, 28) = 1, ADDERROR("Off-grid Relay Fault"));
IF(GETBIT(x3, 29) = 1, ADDERROR("PV ConnDir Fault"));
IF(GETBIT(x3, 30) = 1, ADDERROR("Charger Relay Fault"));
IF(GETBIT(x3, 31) = 1, ADDERROR("Earth Relay Fault"));

#error 2-5 Manager error code
var err := MODBUSR(A, 0x0043, Uint16);
IF(GETBIT(err, 0) = 1, ADDERROR("Power Type Fault"));
IF(GETBIT(err, 1) = 1, ADDERROR("Port OC Warning"));
IF(GETBIT(err, 2) = 1, ADDERROR("Mgr EEPROM Fault"));
IF(GETBIT(err, 4) = 1, ADDERROR("NTC Sample Invalid"));
IF(GETBIT(err, 5) = 1, ADDERROR("Battery Temperature Low"));
IF(GETBIT(err, 6) = 1, ADDERROR("Battery Temperature High"));
IF(GETBIT(err, 9) = 1, ADDERROR("Meter Fault"));
IF(GETBIT(err, 10) = 1, ADDERROR("Bypass Relay Fault"));
IF(GETBIT(err, 11) = 1, ADDERROR("Fan 2 Fault"));
```

Serviceattribute

Run Mode

```taphome
SWITCH(MODBUSR(A, 0x09, UInt16), 
0, "Waiting",
1, "Checking",
2, "Normal",
3, "Fault",
4, "Permanent Fault",
5, "Update",
6, "Off-grid waiting",
7, "Off-grid",
8, "Self Testing ",
9, "Idle",
10, "Standby",
"Other"
);
```

Model

```taphome
MODBUSR(H, 14, String, 4)
```

Serviceaktionen

Unlock admin

```taphome
MODBUSW(SH, 0x0000, Uint16, 2014);
```

Batterie 1 SOC Analogeingang Nur lesen

Ladezustand der primären Batterie in Prozent (0–100 %), in TapHome als Analogeingang 0–1 angezeigt

Register: A:0x001C UInt16 Einheit: % numeric

Eingangslevel lesen

```taphome
MODBUSR(A, 0x1C, UInt16)/100
```

Batterie 2 SOC Analogeingang Nur lesen

Ladezustand der zweiten Batterie in Prozent — nur bei der Doppelbatterie-Variante X3-ULT-30K funktionsfähig; andere Modelle liefern 0

Register: A:0x012D UInt16 Einheit: % numeric

Eingangslevel lesen

```taphome
MODBUSR(A, 0x012D, Uint16) / 100
```

Gesamt erzeugte Energie Variable Nur lesen

Kumulative Gesamtenergie, die vom AC-Port des Wechselrichters ins Netz eingespeist wurde, in kWh

Register: A:0x0052 LittleEndianInt32 Einheit: kWh numeric

Lesen

```taphome
MODBUSR(A, 0x52,LittleEndianInt32) / 10
```

Tages-/Aktuelle Wechselrichter-Erzeugung Stromzähler Nur lesen

Offizielle Vorlage: heutige Wechselrichter-Energie (0x0050, wird jede Nacht zurückgesetzt) und Register 0x0002, das nur für X1-Modelle dokumentiert ist und am X3-Ultra 0 liefert; die korrigierten Skripte lesen die gesamte PV-Energie (0x0094) und die Leistung PV1 + PV2 + PV3

Register: A:0x0050, A:0x0002 UInt16, Int16 Einheit: kWh / kW numeric

Gesamtverbrauch lesen

```taphome
MODBUSR(A, 0x50, UInt16) /10
```

Bedarf lesen

```taphome
MODBUSR(A,0x02, Int16)/1000
```

Netzeinspeisung (Zähler) Variable Nur lesen

Die offizielle Vorlage liest das Zähler-/CT-Leistungsregister 0x0046 mit falscher Wortreihenfolge (Int32), daher ist der Wert bedeutungslos; verwenden Sie Netz-Bezug / -Einspeisung oder ändern Sie das Skript auf die Energie ins Netz (0x0048, LittleEndianUint32, / 100)

Register: A:0x0046 Int32 Einheit: kW numeric

Lesen

```taphome
MODBUSR(A,0x0046, Int32)/1000
```

Netzfrequenz L1 Variable Nur lesen

Register: A:0x006D Int16 Einheit: Hz numeric

Lesen

```taphome
MODBUSR(A, 0x006D, Int16)/100
```

Netzfrequenz L2 Variable Nur lesen

Register: A:0x0071 Int16 Einheit: Hz numeric

Lesen

```taphome
MODBUSR(A,0x0071, Int16)/100
```

Netzfrequenz L3 Variable Nur lesen

Register: A:0x0075 Int16 Einheit: Hz numeric

Lesen

```taphome
MODBUSR(A,0x0075, Int16)/100
```

Lademodus Mehrwertschalter Lesen und Schreiben

Betriebsmodus des Batterieladers — Self Use, Feed-in Priority, Backup oder Manual. Schreibvorgang ist EEprom-basiert: nicht häufig aus Automatisierungen ändern

Register: H:0x008B → SH:0x001F UInt16 numeric

Werte / Zustände: Self Use · Feedin Priority · Backup · Manual · Peak Shaving

Schaltzustand lesen

```taphome
MODBUSR(H, 0x008B, Uint16)
```

Schaltzustand schreiben

```taphome
MODBUSW(SH, 0x001F, uint16, Mu)
```

Netzspannung L1 Variable Nur lesen

Register: A:0x006A Int16 Einheit: V numeric

Lesen

```taphome
MODBUSR(A,0x006A, Int16)/10
```

Netzspannung L2 Variable Nur lesen

Register: A:0x006E Int16 Einheit: V numeric

Lesen

```taphome
MODBUSR(A, 0x006E, Int16)/10
```

Netzspannung L3 Variable Nur lesen

Register: A:0x0072 Int16 Einheit: V numeric

Lesen

```taphome
MODBUSR(A,0x0072, Int16)/10
```

Netz-Bezug / -Einspeisung Variable Nur lesen

Echtzeit-Netzeinspeisung / -bezug vom externen Zähler (0x0046, korrekt als LittleEndianInt32 gelesen); positive Werte sind Einspeisung, negative Werte sind Bezug

Register: A:0x0046 LittleEndianInt32 Einheit: kW numeric

Lesen

```taphome
MODBUSR(A, 0x46,LittleEndianInt32)/1000
```

PV1-Leistung (Ost) Variable Nur lesen

DC-Leistung des PV-Strangs 1, typischerweise das ostorientierte Feld in der ursprünglichen slowakischen Vorlagenbenennung

Register: A:0x000A UInt16 Einheit: kW numeric

Lesen

```taphome
MODBUSR(A,0x0a, UInt16)/1000
```

PV2-Leistung (Ost) Variable Nur lesen

DC-Leistung des PV-Strangs 2, typischerweise das ostorientierte Feld in der ursprünglichen slowakischen Vorlagenbenennung

Register: A:0x000B UInt16 Einheit: kW numeric

Lesen

```taphome
MODBUSR(A,0x0b, UInt16)/1000
```

PV3-Leistung (West) Variable Nur lesen

DC-Leistung des PV-Strangs 3 — nur bei der 3-MPPT-Variante X3-ULT-30K funktionsfähig; andere Modelle liefern 0

Register: A:0x0124 UInt16 Einheit: kW numeric

Lesen

```taphome
MODBUSR(A, 0x0124, Uint16)/1000
```

Nachtladungs-SOC (Eigenverbrauch) Dimmer Lesen und Schreiben

Oberer SOC-Zielwert (10–100 %) für die Nachtladung der Batterie aus dem Netz im Eigenverbrauchsmodus. Schreibvorgang ist EEprom-basiert; die offizielle Vorlage schreibt ihn bei jeder Abfrage (etwa alle 55 s) — verwenden Sie das Schreibskript, das zuerst mit 0x0094 vergleicht

Register: H:0x0094 → SH:0x0063 UInt16 Einheit: % numeric

Level lesen

```taphome
MODBUSR(H, 0x0094, Uint16) / 100
```

Level schreiben

```taphome
MODBUSW(SH, 0x0063,  Uint16, Le * 100)
```

Batterietemperatur Temperatursensor Nur lesen

Register: A:0x0018 UInt16 Einheit: °C numeric

Temperatur lesen

```taphome
MODBUSR(A,0x0018, UInt16)
```

Max. Einspeiseleistungs-Grenze Variable Lesen und Schreiben

Maximal zulässige Einspeiseleistung ins Netz in kW (das Register zählt bei X3-Modellen in 10-W-Schritten). Schreibvorgang ist EEprom-basiert: nicht häufig aus Automatisierungen ändern

Register: H:0x00B6 → SH:0x0042 UInt16 Einheit: kW numeric

Lesen

```taphome
MODBUSR(H, 0x00B6, Uint16)/100
```

Schreiben

```taphome
MODBUSW(SH, 0x0042, Uint16, Va*100)
```

**Verbindung:** Modbus RTU • 19200 baud• 8N1 • Slave ID: $\[SlaveId]

Mögliche Verbesserungen (40)

- A:0x0017 BMS Connect State — 0=Disconnected, 1=Connected. Critical for battery health monitoring
- A:0x001A Grid Status — 0=On-grid, 1=Off-grid. Important for backup/off-grid scenarios
- A:0x0014, A:0x0015, A:0x0016 Battery Voltage / Current / Power — Battery 1 pack telemetry: 0.1V int16, 0.1A int16, 1W int16. Positive current/power = charge, negative = discharge
- A:0x0127, A:0x0128, A:0x0129 Battery 2 Voltage / Current / Power — Battery 2 pack telemetry. X3-ULT-30K only
- A:0x0131 Battery 2 Temperature — 1°C, int16. Battery 2 temperature. X3-ULT-30K only
- A:0x0008 Radiator Temperature — 1°C, int16. Inverter internal radiator/heatsink temperature
- A:0x0003, A:0x0004 PV1 / PV2 Voltage — 0.1V, uint16. Useful for string-level diagnostics
- A:0x0005, A:0x0006 PV1 / PV2 Current — 0.1A, uint16. Useful for string-level diagnostics
- A:0x0122, A:0x0123 PV3 Voltage / Current — 0.1V uint16 / 0.1A uint16. X3-ULT-30K only
- A:0x006B, A:0x006F, A:0x0073 Per-Phase Grid Current L1/L2/L3 — 0.1A, int16 each. Per-phase current for 3-phase monitoring
- A:0x006C, A:0x0070, A:0x0074 Per-Phase Grid Power L1/L2/L3 — 1W, int16 each. Per-phase grid power — essential for 3-phase load balancing
- A:0x0082–0x0087 Per-Phase Feed-in Power L1/L2/L3 (Meter) — 1W, int32 LE × 3 phases. Per-phase feed-in from meter/CT
- A:0x0048–0x0049 Feed-in Energy Total (Meter) — 0.01kWh, uint32 LE. Lifetime energy exported via meter
- A:0x004A–0x004B Consumed Energy Total (Meter) — 0.01kWh, uint32 LE. Lifetime energy consumed from grid via meter
- A:0x0094–0x0095 Solar Energy Total — 0.1kWh, uint32 LE. Cumulative PV production (all strings combined)
- A:0x0096 Solar Energy Today — 0.1kWh, uint16. Today's PV production
- A:0x0091, A:0x0092–0x0093 Charged Energy Today / Total — 0.1kWh, uint16 / uint32 LE. Energy charged to battery via inverter AC port
- A:0x001D–0x001E, A:0x0020 Battery Discharge Energy Today / Total — 0.1kWh, uint32 LE / uint16. Battery discharge energy
- A:0x0021–0x0022, A:0x0023 Battery Charge Energy Today / Total — 0.1kWh, uint32 LE / uint16. Battery charge energy
- A:0x00BA, A:0x00BB Battery Temp High / Low — 0.1°C, int16. Min/max battery cell temperatures
- A:0x00BC, A:0x00BD Cell Voltage High / Low — 0.001V, uint16. Min/max individual cell voltages — important for battery health
- A:0x00BE, A:0x00BF BMS User SOC / SOH — 1%, uint16. SOC and state-of-health as reported by BMS (may differ from A:0x001C)
- A:0x00B8, A:0x00B9 Meter 1 / Meter 2 Communication State — 0=Com Error, 1=Normal. Diagnostic for meter/CT connectivity
- A:0x0019 BDC Status — 0=discharge, 1=charge, 2=stop. Battery DC converter status
- A:0x008E–0x008F, A:0x0090 Off-grid Yield Total / Today — 0.1kWh, uint32 LE / uint16. Energy delivered in off-grid mode
- A:0x0088–0x008B On-grid / Off-grid Running Time — 0.1h, uint32 LE each. Lifetime runtime counters
- A:0x012F–0x0130 Inverter Total AC Power — 1W, int32. Sum of all 3 phases AC output. X3-ULT-30K only
- A:0x0042 Manager Error Code (as Value) — Note: register A:0x0043 is parsed in module readscript for bit-level fault decoding (11 manager fault bits). V3.29 protocol places Manager error at A:0x0042 and BMS error at A:0x0043 — template uses A:0x0043 as 'Manager error code' which may actually be BMS Warning Code (Table 2-6). Potential mismatch — verify
- Write SH:0x0020 Manual Mode — 0=Stop charge & discharge, 1=Force charge, 2=Force discharge. Requires Charger Use Mode = 3 (Manual)
- Write SH:0x0061 Self-Use Discharge Min SOC — 10–100%. Minimum SOC before discharge stops in Self-Use mode
- Write SH:0x0062 Self-Use Night Charge Enable — 0=Disable, 1=Enable night charging from grid. Currently always-on assumption in template — explicit enable would allow user toggle
- H:0x0093 Self-Use Discharge Min SOC (Read) — Readback of discharge min SOC limit
- H:0x008C Manual Mode Readback — 0=Stop, 1=Force charge, 2=Force discharge. Readback of current manual sub-mode
- H:0x008D Battery Type — 0=Lead Acid, 1=Lithium. Battery chemistry diagnostic
- H:0x0100–0x011F Modbus Power Control (Remote) — Active/reactive power targets, SOC targets, time-of-duration. Enables advanced energy management and grid services (peak shaving, FCR, etc.)
- A:0x0120, A:0x0121 BMS Relay State / Restart Flag — 0/1 each. BMS relay status and restart indicator
- H:0x001D Safety Code (Country Standard) — 0–39 enum. Grid safety standard (VDE0126, VDE4105, AS4777, G98/G99, EN50549, etc.) — useful for installation diagnostics
- H:0x0023 Power Limits Percent — 0–100%, uint16. Inverter output power limit
- H:0x00BA Inverter Power Type — Model variant code (15K/20K/25K/30K). Useful for runtime model detection
- H:0x0000–0x0006 Inverter Serial Number — 14-character ASCII string across 7 registers. Service attribute candidate

## Importparameter

Diese Werte geben Sie beim Import des XML ein.

| In der App abgefragt | Standard      |
|----------------------|---------------|
| Slave Id             | `1`           |
| IP address           | `192.168.1.0` |

## Quellen

- SolaX X1/X3-IES & X3-Ultra Modbus TCP & RTU Communication Protocol V3.29
  
  [www.gbc-solino.cz](https://www.gbc-solino.cz/files/uploads/FAQ%20SolaX/Hybrid-X1X3-IES-ULTRA-ModbusTCPRTU-V3.29.pdf) 2026-05-29
  
  [PDF](https://taphome.com/compatibility/devices/solax-hybrid-ultra-x3/manufacturer/Hybrid-X1X3-IES-ULTRA-ModbusTCPRTU-V3.29.pdf)
- SolaX X3-Ultra Series User Manual (Installation & Wiring)
  
  [www.solaxpower.com](https://www.solaxpower.com/uploads/file/x3-ultra-series-user-manual-en.pdf) 2026-05-29
  
  [PDF](https://taphome.com/compatibility/devices/solax-hybrid-ultra-x3/manufacturer/x3-ultra-series-user-manual-en.pdf)
- SolaX X3-Ultra Datasheet (Product Overview & Specs)
  
  [www.solaxpower.com](https://www.solaxpower.com/uploads/file/solax-x3-ultra-datasheet-en.pdf) 2026-05-29
  
  [PDF](https://taphome.com/compatibility/devices/solax-hybrid-ultra-x3/manufacturer/solax-x3-ultra-datasheet-en.pdf)
- Home Assistant SolaX Modbus Integration (X3-Ultra Gen5 Support)
  
  [github.com](https://github.com/wills106/homeassistant-solax-modbus) 2026-05-29
- SolaX KB: How to Get Device Data by Modbus TCP
  
  [kb.solaxpower.com](https://kb.solaxpower.com/solution/detail/ff8080818407e2a701840a22dec20032) 2026-05-29

Herstellerdokumente sind © ihrer jeweiligen Eigentümer. Sie werden so bereitgestellt, wie der Hersteller sie veröffentlicht hat, nur zur Information.

## Verwandte Dokumentation

- [Modbus Integration](https://taphome.com/de/compatibility/modbus-guide/)
- [Modbus](https://taphome.com/de/docs/integration/modbus/)
- [Einfache Konfiguration mit Vorlagen](https://taphome.com/de/docs/integration/modbus/templates/)
- [Modbus-Skripte und Prefetch](https://taphome.com/de/docs/script/modbus-scripts/)
- [Modbus-Funktionen](https://taphome.com/de/docs/script/modbus/)
- [Modbus-Datentypen](https://taphome.com/de/docs/script/modbus-data-types/)

