TapHome

SolaX Hybrid X1/X3 Gen 4

Modbus RTU
Eingereicht von
Zuletzt aktualisiert: 03. 2026
SolaX Hybrid X1/X3 Gen 4

Die SolaX X1-HYBRID und X3-HYBRID Gen 4 sind Energiespeicher-Wechselrichter, die sowohl einphasige (3–7,5 kW) als auch dreiphasige (5–15 kW) Konfigurationen unterstützen. Die TapHome-Vorlage kommuniziert über Modbus RTU per RS-485 und liest Eingangs- und Holding-Register für den Batterieladezustand, PV-String-Leistung, Netzleistungsfluss, Energiemengen, Lademodus und SOC für Nachtladung. Alle Schreibskripte sind auskommentiert, sodass die Vorlage effektiv schreibgeschützt ist.

Die Vorlage implementiert außerdem eine umfassende Fehlererkennung durch Analyse von 32-Bit-Wechselrichter-Fehlercodes und 16-Bit-Manager-Fehlercodes, die als Fehler in TapHome gemeldet werden.

Hardwareanschluss

Der SolaX Gen 4 Wechselrichter bietet einen RS-485 COM-Port für die Modbus RTU-Kommunikation an der Unterseite. Der COM-Port verwendet einen RJ45-Stecker.

SolaX X3-HYBRID G4 Unterseite — Anschlusslayout mit COM, BMS, Meter/CT, PV, BAT und GRID Anschlüssen

Pin-Belegung des COM-Anschlusses (RJ45):

PinBelegungBeschreibung
1Drycontact_A(in)Systemschalter-Anschluss
2Drycontact_B(in)Systemschalter-Anschluss
3+13V
4485ARS-485 Data+ (für TapHome)
5485BRS-485 Data− (für TapHome)
6GNDMasse
7Drycontact_A(out)Generator-Anschluss
8Drycontact_B(out)Generator-Anschluss

Verbinden Sie TapHome mit dem COM-Port des Wechselrichters:

  • Pin 4 (485A) am COM-Port des Wechselrichters zu A+/D+ am TapHome RS-485
  • Pin 5 (485B) am COM-Port des Wechselrichters zu B-/D- am TapHome RS-485
  • Pin 6 (GND) — empfohlen für zuverlässige Kommunikation

Der Wechselrichter selbst unterstützt Modbus TCP nicht nativ. Modbus TCP ist nur über das SolaX-Überwachungsmodul (WLAN-Dongle) verfügbar und wird von der TapHome-Vorlage nicht verwendet.

Für Installationen, bei denen eine RS-485-Verkabelung nicht praktikabel ist, bietet das Template SolaX Inverter (Cloud API) Überwachung über die SolaxCloud-Plattform per HTTPS — ohne physische Verbindung. Es unterstützt alle SolaX-Wechselrichtertypen, nicht nur den Gen 4 Hybrid.

Einige Holding-Register sind mit begrenzten EEprom-Schreibzyklen gekennzeichnet. Übermäßige Schreiboperationen können zu irreversiblen Hardwareschäden führen. Die TapHome-Vorlage hat alle Schreibskripte deaktiviert, daher ist dies bei der aktuellen Vorlage kein Problem.

Konfiguration

Modbus-Kommunikation aktivieren

Modbus RTU ist standardmäßig am RS-485 COM-Port des Wechselrichters verfügbar. Die folgenden Parameter müssen zwischen dem Wechselrichter und dem TapHome-Modul übereinstimmen:

  1. Slave ID – Standard ist 1, am Wechselrichter-Display konfigurierbar
  2. Baudrate – der Wechselrichter hat standardmäßig 19200 Baud, die TapHome-Vorlage verwendet jedoch 9600 Baud. Passen Sie einen der Werte an, damit beide übereinstimmen
  3. Datenformat – 8 Datenbits, keine Parität, 1 Stoppbit

Konfiguration am Wechselrichter-Display: Menu > Setting > Advance Setting > Modbus. Slave-Adresse und Baudrate einstellen. Die Baudrate kann auch aus dem Holding-Register H:0x00B0 gelesen und über Register 0x00CA geschrieben werden (Werte: 0=115200, 1=57600, 2=56000, 3=38400, 4=19200, 5=14400, 6=9600).

Um die Wechselrichtereinstellungen nicht ändern zu müssen, passen Sie die Baudrate in den TapHome-Moduleinstellungen auf 19200 an, um dem Wechselrichter-Standard zu entsprechen.

Kommunikationstiming

Das Protokoll erfordert ein Mindestintervall von 1 Sekunde zwischen aufeinanderfolgenden Modbus-Anweisungen und einen Zeichen-Lücken-Timeout von mindestens 100 ms. Der Antwort-Timeout beträgt 1 Sekunde. Die TapHome-Vorlage verwendet individuelle Poll-Intervalle pro Gerät (2,5 s bis 150 s), die diese Anforderungen erfüllen.

