TapHome

SolaX X3 Hybrid Ultra

Modbus RTU
Submitted by
Last updated: 06. 2026
SolaX X3 Hybrid Ultra

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.

ModelRated AC PowerMPPT trackersNotes
X3-ULT-15K15 kW2Standard 2-MPPT
X3-ULT-15KP15 kW33-MPPT (model code H3BC)
X3-ULT-19.9K19.9 kW2Standard 2-MPPT
X3-ULT-20K20 kW2Standard 2-MPPT (model code H3BD)
X3-ULT-20KP20 kW33-MPPT
X3-ULT-25K25 kW3Model code H3BF
X3-ULT-25KW25 kW3
X3-ULT-30K30 kW3Dual-battery, PV3 active (model code H3BG)
X3-ULT-10K-GLV10 kWLow-voltage variant (GLV)
X3-ULT-15K-GLV15 kWLow-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
SolaX X3-Ultra COM 1 port pin assignment for all six labeled positions (Parallel-1, Parallel-2, BMS-1, BMS-2, RS485, DRM)

Pin assignment of the RS485 position (the only position relevant to TapHome):

PinSignalTapHome wiring
1REMOTE_485AA+ / D+
2REMOTE_485BB− / D−
3PARALLEL_485AAdo not use (SolaX accessories only)
4PARALLEL_485AAdo not use (SolaX accessories only)
5PARALLEL_485BBdo not use (SolaX accessories only)
6PARALLEL_485BBdo not use (SolaX accessories only)
7REMOTE_485Aduplicate of pin 1 (for daisy-chain)
8REMOTE_485Bduplicate 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
Installing the RJ45 terminal into the RS485 position of the COM 1 cable fixture

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 IpAddress import 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:

1
Menu → Setting → Advance Setting → Modbus

The Advanced Settings menu may require an installer password. Verify or set the following:

ParameterTapHome template defaultInverter defaultRange
Modbus Address (Slave ID)111–255
Baud rate19200192009600 / 19200 / 38400 / 57600 / 115200
ParityNoneNoneNone / Odd / Even
Data bits88
Stop bits111 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:

ParameterPurpose
IpAddressIP 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.
SlaveIdModbus 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, register A: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 2014 to SH:0x0000 to 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:0x0040A: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
  1. 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
  2. Check that the baud rate matches between the inverter (Menu → Setting → Advance Setting → Modbus) and the TapHome module — both must be 19200 by default
  3. Confirm the Slave ID matches (default 1)
  4. Verify only one Modbus master is connected to the RS-485 bus — Modbus does not support multi-master
  5. Swap the A and B wires if the cable polarity is uncertain
  6. 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.

Available devices

SolaX X3 Hybrid Ultra Module
Service Attributes
Run ModeInverter operating state — Waiting, Checking, Normal, Fault, Permanent Fault, Update, Off-grid waiting, Off-grid, Self Testing, Idle, Standby
ModelInverter model code as a 4-character ASCII string (H3BC = 15K/15KP, H3BD = 19.9K/20K/20KP, H3BF = 25K, H3BG = 30K)
Service Actions
Unlock AdminWrites constant 2014 to register SH:0x0000 to unlock advanced inverter settings — rarely needed, only for diagnostics

FVE SOLAX Hybrid Ultra

Read (module)
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"));
Service Attributes
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"
);
Model
MODBUSR(H, 14, String, 4)
Service Actions
Unlock admin
MODBUSW(SH, 0x0000, Uint16, 2014);
Battery 1 SOC Analog Input Read-only

Primary battery state of charge as a percentage (0–100 %), exposed as a 0–1 analog input in TapHome

Register: A:0x001C UInt16 Unit: % numeric

Battery 1 SOC

Read input level
MODBUSR(A, 0x1C, UInt16)/100
Battery 2 SOC Analog Input Read-only

Second battery state of charge as a percentage — functional only on the X3-ULT-30K dual-battery variant; other models read 0

