The SolaX X1-HYBRID and X3-HYBRID Gen 4 are energy storage inverters with PV and battery, available as single-phase (3–7.5 kW) and three-phase (5–15 kW) models. This community template is the official TapHome SolaX Gen 4 template with its readings corrected against the SolaX Modbus protocol (V3.21 and V001.02). It communicates via Modbus RTU over RS-485 and reads battery state of charge and temperature, PV string power, grid power flow, energy totals, charger mode and night charge SOC. Device names are the same as in the official template, so an older import can be compared device by device. All write scripts stay commented out, as in the official template, so the template is read-only.
The module also parses the 32-bit inverter fault code and the 16-bit manager error code and reports every fault in TapHome with its own error code.
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. A module imported earlier from the official template SolaX Hybrid X1/X3 Gen 4 does not update itself — either import this template as a new module, or correct the scripts of the old module as shown in the table under “What this template corrects” below.
Hardware connection
The SolaX Gen 4 inverter provides an RS-485 COM port for Modbus RTU communication on the bottom panel. The COM port uses an RJ45 connector.

COM terminal pin assignment (RJ45):
| Pin | Assignment | Description |
|---|---|---|
| 1 | Drycontact_A(in) | System switch connection |
| 2 | Drycontact_B(in) | System switch connection |
| 3 | +13V | — |
| 4 | 485A | RS-485 data+ (for TapHome) |
| 5 | 485B | RS-485 data− (for TapHome) |
| 6 | GND | Ground |
| 7 | Drycontact_A(out) | Generator connection |
| 8 | Drycontact_B(out) | Generator connection |
Connect TapHome to the inverter COM port:
- Pin 4 (485A) on inverter COM to A+/D+ on TapHome RS-485
- Pin 5 (485B) on inverter COM to B-/D- on TapHome RS-485
- Pin 6 (GND) connection recommended for reliable communication
The SolaX manual specifies a CAT5E network cable crimped into the RJ45 plug supplied with the inverter, and a COM cable length of at most 30 m.
Pin 3 (+13V) and pin 6 (GND) must not be connected together. Insulate the pins that are not used.
The inverter itself does not support Modbus TCP natively. Modbus TCP is only available through the SolaX monitoring module (Wi-Fi dongle) and is not used by this template.
For installations where RS-485 wiring is not practical, the SolaX Inverter (Cloud API) template provides monitoring through the SolaxCloud platform via HTTPS — no physical connection required. It supports all SolaX inverter types, not just the Gen 4 Hybrid.
Charger use mode and the night charge settings are EEPROM registers in the inverter (marked ★ by SolaX, about 1 million write cycles). Excessive write operations can cause irreversible hardware damage — never enable a write on them that runs periodically. This template has all write scripts disabled.
Configuration
Enabling Modbus communication
Modbus RTU is available on the inverter’s RS-485 COM port by default. The following parameters must match between the inverter and the TapHome module:
- Slave ID – default is 1, configurable on the inverter display. The template asks for it as its only import parameter, Modbus Slave ID (default 1)
- Baud rate – 19200 baud, the SolaX factory default; the template uses 19200 as well. If the inverter was set to another speed (for example 9600), change either the inverter setting or the speed of the TapHome interface so that both match
- Data format – 8 data bits, no parity, 1 stop bit
To configure on the inverter display: Menu > Setting > Advance Setting > Modbus. Set the slave address and baud rate. Advanced settings require the installer password, which is available from the dealer. The baud rate can also be read from holding register H:0x00B0 and written via register 0x00CA (values: 0=115200, 1=57600, 2=56000, 3=38400, 4=19200, 5=14400, 6=9600).
In TapHome, the template is then imported on the Core’s RS-485 Modbus RTU interface set to the same speed and data format, with the inverter’s Slave ID.
Communication timing
The protocol requires a minimum interval of 1 second between consecutive Modbus instructions and a character-gap timeout of at least 100 ms. The response timeout is 1 second. The template uses individual poll intervals per device (2.5 s to 150 s) which satisfy these constraints.
RS-485 COM port function
Register H:0x013E (485CommFunSelect) determines whether the RS-485 port is used for Modbus communication (value 0) or EV Charger communication (value 1). Ensure this is set to 0 (Modbus 485) for TapHome integration.
Device capabilities
Battery monitoring
- Battery (SOC) – reads battery state of charge (A:0x001C) as a percentage, every 15 seconds. The raw register value in 1% units is divided by 100 for the TapHome 0–1 analog input range (e.g. 85% becomes 0.85)
- Battery Temperature – reads battery temperature (A:0x0018) in degrees Celsius as a signed value (Int16), so temperatures below 0 °C are shown correctly. Polled every 80 seconds
Solar PV power
- PV1 – DC power output from PV string 1 (A:0x000A), displayed in kW after /1000 conversion from watts
- PV2 – DC power output from PV string 2 (A:0x000B), displayed in kW after /1000 conversion from watts
PV1 and PV2 are plain values without an energy type, so they do not count twice in the Energy Dashboard.
Grid power and energy metering
- Purchase/Feed to Grid – instantaneous grid power (A:0x0046–0x0047, LittleEndianInt32) in kW, a plain value without an energy type. Positive values indicate feed-in to the grid, negative values indicate purchase from the grid. The inverter takes this value from the meter or CT connected to it
- Daily/Actual Energy – the PV production meter for the Energy Dashboard. Its power is PV1 + PV2 (A:0x000A + A:0x000B) in kW and its total is the total PV energy (A:0x0094–0x0095, SolarEnergyTotal, 0.1 kWh units) in kWh. Despite its name, the total does not reset at night
- Total Energy – lifetime cumulative energy output from the inverter AC port (A:0x0052–0x0053, LittleEndianUint32, 0.1 kWh units), displayed in kWh
Charger mode and night charge
- Charger Use Mode – reads the active solar charger mode (H:0x008B): Self Use Mode (0), Feedin Priority (1), Backup Mode (2), or Manual Mode (3). The write register (H:0x001F) exists in the template but is commented out, making this read-only
- SelfUse Night Charge – reads the upper SOC target for night charging in Self Use mode (H:0x0094) as a percentage. The write register (H:0x0063) and enable register (H:0x0062) are both commented out, so night charge configuration cannot be changed through TapHome
Fault detection
The module read script monitors the inverter run mode (A:0x0009) and two error registers. Every fault has its own error code:
- Run mode faults – error 1 when the run mode is 3 (Fault), error 2 when it is 4 (Permanent Fault)
- Inverter fault code (A:0x0040–0x0041, LittleEndianUint32) – 30 individual faults with codes 100–131 (100 + bit number), including grid voltage/frequency faults, PV voltage faults, battery faults, isolation faults, overtemperature, overcurrent protection, relay faults, and communication errors. The fault names follow the X3 table of the SolaX protocol
- Manager error code (A:0x0043) – codes 200–211 (200 + bit number) for power type faults, EEPROM errors, NTC sensor issues, battery temperature low/high, meter faults, bypass relay and fan faults. Port OC Warning (201) is reported as a warning, the others as errors
The Run mode service attribute on the module displays the current inverter state as text: Waiting, Checking, Normal, Fault, Permanent fault, Update, Off-grid waiting, Off-grid, Self testing, Idle, or Standby.
What this template corrects
The official TapHome template SolaX Hybrid X1/X3 Gen 4 reads several registers incorrectly (verified against SolaX Modbus protocol V3.21 and V001.02). This template corrects them:
| Where | Official template | This template | Effect of the error in the official template |
|---|---|---|---|
| Module — read script | var x3 := MODBUSR(A, 0x0040, Uint32); | VAR inv := MODBUSR(A, 0x0040, LittleEndianUint32); | The two halves of the 32-bit fault code are swapped: a fault in bit 1 (Grid Lost Fault) is reported as bit 17 (Bat Power Low) |
| Total Energy | MODBUSR(A, 0x52, LittleEndianInt32) / 1000 | MODBUSR(A, 0x0052, LittleEndianUint32) / 10 | Value 100× too small (the register counts in 0.1 kWh) |
| Daily/Actual Energy — total | MODBUSR(A, 0x50, UInt16) /10 | MODBUSR(A, 0x0094, LittleEndianUint32) / 10 | 0x0050 is a daily counter of the inverter AC port that falls to 0 every night; 0x0094 is the total PV energy |
| Daily/Actual Energy — power | MODBUSR(A,0x02, Int16)/1000 | (MODBUSR(A, 0x000A, UInt16) + MODBUSR(A, 0x000B, UInt16)) / 1000 | 0x0002 is the grid power of single-phase X1 models, not PV production; it reads 0 on many X3 units |
| Battery Temperature | MODBUSR(A,0x0018, UInt16) | MODBUSR(A, 0x0018, Int16) | Below 0 °C the official template shows about 65535 °C |
| Interface speed | 9600 baud | 19200 baud | 19200 is the SolaX factory default |
With the corrected scripts the Daily/Actual Energy meter measures PV production (PV1 + PV2), which is what its energy type in the Energy Dashboard expects. PV1, PV2 and Purchase/Feed to Grid no longer carry an energy type — they are plain values. All writes stay disabled, like in the official template.
Troubleshooting
No communication with inverter
- Verify the RS-485 cable connections: A+ to A+, B- to B-, GND to GND
- Check that register H:0x013E is set to 0 (Modbus 485 mode, not EV Charger)
- Confirm the baud rate matches between inverter and TapHome – the template uses 19200, the inverter default; an inverter set to 9600 needs one side changed
- Verify the Modbus Slave ID in TapHome matches the inverter setting (default: 1)
- Ensure no other Modbus master is connected to the same RS-485 bus – Modbus supports only a single master
Values look like the official template
When Total Energy is 100× too small, Daily/Actual Energy falls to 0 every night or Battery Temperature shows about 65535 °C below freezing, the module still runs the scripts of the official template. A module does not update itself from a newer template — import this template as a new module, or correct the scripts as shown in the table above.
Battery (SOC) reading incorrect
The Battery (SOC) register (A:0x001C) reports values in 1% units. The template divides by 100 for the TapHome 0–1 analog input range. If the displayed value seems wrong, verify the TapHome device is configured as an analog input (0–1 range, not 0–100).
Grid power sign convention
Purchase/Feed to Grid (A:0x0046) uses a sign convention where positive values mean feed-in (export to the grid) and negative values mean purchase (consumption from the grid). The inverter obtains this value from its meter or CT, so it depends on a correctly connected meter or CT.
X1 vs X3 differences
The template reads PV power (A:0x000A and A:0x000B) instead of the X1 grid power register, so the Daily/Actual Energy meter works on X1 and X3 models alike. The fault names follow the X3 table of the SolaX protocol. On an X1 inverter some fault bits mean different faults — bit 9 and most bits from bit 15 upward (for example, bit 15 is Missed CT Fault on X1 but Off-grid Overload on X3).
SolaX