The SolaX X3-Ultra (X3-ULT-15K, 20K, 25K, 30K) is a three-phase hybrid PV and battery inverter. This community template by Martin Keller connects it to TapHome over Modbus RTU on the COM 1 RS-485 port (19200 baud, 8N1) and is built on the SolaX Modbus protocol V3.29 read registers and the SolaX Modbus protocol V001.02. It provides a complete set of meters for the Energy Dashboard, battery, grid and fault monitoring, inverter settings that are written only when their value really changes, and remote AC power control (SolaX remote control mode 1) — charging the battery from the grid or discharging it into the grid on command, for example by spot electricity prices.
How to get the template
Community templates are not offered in the TapHome app’s template list. Sign in to portal.taphome.com, download the XML of this template and import it into the Core on the Modbus RTU interface (or on a Modbus TCP interface when an RS-485-to-Ethernet gateway is used). For monitoring without remote power control, the official template SolaX X3 Hybrid Ultra is available. A module imported earlier from the official template does not update itself — import this template as a new module and remove the old one.
Hardware connection
The X3-Ultra has a single multi-function COM 1 port (RJ45 connector with a labeled cable fixture). The same physical pins serve different functions depending on which labeled position of the cable fixture is used. 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 | same signal as pin 1 |
| 8 | REMOTE_485B | same signal as pin 2 |
Pins 3–6 belong to the SolaX PARALLEL_485 channel and are reserved for SolaX products (Adapter Box G2, EV-Charger, DataHub). Pins 1, 2, 7 and 8 are intended for devices other than SolaX products. Do not connect a third-party Modbus master to pins 3–6.
RS-485 wiring