RS-485 COM-Port-Funktion

Register H:0x013E (485CommFunSelect) bestimmt, ob der RS-485-Port für die Modbus-Kommunikation (Wert 0) oder die EV-Lader-Kommunikation (Wert 1) verwendet wird. Stellen Sie sicher, dass dieser für die TapHome-Integration auf 0 (Modbus 485) eingestellt ist.

Gerätefunktionen

Batterieüberwachung
  • Battery SOC – liest den Batterieladezustand (A:0x1C) als Prozentsatz. Der Rohregisterwert in 1%-Einheiten wird durch 100 geteilt für den TapHome 0–1 Analogeingang (z.B. 85% wird zu 0,85)
  • Battery Temperature – liest die Batterietemperatur (A:0x18) in Grad Celsius. Polling alle 80 Sekunden
Solar-PV-Leistung
  • PV1 Power – DC-Leistungsausgang von PV-String 1 (A:0x0A), in kW angezeigt nach /1000-Umrechnung von Watt
  • PV2 Power – DC-Leistungsausgang von PV-String 2 (A:0x0B), in kW angezeigt nach /1000-Umrechnung von Watt
Netzleistung und Energiemessung
  • Grid Feed-in Power – Momentanleistung des Netzes (A:0x46, LittleEndianInt32) in kW. Positive Werte zeigen Einspeisung ins Netz, negative Werte zeigen Entnahme aus dem Netz
  • Daily / Actual Energy – kombiniert den täglichen Energieertrag vom Wechselrichter AC-Port (A:0x50, 0,1 kWh Auflösung) und die Echtzeit-Netzleistung (A:0x02) in kW. Das Netzleistungsregister ist X1-spezifisch (einphasig)
  • Total Energy – kumulativer Gesamtenergiertrag vom Wechselrichter AC-Port (A:0x52, LittleEndianInt32), in MWh angezeigt
Lademodus und Nachtladung
  • Charger Use Mode – liest den aktiven Solarlademodus (H:0x8B): Self Use Mode (0), Feedin Priority (1), Backup Mode (2) oder Manual Mode (3). Werte 4–9 sind reserviert. Das Schreibregister (H:0x1F) existiert in der Vorlage, ist aber auskommentiert, was es schreibgeschützt macht
  • Self-Use Night Charge SOC – liest den oberen SOC-Zielwert für die Nachtladung im Self-Use-Modus (H:0x94) als Prozentsatz. Das Schreibregister (H:0x63) und das Aktivierungsregister (H:0x62) sind beide auskommentiert, sodass die Nachtladekonfiguration nicht über TapHome geändert werden kann
Fehlererkennung

Das ReadScript auf Modulebene überwacht den Betriebsmodus des Wechselrichters (A:0x09) und zwei Fehlerregister:

  • Run Mode Fehler – löst einen Fehler aus, wenn Run Mode 3 (Fault) oder 4 (Permanent Fault) ist
  • Wechselrichter-Fehlercodes (A:0x40) – 32-Bit-Bitmap für 28 individuelle Fehler, einschließlich Netzspannungs-/Frequenzfehler, PV-Spannungsfehler, Batteriefehler, Isolationsfehler, Übertemperatur, Überstromschutz, Relaisfehler und Kommunikationsfehler
  • Manager-Fehlercodes (A:0x43) – 16-Bit-Bitmap für Leistungstyp-Fehler, EEPROM-Fehler, NTC-Sensorprobleme, Batterietemperaturwarnungen, Messgerätfehler und Lüfterfehler

Das Run Mode-Dienstattribut am Modul zeigt den aktuellen Wechselrichterstatus als Text an: Waiting, Checking, Normal, Fault, Permanent Fault, Update, Off-grid waiting, Off-grid, Self Testing, Idle oder Standby.

Weitere Funktionen

Der Wechselrichter bietet eine umfangreiche Registerkarte mit über 300 Holding-Registern und 200 Eingangsregistern. Bemerkenswerte Funktionen, die noch nicht in der Vorlage implementiert sind, umfassen die Spannungs- und Stromüberwachung pro PV-String (A:0x03–0x06), Batteriespannungs-/Strom-/Leistungsmessungen, BMS-Verbindungsstatus, Netz-Ein/Aus-Status, X3 Netzspannung/-strom/-leistung pro Phase (12 Register bei A:0x6A–0x75), kumulierte Netzeinspeisung und -entnahme (über Zähler), gesamte Solarenergieerzeugung, BMS-Benutzer-SOC und -SOH sowie minimale/maximale Batteriezellentemperatur und -spannung. Schreibfunktionen umfassen System-Ein/Aus-Steuerung, Lademodusauswahl, manuelles Erzwingen von Laden/Entladen, minimaler Entlade-SOC, Nachtladekonfiguration und Fernleistungsregelung mit Wirk-/Blindleistungszielen. Diese können in einem zukünftigen Vorlagen-Update hinzugefügt werden.