Register: A:0x012D UInt16 Unit: % numeric

Battery 2 SOC

Read input level
MODBUSR(A, 0x012D, Uint16) / 100
Total Energy Produced Variable Read-only

Lifetime cumulative energy delivered from the inverter AC port to the grid, in kWh

Register: A:0x0052 LittleEndianInt32 Unit: kWh numeric

Total Energy Produced

Read
MODBUSR(A, 0x52,LittleEndianInt32) / 10
Daily / Actual Inverter Production Electricity Meter Read-only

Electricity meter combining today's energy delivered to the grid (kWh) and real-time grid power (kW); positive grid power means the inverter is exporting

Register: A:0x0050, A:0x0002 UInt16, Int16 Unit: kWh / kW numeric

Daily / Actual Inverter Production

Read total consumption
MODBUSR(A, 0x50, UInt16) /10
Read demand
MODBUSR(A,0x02, Int16)/1000
Grid Feed-in Power (Meter) Variable Read-only

Real-time grid power as measured by the external SolaX meter or CT clamp; positive values are exporting to the grid, negative values are importing

Register: A:0x0046 LittleEndianInt32 Unit: kW numeric

Grid Feed-in Power (Meter)

Read
MODBUSR(A,0x0046, Int32)/1000
Grid Frequency L1 Variable Read-only
Register: A:0x006D Int16 Unit: Hz numeric

Grid Frequency L1

Read
MODBUSR(A, 0x006D, Int16)/100
Grid Frequency L2 Variable Read-only
Register: A:0x0071 Int16 Unit: Hz numeric

Grid Frequency L2

Read
MODBUSR(A,0x0071, Int16)/100
Grid Frequency L3 Variable Read-only
Register: A:0x0075 Int16 Unit: Hz numeric

Grid Frequency L3

Read
MODBUSR(A,0x0075, Int16)/100
Charger Use Mode Multi-value Switch

Battery charger operating mode — Self Use, Feed-in Priority, Backup, or Manual. Write is EEprom-backed: do not change frequently from automations

Register: H:0x008BSH:0x001F UInt16 numeric
Values / States: ON · OFF

Charger Use Mode

Read switch state
MODBUSR(H, 0x008B, Uint16)
Write switch state
MODBUSW(SH, 0x001F, uint16, Mu)
Grid Voltage L1 Variable Read-only
Register: A:0x006A Int16 Unit: V numeric

Grid Voltage L1

Read
MODBUSR(A,0x006A, Int16)/10
Grid Voltage L2 Variable Read-only
Register: A:0x006E Int16 Unit: V numeric

Grid Voltage L2

Read
MODBUSR(A, 0x006E, Int16)/10
Grid Voltage L3 Variable Read-only
Register: A:0x0072 Int16 Unit: V numeric

Grid Voltage L3

Read
MODBUSR(A,0x0072, Int16)/10
Grid Import / Export Power Variable Read-only

Real-time grid feed-in / consumption power from the external meter; positive values are exporting to grid, negative values are importing. Reads the same register as Grid Feed-in Power

Register: A:0x0046 LittleEndianInt32 Unit: kW numeric

Grid Import / Export Power

Read
MODBUSR(A, 0x46,LittleEndianInt32)/1000
PV1 Power (East) Variable Read-only

DC power output from PV string 1, typically the east-facing array in the original Slovak template naming

Register: A:0x000A UInt16 Unit: kW numeric

PV1 Power (East)

Read
MODBUSR(A,0x0a, UInt16)/1000
PV2 Power (East) Variable Read-only

DC power output from PV string 2, typically the east-facing array in the original Slovak template naming

Register: A:0x000B UInt16 Unit: kW numeric

PV2 Power (East)

Read
MODBUSR(A,0x0b, UInt16)/1000
PV3 Power (West) Variable Read-only

DC power output from PV string 3 — functional only on the X3-ULT-30K 3-MPPT variant; other models read 0

