
The SolaX X3 Hybrid Ultra (Gen5) is a three-phase hybrid PV/battery inverter rated from 10 kW to 30 kW. The TapHome template communicates with the inverter over Modbus RTU on the COM 1 RS-485 port (REMOTE_485A / REMOTE_485B pins) and implements the SolaX Modbus protocol V3.29 register map. It reads PV string power, battery state of charge and temperature, three-phase grid voltage and frequency, lifetime and daily energy totals, feed-in power from the external meter, and exposes writeable Charger Use Mode, Self-Use Night Charge SOC and Max Feed-in Power Limit.
The X3-Ultra does not support Modbus TCP natively — TCP is only available through a SolaX monitoring module (Pocket WiFi 3.0, Pocket LAN or DataHub) which bridges RTU to TCP at port 502. For remote installations TapHome can also be connected via a third-party RS-485-to-Ethernet gateway (e.g. Waveshare, USR-DR302) configured as Modbus RTU-over-TCP.
Models
The TapHome template covers the full X3-Ultra series. PV3 and Battery 2 SOC sensors are only functional on the 3-MPPT / dual-battery 30 kW variant.
| Model | Rated AC Power | MPPT trackers | Notes |
|---|---|---|---|
| X3-ULT-15K | 15 kW | 2 | Standard 2-MPPT |
| X3-ULT-15KP | 15 kW | 3 | 3-MPPT (model code H3BC) |
| X3-ULT-19.9K | 19.9 kW | 2 | Standard 2-MPPT |
| X3-ULT-20K | 20 kW | 2 | Standard 2-MPPT (model code H3BD) |
| X3-ULT-20KP | 20 kW | 3 | 3-MPPT |
| X3-ULT-25K | 25 kW | 3 | Model code H3BF |
| X3-ULT-25KW | 25 kW | 3 | — |
| X3-ULT-30K | 30 kW | 3 | Dual-battery, PV3 active (model code H3BG) |
| X3-ULT-10K-GLV | 10 kW | — | Low-voltage variant (GLV) |
| X3-ULT-15K-GLV | 15 kW | — | Low-voltage variant (GLV) |
The model code can be read at runtime through the Model module attribute (register H:0x000E, 4-character ASCII string).
Compatibility scope
The template implements the subset of the SolaX Modbus protocol V3.29 that is most commonly used for home energy management — 19 devices, 2 module-level service attributes and one service action. The full protocol exposes many more registers; the most useful unimplemented capabilities (per-phase grid power and current, battery voltage/current/power, BMS state, off-grid running time, remote power control, etc.) are listed in the Possible improvements section below.
Hardware connection
The X3-Ultra has a single multi-function COM 1 port (RJ45-style connector with a labeled cable fixture). The same physical pins serve different functions depending on which labeled position on the cable fixture you wire into. For third-party Modbus integration use the RS485 position — the REMOTE_485A and REMOTE_485B lines.
COM 1 port pinout

Pin assignment of the RS485 position (the only position relevant to TapHome):
| Pin | Signal | TapHome wiring |
|---|---|---|
| 1 | REMOTE_485A | A+ / D+ |
| 2 | REMOTE_485B | B− / D− |
| 3 | PARALLEL_485AA | do not use (SolaX accessories only) |
| 4 | PARALLEL_485AA | do not use (SolaX accessories only) |
| 5 | PARALLEL_485BB | do not use (SolaX accessories only) |
| 6 | PARALLEL_485BB | do not use (SolaX accessories only) |
| 7 | REMOTE_485A | duplicate of pin 1 (for daisy-chain) |
| 8 | REMOTE_485B | duplicate of pin 2 (for daisy-chain) |
Pins 3–6 belong to the SolaX-proprietary PARALLEL_485 channel and are reserved for SolaX accessories (Adapter Box G2, EV-Charger, DataHub, parallel inverters). Do not connect a third-party Modbus master to those pins.
Older SolaX inverters (Gen4 X3-Hybrid) used pin 4 = 485A and pin 5 = 485B. The X3-Ultra COM 1 pinout is different — always verify the cable fixture labeling on your unit before crimping. Some community documentation still references the older Gen4 pinout.
RS-485 wiring