Die Vorlage liest derzeit die X1 (einphasige) Netzleistung bei A:0x02. Für X3 (dreiphasige) Installationen ist die phasenweise Netzleistung bei den Registern A:0x6C, A:0x70 und A:0x74 verfügbar, ist aber in der aktuellen Vorlage nicht enthalten.

Fehlerbehebung

Keine Kommunikation mit dem Wechselrichter
  1. Überprüfen Sie die RS-485-Kabelverbindungen: A+ zu A+, B- zu B-, GND zu GND
  2. Prüfen Sie, ob Register H:0x013E auf 0 eingestellt ist (Modbus 485-Modus, nicht EV-Lader)
  3. Bestätigen Sie, dass die Baudrate zwischen Wechselrichter und TapHome übereinstimmt – der Wechselrichter hat standardmäßig 19200, die Vorlage standardmäßig 9600
  4. Überprüfen Sie, ob die Slave ID in TapHome mit der Wechselrichtereinstellung übereinstimmt (Standard: 1)
  5. Stellen Sie sicher, dass kein anderer Modbus-Master an demselben RS-485-Bus angeschlossen ist – Modbus unterstützt nur einen einzigen Master
Falsche Battery SOC-Anzeige

Das Battery SOC-Register (A:0x1C) meldet Werte in 1%-Einheiten. Die Vorlage teilt durch 100 für den TapHome 0–1 Analogeingang. Wenn der angezeigte Wert falsch erscheint, überprüfen Sie, ob das TapHome-Gerät als AnalogInput (Bereich 0–1, nicht 0–100) konfiguriert ist.

Vorzeichenkonvention der Netzleistung

Grid Feed-in Power (A:0x46) verwendet eine Vorzeichenkonvention, bei der positive Werte den Export (Erzeugung/Einspeisung ins Netz) und negative Werte den Import (Entnahme aus dem Netz) bedeuten. Das Netzleistungsregister Daily/Actual Energy (A:0x02) kann bei Netzentnahme ebenfalls negative Werte anzeigen.

Registerunterschiede X1 vs X3

Einige Register sind modellspezifisch. Netzspannung (A:0x00), Strom (A:0x01) und Leistung (A:0x02) sind X1-Einphasenregister. Für dreiphasige X3-Modelle befinden sich die entsprechenden phasenweisen Messwerte bei A:0x6A–0x75. Die Vorlage verwendet das X1-Netzleistungsregister, das bei X3-Modellen möglicherweise nicht korrekt meldet.

Verfügbare Geräte

SolaX Hybrid Gen 4 Modul
Serviceattribute
BetriebsmodusBetriebszustand des Wechselrichters — Waiting, Checking, Normal, Fault, Permanent Fault, Update, Off-grid waiting, Off-grid, Self Testing, Idle, Standby

SOLAX Hybrid Gen 4

Lesen (Modul)
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
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"
);
Batterie-SOC Analogeingang Nur lesen

Batterieladezustand in Prozent (0–100 %) — in TapHome als Analogeingang 0–1 angezeigt

Register: A:0x1C UInt16 Einheit: % numeric

Batterie-SOC

Eingangslevel lesen
MODBUSR(A, 0x1C, UInt16)/100
Batterietemperatur Temperatursensor Nur lesen
Register: A:0x18 UInt16 Einheit: °C numeric

Batterietemperatur

Temperatur lesen
MODBUSR(A,0x0018, UInt16)
Tagesertrag / Aktuelle Energie Stromzähler Nur lesen

Kombiniert tägliche Energieeinspeisung ins Netz (kWh) und Echtzeit-Netzleistung (kW) — negative Netzleistung zeigt Bezug

Register: A:0x50, A:0x02 UInt16, Int16 Einheit: kWh / kW numeric

Tagesertrag / Aktuelle Energie

Gesamtverbrauch lesen
MODBUSR(A, 0x50, UInt16) /10
Bedarf lesen
MODBUSR(A,0x02, Int16)/1000
Lademodus Mehrwertschalter Nur lesen

Aktiver Solarlademodus — Self Use, Feedin Priority, Backup oder Manual (schreibgeschützt)

Register: H:0x8BH:0x1F UInt16 numeric
Werte / Zustände: Self Use Mode · Feedin Priority · Backup Mode · Manual Mode

Lademodus

Schaltzustand lesen
MODBUSR(H, 0x008B, Uint16)
Schaltzustand schreiben
#MODBUSW(H, 0x001F, uint16, Mu)
Netzeinspeisung Variable Nur lesen

Momentane Netzleistung in kW — positive Werte = Einspeisung, negative Werte = Bezug