Register: A:0x0124 UInt16 Unit: kW numeric

PV3 Power (West)

Read
MODBUSR(A, 0x0124, Uint16)/1000
Self-Use Night Charge SOC Dimmer

Upper SOC target (10–100 %) for charging the battery from the grid during the night in Self-Use mode. Write is EEprom-backed: do not change frequently from automations

Register: H:0x0094SH:0x0063 UInt16 Unit: % numeric

Self-Use Night Charge SOC

Read level
MODBUSR(H, 0x0094, Uint16) / 100
Write level
MODBUSW(SH, 0x0063,  Uint16, Le * 100)
Battery Temperature Temperature Sensor Read-only
Register: A:0x0018 UInt16 Unit: °C numeric

Battery Temperature

Read temperature
MODBUSR(A,0x0018, UInt16)
Max Feed-in Power Limit Variable

Maximum allowed export power to the grid as a percentage of nominal capacity (10–100 %). Write is EEprom-backed: do not change frequently from automations

Register: H:0x00B6SH:0x0042 UInt16 Unit: % numeric

Max Feed-in Power Limit

Read
MODBUSR(H, 0x00B6, Uint16)/100
Write
MODBUSW(SH, 0x0042, Uint16, Va*100)
Connection: Modbus RTU • 19200 baud• 8N1 • Slave ID: $[SlaveId]
Possible improvements (40)
  • A:0x0017 BMS Connect State — 0=Disconnected, 1=Connected. Critical for battery health monitoring
  • A:0x001A Grid Status — 0=On-grid, 1=Off-grid. Important for backup/off-grid scenarios
  • A:0x0014, A:0x0015, A:0x0016 Battery Voltage / Current / Power — Battery 1 pack telemetry: 0.1V int16, 0.1A int16, 1W int16. Positive current/power = charge, negative = discharge
  • A:0x0127, A:0x0128, A:0x0129 Battery 2 Voltage / Current / Power — Battery 2 pack telemetry. X3-ULT-30K only
  • A:0x0131 Battery 2 Temperature — 1°C, int16. Battery 2 temperature. X3-ULT-30K only
  • A:0x0008 Radiator Temperature — 1°C, int16. Inverter internal radiator/heatsink temperature
  • A:0x0003, A:0x0004 PV1 / PV2 Voltage — 0.1V, uint16. Useful for string-level diagnostics
  • A:0x0005, A:0x0006 PV1 / PV2 Current — 0.1A, uint16. Useful for string-level diagnostics
  • A:0x0122, A:0x0123 PV3 Voltage / Current — 0.1V uint16 / 0.1A uint16. X3-ULT-30K only
  • A:0x006B, A:0x006F, A:0x0073 Per-Phase Grid Current L1/L2/L3 — 0.1A, int16 each. Per-phase current for 3-phase monitoring
  • A:0x006C, A:0x0070, A:0x0074 Per-Phase Grid Power L1/L2/L3 — 1W, int16 each. Per-phase grid power — essential for 3-phase load balancing
  • A:0x0082–0x0087 Per-Phase Feed-in Power L1/L2/L3 (Meter) — 1W, int32 LE × 3 phases. Per-phase feed-in from meter/CT
  • A:0x0048–0x0049 Feed-in Energy Total (Meter) — 0.01kWh, uint32 LE. Lifetime energy exported via meter
  • A:0x004A–0x004B Consumed Energy Total (Meter) — 0.01kWh, uint32 LE. Lifetime energy consumed from grid via meter
  • A:0x0094–0x0095 Solar Energy Total — 0.1kWh, uint32 LE. Cumulative PV production (all strings combined)
  • A:0x0096 Solar Energy Today — 0.1kWh, uint16. Today's PV production
  • A:0x0091, A:0x0092–0x0093 Charged Energy Today / Total — 0.1kWh, uint16 / uint32 LE. Energy charged to battery via inverter AC port
  • A:0x001D–0x001E, A:0x0020 Battery Discharge Energy Today / Total — 0.1kWh, uint32 LE / uint16. Battery discharge energy
  • A:0x0021–0x0022, A:0x0023 Battery Charge Energy Today / Total — 0.1kWh, uint32 LE / uint16. Battery charge energy
  • A:0x00BA, A:0x00BB Battery Temp High / Low — 0.1°C, int16. Min/max battery cell temperatures
  • A:0x00BC, A:0x00BD Cell Voltage High / Low — 0.001V, uint16. Min/max individual cell voltages — important for battery health
  • A:0x00BE, A:0x00BF BMS User SOC / SOH — 1%, uint16. SOC and state-of-health as reported by BMS (may differ from A:0x001C)
  • A:0x00B8, A:0x00B9 Meter 1 / Meter 2 Communication State — 0=Com Error, 1=Normal. Diagnostic for meter/CT connectivity
  • A:0x0019 BDC Status — 0=discharge, 1=charge, 2=stop. Battery DC converter status
  • A:0x008E–0x008F, A:0x0090 Off-grid Yield Total / Today — 0.1kWh, uint32 LE / uint16. Energy delivered in off-grid mode
  • A:0x0088–0x008B On-grid / Off-grid Running Time — 0.1h, uint32 LE each. Lifetime runtime counters
  • A:0x012F–0x0130 Inverter Total AC Power — 1W, int32. Sum of all 3 phases AC output. X3-ULT-30K only
  • A:0x0042 Manager Error Code (as Value) — Note: register A:0x0043 is parsed in module readscript for bit-level fault decoding (11 manager fault bits). V3.29 protocol places Manager error at A:0x0042 and BMS error at A:0x0043 — template uses A:0x0043 as 'Manager error code' which may actually be BMS Warning Code (Table 2-6). Potential mismatch — verify
  • Write SH:0x0020 Manual Mode — 0=Stop charge & discharge, 1=Force charge, 2=Force discharge. Requires Charger Use Mode = 3 (Manual)
  • Write SH:0x0061 Self-Use Discharge Min SOC — 10–100%. Minimum SOC before discharge stops in Self-Use mode
  • Write SH:0x0062 Self-Use Night Charge Enable — 0=Disable, 1=Enable night charging from grid. Currently always-on assumption in template — explicit enable would allow user toggle
  • H:0x0093 Self-Use Discharge Min SOC (Read) — Readback of discharge min SOC limit
  • H:0x008C Manual Mode Readback — 0=Stop, 1=Force charge, 2=Force discharge. Readback of current manual sub-mode
  • H:0x008D Battery Type — 0=Lead Acid, 1=Lithium. Battery chemistry diagnostic
  • H:0x0100–0x011F Modbus Power Control (Remote) — Active/reactive power targets, SOC targets, time-of-duration. Enables advanced energy management and grid services (peak shaving, FCR, etc.)
  • A:0x0120, A:0x0121 BMS Relay State / Restart Flag — 0/1 each. BMS relay status and restart indicator
  • H:0x001D Safety Code (Country Standard) — 0–39 enum. Grid safety standard (VDE0126, VDE4105, AS4777, G98/G99, EN50549, etc.) — useful for installation diagnostics
  • H:0x0023 Power Limits Percent — 0–100%, uint16. Inverter output power limit
  • H:0x00BA Inverter Power Type — Model variant code (15K/20K/25K/30K). Useful for runtime model detection
  • H:0x0000–0x0006 Inverter Serial Number — 14-character ASCII string across 7 registers. Service attribute candidate

Sources

Found a problem with this device template?

Tell us what's wrong, what's missing, or how the template should behave. We rely on your feedback to keep the catalog accurate.

Verified by TapHome

Want to use this in your TapHome Core?

Open this template in the Customer Portal to apply it to one of your homes, or to draft a refinement and submit it back to the catalog.

Open in portal