Wiring rules from the X3-Ultra user manual (section 8.6.4):
- Cable type: standard Cat5 or Cat6 UTP twisted pair
- Max length: 30 m of RS-485 cable between the inverter and the TapHome CCU
- Polarity matters: if there is no communication, swap A and B
- Single Modbus master: only one master is allowed on the bus. If a SolaX monitoring module is sharing the line, expect contention
The COM 1 cable fixture has dedicated labeled positions for each channel — wire your Cat5/Cat6 cable into the slot labeled RS485 (not into Parallel-1, Parallel-2, BMS-1, BMS-2 or DRM).
Connection options
- Direct Modbus RTU CCU: wire the COM 1 RS485 pair directly to the TapHome Modbus RTU CCU. Lowest latency, recommended for real-time control.
- RS-485-to-Ethernet gateway (Modbus RTU-over-TCP): for installations where the inverter is far from the TapHome Core, use a Waveshare RS485-to-Ethernet, USR-DR302 or similar gateway configured as Modbus RTU-over-TCP on port 502. The template’s
IpAddressimport parameter accommodates this pattern. - SolaX Pocket WiFi 3.0 / Pocket LAN / DataHub (Modbus TCP): if the SolaX monitoring module is already installed, it bridges RTU to TCP at port 502 with a query cycle of approximately 1 second — slower than direct RTU and not suitable for real-time control loops.
Configuration
Enabling Modbus communication on the inverter
On the inverter LCD navigate to:
| |
The Advanced Settings menu may require an installer password. Verify or set the following:
| Parameter | TapHome template default | Inverter default | Range |
|---|---|---|---|
| Modbus Address (Slave ID) | 1 | 1 | 1–255 |
| Baud rate | 19200 | 19200 | 9600 / 19200 / 38400 / 57600 / 115200 |
| Parity | None | None | None / Odd / Even |
| Data bits | 8 | 8 | — |
| Stop bits | 1 | 1 | 1 or 2 |
The baud rate must match between the inverter and TapHome. Protocol V3.29 specifies 19200 as the X3-Ultra default; some older SolaX templates and documentation still mention 9600. If communication fails, check the baud rate first.
The inverter can also expose the Modbus slave address through holding register H:0x00AC and the baud rate through holding register H:0x00AD.
Import parameters in TapHome
When importing the template into TapHome, two parameters must be set:
| Parameter | Purpose |
|---|---|
| IpAddress | IP address of the RS-485-to-TCP gateway (or the SolaX Pocket WiFi / LAN monitoring module). Leave at default if the inverter is connected directly to the TapHome Modbus RTU CCU. |
| SlaveId | Modbus slave address of the inverter (default 1). Must match the inverter’s Modbus Address setting. |
Communication timing
The SolaX Modbus protocol requires a minimum interval between successive requests and uses individual poll intervals per device in the template (ranging from a few seconds for grid voltage / frequency up to 80 s for battery temperature). Do not aggressively poll any device — the inverter throttles requests internally.
Device capabilities
Battery monitoring
- Battery 1 SOC — primary battery state of charge as a 0–1 analog input (raw register in 1 % units, divided by 100 for the TapHome 0–1 range)
- Battery 2 SOC — second battery state of charge, functional only on the X3-ULT-30K dual-battery variant; other models read 0
- Battery Temperature — battery pack temperature in °C, polled every 80 seconds
Solar PV power
- PV1 Power (East) — DC power output from PV string 1 in kW
- PV2 Power (East) — DC power output from PV string 2 in kW
- PV3 Power (West) — DC power output from PV string 3 in kW, functional only on 3-MPPT models (X3-ULT-30K); other models read 0
The “East” / “West” suffixes are a directional naming convention inherited from the original Slovak template — the PV string number corresponds to the physical MPPT input on the inverter, not to the actual array orientation.
Grid and energy metering
- Grid Voltage L1 / L2 / L3 — per-phase grid voltage in volts (registers
A:0x006A,A:0x006E,A:0x0072) - Grid Frequency L1 / L2 / L3 — per-phase grid frequency in hertz (registers
A:0x006D,A:0x0071,A:0x0075) - Grid Feed-in Power (Meter) — instantaneous feed-in power from the external SolaX meter / CT in kW; positive = exporting, negative = importing
- Grid Import / Export Power — alias of Grid Feed-in Power (same underlying register
A:0x0046); kept for legacy naming compatibility - Daily / Actual Inverter Production — combines today’s energy delivered to the grid (kWh, register
A:0x0050) with the real-time inverter grid power (kW, registerA:0x0002) - Total Energy Produced — lifetime cumulative energy delivered from the inverter AC port to the grid in kWh
Charger and feed-in control (writeable)
- Charger Use Mode — battery charger operating mode: Self Use, Feed-in Priority, Backup or Manual
- Self-Use Night Charge SOC — upper SOC target (10–100 %) for charging the battery from the grid during the night in Self-Use mode
- Max Feed-in Power Limit — maximum allowed export power as a percentage of nominal capacity (10–100 %)
EEprom write limit applies to all three writeable devices above (Charger Use Mode →
SH:0x001F, Night Charge SOC →SH:0x0063, Max Feed-in Power →SH:0x0042). The underlying registers are EEprom-backed with limited write cycles — frequent writes (every few seconds in an automation loop) will permanently damage the inverter EEprom. Use manual changes or low-frequency scheduled writes only.
Module-level attributes and actions
- Run Mode (service attribute) — inverter operating state as text: Waiting, Checking, Normal, Fault, Permanent Fault, Update, Off-grid waiting, Off-grid, Self Testing, Idle, Standby
- Model (service attribute) — inverter model code as a 4-character ASCII string (H3BC = 15K/15KP, H3BD = 19.9K/20K/20KP, H3BF = 25K, H3BG = 30K)
- Unlock Admin (service action) — writes constant
2014toSH:0x0000to unlock advanced inverter settings (rarely needed, only for diagnostics)
Fault detection
The module ReadScript monitors the Run Mode register (A:0x0009) and reports a TapHome system error when the inverter enters state 3 (Fault) or 4 (Permanent Fault). Two error registers are parsed bit-by-bit:
- Inverter fault codes (32-bit,
A:0x0040–A:0x0041) — 31 individual faults including grid voltage / frequency faults, PV voltage faults, battery faults, isolation faults, overtemperature, overcurrent protection, relay faults and communication errors - Manager error codes (16-bit,
A:0x0043) — 11 fault bits including power-type faults, EEPROM errors, NTC sensor issues, battery temperature warnings, meter faults and fan faults
Individual faults surface as discrete errors in the TapHome system log so installers can pinpoint the failing subsystem without reading the inverter LCD.
Troubleshooting
No communication with the inverter
- Verify the RS-485 wiring is on the REMOTE_485A / REMOTE_485B pins (1+2 or 7+8 on the COM 1 RS485 position), not on the PARALLEL_485 pins 3–6
- Check that the baud rate matches between the inverter (
Menu → Setting → Advance Setting → Modbus) and the TapHome module — both must be 19200 by default - Confirm the Slave ID matches (default
1) - Verify only one Modbus master is connected to the RS-485 bus — Modbus does not support multi-master
- Swap the A and B wires if the cable polarity is uncertain
- Confirm the cable does not exceed 30 m of total RS-485 run
PV3 or Battery 2 SOC reads zero
These devices are only functional on the X3-ULT-30K (3-MPPT / dual-battery variant). On smaller models the registers A:0x0124 (PV3 power) and A:0x012D (Battery 2 SOC) return zero. Hide the unused devices in the TapHome UI for non-30K installations.
Battery temperature reads an unexpectedly high value
The Battery Temperature register (A:0x0018) is read as UInt16 by the template, but the underlying value is actually signed. Sub-zero temperatures (e.g. −1 °C) wrap around to large positive values (e.g. 65535). For climates where the battery can drop below 0 °C, treat any value above ~1000 °C as a negative reading.
Writes to Charger Mode / Night Charge SOC / Max Feed-in are not taking effect
These registers are EEprom-backed and the inverter rate-limits writes to protect the EEprom. Ensure the writes are infrequent (manual or scheduled, not in a tight automation loop). Some firmware versions also require the Charger Use Mode to be set to Manual (3) before certain force-charge / force-discharge sub-modes will respond.
Modbus TCP via SolaX monitoring module is slow
The Pocket WiFi 3.0 / Pocket LAN / DataHub bridges RTU to TCP with a query cycle of approximately 1 second and only handles one Modbus TCP client at a time. If the SolaX Cloud monitoring is also pulling data, expect contention. For real-time control (frequency response, peak shaving) use direct Modbus RTU or a dedicated third-party RS-485-to-Ethernet gateway.
