
The SolaX X1-HYBRID and X3-HYBRID Gen 4 are energy storage inverters supporting both single-phase (3–7.5 kW) and three-phase (5–15 kW) configurations. The TapHome template communicates via Modbus RTU over RS-485, reading input and holding registers for battery state of charge, PV string power, grid power flow, energy totals, charger mode and night charge SOC. All write scripts are commented out, making the template effectively read-only.
The template also implements comprehensive fault detection by parsing 32-bit inverter error codes and 16-bit manager error codes, reporting individual faults as errors in TapHome.
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 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 the TapHome 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.
Some holding registers are marked with limited EEprom write cycles. Excessive write operations can cause irreversible hardware damage. The TapHome template has all write scripts disabled, so this is not a concern with the current template.
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
- Baud rate – the inverter defaults to 19200 baud, but the TapHome template uses 9600 baud. Adjust one to match the other
- 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. 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).
To avoid changing the inverter settings, adjust the baud rate in TapHome module settings to 19200 to match the inverter default.
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 TapHome 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:0x1C) as a percentage. 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:0x18) in degrees Celsius. Polled every 80 seconds
Solar PV power
- PV1 Power – DC power output from PV string 1 (A:0x0A), displayed in kW after /1000 conversion from watts
- PV2 Power – DC power output from PV string 2 (A:0x0B), displayed in kW after /1000 conversion from watts
Grid power and energy metering
- Grid Feed-in Power – instantaneous grid power (A:0x46, LittleEndianInt32) in kW. Positive values indicate export to grid, negative values indicate consumption from grid
- Daily / Actual Energy – combines daily energy output from the inverter AC port (A:0x50, 0.1 kWh resolution) and real-time grid power (A:0x02) in kW. The grid power register is X1-specific (single-phase)
- Total Energy – lifetime cumulative energy output from the inverter AC port (A:0x52, LittleEndianInt32), displayed in MWh
Charger mode and night charge
- Charger Use Mode – reads the active solar charger mode (H:0x8B): Self Use Mode (0), Feedin Priority (1), Backup Mode (2), or Manual Mode (3). Values 4–9 are reserved. The write register (H:0x1F) exists in the template but is commented out, making this read-only
- Self-Use Night Charge SOC – reads the upper SOC target for night charging in Self-Use mode (H:0x94) as a percentage. The write register (H:0x63) and enable register (H:0x62) are both commented out, so night charge configuration cannot be changed through TapHome
Fault detection
The module-level ReadScript monitors the inverter run mode (A:0x09) and two error registers:
- Run Mode faults – triggers an error when Run Mode is 3 (Fault) or 4 (Permanent Fault)
- Inverter fault codes (A:0x40) – 32-bit bitmap parsed for 28 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 (A:0x43) – 16-bit bitmap parsed for power type faults, EEPROM errors, NTC sensor issues, battery temperature warnings, meter faults, and fan faults
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.
Additional capabilities
The inverter exposes a comprehensive register map with over 300 holding registers and 200 input registers. Notable capabilities not yet implemented in the template include per-PV-string voltage and current monitoring (A:0x03–0x06), battery voltage/current/power readings, BMS connection state, grid on/off status, X3 per-phase grid voltage/current/power (12 registers at A:0x6A–0x75), cumulative grid feed-in and consumption energy (via meter), total solar energy production, BMS user SOC and SOH, and battery cell min/max temperature and voltage. Write capabilities include system ON/OFF control, charger mode selection, manual force charge/discharge, discharge minimum SOC, night charge configuration, and remote power control with active/reactive power targets. These can be added in a future template update.
The template currently reads X1 (single-phase) grid power at A:0x02. For X3 (three-phase) installations, per-phase grid power is available at registers A:0x6C, A:0x70, and A:0x74 but is not included in the current 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 inverter defaults to 19200 while the template defaults to 9600
- Verify the 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
Battery SOC reading incorrect
The Battery SOC register (A:0x1C) 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 AnalogInput (0–1 range, not 0–100).
Grid power sign convention
The Grid Feed-in Power (A:0x46) uses a sign convention where positive values mean export (generating/feeding to grid) and negative values mean import (consuming from grid). The Daily/Actual Energy grid power register (A:0x02) may also show negative values during grid consumption.
X1 vs X3 register differences
Some registers are model-specific. Grid voltage (A:0x00), current (A:0x01), and power (A:0x02) are X1 single-phase registers. For X3 three-phase models, the equivalent per-phase readings are at A:0x6A–0x75. The template uses the X1 grid power register, which may not report correctly on X3 models.