Register: A:0x46 LittleEndianInt32 Einheit: kW numeric

Netzeinspeisung

Lesen
MODBUSR(A, 0x46,LittleEndianInt32)/1000
PV1-Leistung Variable Nur lesen
Register: A:0x0A UInt16 Einheit: kW numeric

PV1-Leistung

Lesen
MODBUSR(A,0x0a, UInt16)/1000
PV2-Leistung Variable Nur lesen
Register: A:0x0B UInt16 Einheit: kW numeric

PV2-Leistung

Lesen
MODBUSR(A,0x0b, UInt16)/1000
Nachtladungs-SOC (Eigenverbrauch) Dimmer Nur lesen

Oberer SOC-Zielwert für die Nachtladung im Eigenverbrauchsmodus (schreibgeschützt, 10–100 %)

Register: H:0x94H:0x63 UInt16 Einheit: % numeric

Nachtladungs-SOC (Eigenverbrauch)

Initialisierung
#MODBUSWNE(H, 0x0062, Uint16, 1);
Level lesen
MODBUSR(H, 0x0094, Uint16) / 100
Level schreiben
#MODBUSW(H, 0x0063, Uint16, Le * 100)
Gesamtenergie Variable Nur lesen

Kumulativer Gesamtenergiertrag vom Wechselrichter AC-Port in MWh

Register: A:0x52 LittleEndianInt32 Einheit: MWh numeric

Gesamtenergie

Lesen
MODBUSR(A, 0x52,LittleEndianInt32) / 1000
Verbindung: Modbus RTU • 9600 baud• 8N1 • Slave ID: $[SlaveId]
Mögliche Verbesserungen (25)
  • A:0x00 Grid Voltage (X1) — 0.1V, UInt16. X3 per-phase voltages at A:0x6A/0x6E/0x72
  • A:0x01 Grid Current (X1) — 0.1A, Int16. X3 per-phase currents at A:0x6B/0x6F/0x73
  • A:0x03, A:0x04 PV Voltage 1 & 2 — 0.1V, UInt16. Useful for string-level diagnostics
  • A:0x05, A:0x06 PV Current 1 & 2 — 0.1A, UInt16. Useful for string-level diagnostics
  • A:0x08 Radiator Temperature — 1°C, Int16. Inverter internal radiator/heatsink temperature
  • A:0x14 Battery Voltage — 0.1V, Int16. Battery pack voltage
  • A:0x15 Battery Current — 0.1A, Int16. Positive=charge, negative=discharge
  • A:0x16 Battery Power — 1W, Int16. Positive=charging, negative=discharging
  • A:0x17 BMS Connect State — 0=Disconnected, 1=Connected. Critical for battery health monitoring
  • A:0x1A Grid Status — 0=OnGrid, 1=OffGrid. Important for backup/off-grid scenarios
  • A:0x48–0x49 Feed-in Energy Total (Meter) — 0.01kWh, UInt32 LE. Cumulative energy exported to grid via meter
  • A:0x4A–0x4B Consumed Energy Total (Meter) — 0.01kWh, UInt32 LE. Cumulative energy consumed from grid via meter
  • A:0x6A–0x75 X3 Per-Phase Grid Readings — Voltage/current/power/frequency per phase R/S/T. 12 registers total. Essential for 3-phase monitoring
  • A:0x94–0x95 Solar Energy Total — 0.1kWh, UInt32 LE. Cumulative PV production (both strings combined)
  • A:0x96 Solar Energy Today — 0.1kWh, UInt16. Today PV production
  • A:0xBE BMS User SOC — 1%, UInt16. SOC as reported by BMS (may differ from A:0x1C)
  • A:0xBF BMS User SOH — 1%, UInt16. Battery state of health
  • Write 0x001C System ON/OFF — 0=OFF, 1=ON. Remote system power control
  • Write 0x001F Charger Use Mode (write) — Write register exists in template but is COMMENTED OUT. 0=Self Use, 1=Feed-in, 2=Backup, 3=Manual
  • Write 0x0020 Manual Mode — 0=Stop, 1=Force charge, 2=Force discharge. Requires Charger Use Mode = 3 (Manual)
  • Write 0x0061 SelfUse Discharge Min SOC — 10%–100%. Minimum SOC before discharge stops in Self-Use mode
  • H:0x8C Manual Mode Readback — 0=Stop, 1=Force charge, 2=Force discharge. Readback of current manual mode setting
  • A:0xBA, A:0xBB Battery Temp High/Low — 0.1°C, Int16. Min/max battery cell temperatures
  • A:0xBC, A:0xBD Cell Voltage High/Low — 0.001V, UInt16. Min/max individual cell voltages. Important for battery health
  • Write 0x007C–0x0082 Remote Power Control — Active/reactive power targets, duration. Enables advanced energy management and grid services

Quellen