Wiring rules from the X3-Ultra user manual (section 8.6.4):
- Cable type: network cable CAT5E or CAT6
- Max length: the RS-485 communication cable must not exceed 30 m
- RJ45 terminal: the existing connector of the cable is cut off and a new RJ45 terminal is crimped according to the pin assignment; not all devices accept a fully wired 8-pin network cable
- Cable fixture position: the RJ45 terminal goes into the slot labeled RS485 (not into Parallel-1, Parallel-2, BMS-1, BMS-2 or DRM); the connector clicks into the COM 1 port and is secured with the swivel nut
- Single Modbus master: only one Modbus master may use the port. Disconnect other Modbus monitoring on the same port, otherwise the inverter answers both and the readings become unstable
The user manual gives no rule for RS-485 bus termination on the COM 1 RS485 position.
Meter or CT for grid values
The grid devices of this template (Grid - power balance, From Grid, To Grid, Load) read the feed-in power that the inverter measures with its own meter or CT. The meter or CT is wired to the COM 2 port (Meter/CT: METER_485A on pin 4, METER_485B on pin 5, or the CT inputs) and set up on the inverter display in Menu → Setting → Advance Setting → Meter/CT Setting. This is a separate RS-485 line — do not connect TapHome to it.
Connection options
- Direct Modbus RTU: wire the COM 1 RS485 pair directly to the RS-485 bus of the TapHome Core. Lowest latency, recommended for remote power control.
- RS-485-to-Ethernet gateway: when the inverter is far from the TapHome Core, a third-party RS-485-to-Ethernet gateway on the COM 1 RS485 pair can be used; the template is then imported on a Modbus TCP interface.
- SolaX monitoring module: the inverter itself does not support Modbus TCP. Modbus TCP (port 502) is only available through a SolaX monitoring module, with a query cycle of about 1 second (protocol V3.29).
Configuration
Enabling Modbus communication on the inverter
On the inverter LCD navigate to:
| |
The Advance Setting menu requires the installer password (initially 2014 according to the user manual, which recommends changing it). In the Modbus menu set the Baud Rate and the Address of the external communication protocol:
| Parameter | Template default | Inverter default (protocol V3.29) |
|---|---|---|
| Modbus address (Slave ID) | 1 | 1 |
| Baud rate | 19200 | 19200 |
| Parity | None | None |
| Data bits | 8 | 8 |
| Stop bits | 1 | 1 |
The baud rate must be the same on the inverter and on the TapHome Modbus RTU interface. If communication fails, check the baud rate first.
The inverter also reports the Modbus address in holding register H:0x00AF and the baud rate in holding register H:0x00B0 (protocol V3.29).
Import parameter
When the template is imported, the import parameter Modbus Slave ID (default 1) must match the Modbus address set on the inverter display.
Device capabilities
Energy Dashboard
| Device | Reading |
|---|---|
| PV Production | PV1 + PV2 + PV3 input power (A:0x000A, A:0x000B, A:0x0124) in kW; total PV energy (A:0x0094–0x0095) in kWh. PV1–PV3 power and the inverter’s total AC output energy (A:0x0052) are service attributes. |
| From Grid / To Grid | Import and export part of the grid power from the meter or CT (A:0x0046–0x0047, low word first) with their total energy counters (A:0x004A and A:0x0048, 0.01 kWh). |
| To Battery / From Battery | Charging and discharging part of battery 1 power (A:0x0016) with total charge and discharge energy (A:0x0021, A:0x001D). |
| Load | Calculated house load: inverter AC power minus grid export. SolaX has no load register; loads on the EPS (backup) output are not included. |
| Battery (SOC) | Battery 1 state of charge (A:0x001C). Remaining and chargeable energy (A:0x0118, A:0x0116) are service attributes. |
Energy Manager
For the Energy Manager smart rule select Grid - power balance. It is signed: positive when importing from the grid, negative when exporting surplus. The From Grid and To Grid meters never go negative and do not show surplus.
Monitoring
- Battery 2 - state of charge — the second battery terminal (BAT 2), with its power and temperature as service attributes; reads 0 without a second battery
- Battery - temperature — read as a signed value, so temperatures below 0 °C are shown correctly
- Inverter - AC power — sum of the three phase powers at the inverter AC port in kW
- Grid - voltage L1 — with grid voltage L2, L3 and the three grid frequencies as service attributes
Inverter settings
| Device | Read | Write |
|---|---|---|
| Settings - work mode | H:0x008B: Self use, Feed-in priority, Backup, Manual, Peak shaving, Time of use (the last two depend on the firmware) | 0x001F |
| Settings - manual mode | H:0x008C: Stop charge and discharge, Force charge, Force discharge (effective only in work mode Manual) | 0x0020 |
| Settings - self-use minimum SOC | high byte of H:0x0093 | 0x0061 |
| Settings - night charge from grid | low byte of H:0x0093 | 0x0062 |
| Settings - night charge target SOC | H:0x0094 | 0x0063 |
| Settings - export limit | H:0x00B6, in kW (10 W per count on X3) | 0x0042 |
SolaX reads these settings from other addresses than it writes them, so TapHome’s built-in “write only if different” function cannot be used. Each write script therefore reads the setting first and writes (function 06) only when the new value differs; when the inverter reports the settings as locked, it first writes the settings password 2014 to register 0x0000. The minimum SOC and the night charge target never go below 10 % (the SolaX range). None of these devices writes periodically.
These settings are EEPROM registers (marked ★ by SolaX, about 1 million write cycles). Change them rarely and never from frequent automations — for spot-price charging and discharging use Remote control - AC power target.
Remote control - AC power target
This device uses SolaX remote control (VPP) mode 1 — power control at the inverter AC port.
- Sign: a positive target means the inverter takes power at its AC port (it charges the battery, from the grid if PV is not enough); a negative target means it outputs power (it discharges the battery, and what the house does not use goes to the grid). Value in kW.
- 0 ends remote control: the template writes mode 0 once and the inverter returns to its work mode. Targets below 0.5 W count as 0.
- Any other value: if the inverter is locked, the template first writes the settings password 2014 (the unlock is lost after every inverter restart), then writes the 13 registers
0x007C–0x0088in one Modbus request (function 0x10): mode 1, target, duration 120 s and timeout 60 s. The command is repeated every 60 s while the target is not 0. If TapHome stops sending it, the inverter keeps the target for up to 2 minutes, holds 0 W at its AC port for 1 more minute and then returns to its work mode on its own. - Work mode Manual blocks remote control. SolaX does not start remote control while the inverter is in work mode Manual — switch it to Self use (or another mode) first.
- The inverter limits the target to the range shown in the module attributes (remote control minimum and maximum target).
- The module action End remote control writes mode 0 immediately. While the target is not 0, the next repetition starts remote control again — set the target to 0 to stop it for good.
- Do not combine this device with remote control from SolaX Cloud or an energy aggregator: while the target is 0, the template ends any remote control mode within 60 s.
- Remote control needs a Core that writes all 13 registers in one request. That is the case on every Core since 2022 when the module keeps
MaxPrefetchGroupSize32 from this template. - The service attribute Actual AC power shows the active power the inverter reports at its AC port in W (
A:0x0106).
SolaX does not mark the remote control registers (
0x007C–0x0088) as EEPROM registers in its protocol, but it does not confirm the opposite in writing either. This template relies on the experience of the Home Assistant and openHAB communities, which write these registers every few seconds to minutes.
Module attributes and actions
- Run mode (service attribute) — inverter state as text: Waiting, Checking, Normal, Fault, Permanent fault, Update, Off-grid waiting, Off-grid, Self testing, Idle, Standby, Remote control (code 20); other codes show as Other
- Machine type (service attribute) — X1 (single-phase) or X3 (three-phase), holding register
H:0x0105 - Settings lock (service attribute) — Locked or Unlocked (
A:0x0054) - Remote control mode (service attribute) — active remote control mode (
A:0x0100): Off, Power control, Energy target, SOC target - Remote control - maximum target / minimum target (service attributes) — allowed power target range reported by the inverter in W (
A:0x010A,A:0x010C) - Unlock settings (password 2014) (service action) — writes
2014to register0x0000 - End remote control (service action) — writes mode 0 to the remote control registers
0x007C–0x0088
Fault detection
The module read script reports a TapHome error when the run mode (A:0x0009) is 3 (Fault) or 4 (Permanent fault). It also parses two error registers bit by bit, each fault with its own error code:
- Inverter fault code (32-bit,
A:0x0040–A:0x0041, read low word first) — all 32 bits, from TZ Protect Fault, grid, PV, bus and battery voltage faults, isolation and overtemperature faults to Parallel Fault, Hard Limit Fault and the relay faults - Manager error code (16-bit,
A:0x0043) — Power Type Fault, Mgr EEPROM Fault, NTC Sample Invalid, battery temperature low and high, Meter Fault, Bypass Relay Fault and Fan 2 Fault as errors, Port OC Warning as a warning
Troubleshooting
No communication with the inverter
- Verify that the RS-485 wires are on the REMOTE_485A / REMOTE_485B pins (1 + 2 or 7 + 8 in the RS485 position of the COM 1 cable fixture), not on the PARALLEL_485 pins 3–6 and not on the meter line of COM 2
- Check that the baud rate matches between the inverter (
Menu → Setting → Advance Setting → Modbus) and the TapHome Modbus RTU interface — 19200 by default - Confirm that the import parameter Modbus Slave ID matches the inverter’s Modbus address (default
1) - Make sure only one Modbus master is connected to the port
- Swap the A and B wires if the cable polarity is uncertain
- Confirm the RS-485 cable does not exceed 30 m
Remote control target returns to 0 right after it is set
The inverter is in work mode Manual, the firmware does not support remote control mode 1, or the target is outside the minimum and maximum target shown in the module attributes. Check the work mode first.
Settings write is rejected
The inverter is locked. Run the module action Unlock settings (password 2014); the lock comes back after every inverter restart (module attribute Settings lock).
Grid values are 0 or Load looks wrong
Grid - power balance, From Grid, To Grid and Load depend on the inverter’s meter or CT. Check its wiring on COM 2 and its setup in Menu → Setting → Advance Setting → Meter/CT Setting.
PV3 power or Battery 2 shows 0
PV3 exists only on the three-tracker models (for example X3-ULT-25K and X3-ULT-30K, see the MPPT count in the user manual); Battery 2 only when a second battery is connected to BAT 2. Hide the unused devices in TapHome.
SolaX