TapHome
Community Beta Energy & metering

SolaX X3-Ultra Hybrid Inverter — monitoring and power control (Modbus RTU)

Community template for the SolaX X3-Ultra three-phase hybrid inverter over Modbus RTU on the COM 1 RS-485 port: Energy Dashboard meters for PV, grid, battery and load, battery SOC, grid voltage and fault codes, inverter settings written only on change, and remote AC power control (SolaX remote control mode 1) for spot-price charging and discharging. 19200 baud, 8N1, Slave ID 1.

SolaXModbus RTU19 devicesRevision 1.0 Last updated: November 10, 2026

Submitted by Martin Keller

SolaX X3-Ultra Hybrid Inverter — monitoring and power control (Modbus RTU)

Import into the TapHome appHardware › Modbus › Add from template

Download Template
On this page

Integration guide

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

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_485Asame signal as pin 1
8REMOTE_485Bsame 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

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

1
Menu → Setting → Advance Setting → Modbus

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:

ParameterTemplate defaultInverter default (protocol V3.29)
Modbus address (Slave ID)11
Baud rate1920019200
ParityNoneNone
Data bits88
Stop bits11

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

DeviceReading
PV ProductionPV1 + 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 GridImport 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 BatteryCharging and discharging part of battery 1 power (A:0x0016) with total charge and discharge energy (A:0x0021, A:0x001D).
LoadCalculated 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

DeviceReadWrite
Settings - work modeH:0x008B: Self use, Feed-in priority, Backup, Manual, Peak shaving, Time of use (the last two depend on the firmware)0x001F
Settings - manual modeH:0x008C: Stop charge and discharge, Force charge, Force discharge (effective only in work mode Manual)0x0020
Settings - self-use minimum SOChigh byte of H:0x00930x0061
Settings - night charge from gridlow byte of H:0x00930x0062
Settings - night charge target SOCH:0x00940x0063
Settings - export limitH: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–0x0088 in 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 MaxPrefetchGroupSize 32 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 2014 to register 0x0000
  • 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

  1. 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
  2. Check that the baud rate matches between the inverter (Menu → Setting → Advance Setting → Modbus) and the TapHome Modbus RTU interface — 19200 by default
  3. Confirm that the import parameter Modbus Slave ID matches the inverter’s Modbus address (default 1)
  4. Make sure only one Modbus master is connected to the port
  5. Swap the A and B wires if the cable polarity is uncertain
  6. 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.

Available devices 19

These devices appear in TapHome after import.

SolaX X3-Ultra Module
Service Attributes
Run mode
Machine type
Settings lock
Remote control mode
Remote control - maximum target
Remote control - minimum target
Service Actions
Unlock settings (password 2014)
End remote control

SolaX X3-Ultra

Read (module)
VAR mode := MODBUSR(A, 0x0009, UInt16);
IF(mode = 3, ADDERROR(1, "Inverter fault (run mode 3)"));
IF(mode = 4, ADDERROR(2, "Inverter permanent fault (run mode 4)"));
VAR inv := MODBUSR(A, 0x0040, LittleEndianUint32);
IF(GETBIT(inv, 0) = 1, ADDERROR(100, "TZ Protect Fault"));
IF(GETBIT(inv, 1) = 1, ADDERROR(101, "Grid Lost Fault"));
IF(GETBIT(inv, 2) = 1, ADDERROR(102, "Grid Volt Fault"));
IF(GETBIT(inv, 3) = 1, ADDERROR(103, "Grid Freq Fault"));
IF(GETBIT(inv, 4) = 1, ADDERROR(104, "PV Volt Fault"));
IF(GETBIT(inv, 5) = 1, ADDERROR(105, "Bus Volt Fault"));
IF(GETBIT(inv, 6) = 1, ADDERROR(106, "Bat Volt Fault"));
IF(GETBIT(inv, 7) = 1, ADDERROR(107, "AC10mins Volt Fault"));
IF(GETBIT(inv, 8) = 1, ADDERROR(108, "DCI OCP Fault"));
IF(GETBIT(inv, 9) = 1, ADDERROR(109, "DCV OCP Fault"));
IF(GETBIT(inv, 10) = 1, ADDERROR(110, "SW OCP Fault"));
IF(GETBIT(inv, 11) = 1, ADDERROR(111, "RC OCP Fault"));
IF(GETBIT(inv, 12) = 1, ADDERROR(112, "Isolation Fault"));
IF(GETBIT(inv, 13) = 1, ADDERROR(113, "Temp Over Fault"));
IF(GETBIT(inv, 14) = 1, ADDERROR(114, "BatConnDir Fault"));
IF(GETBIT(inv, 15) = 1, ADDERROR(115, "Off-grid Overload"));
IF(GETBIT(inv, 16) = 1, ADDERROR(116, "Overload"));
IF(GETBIT(inv, 17) = 1, ADDERROR(117, "Bat Power Low"));
IF(GETBIT(inv, 18) = 1, ADDERROR(118, "BMS Lost"));
IF(GETBIT(inv, 19) = 1, ADDERROR(119, "Fan Fault"));
IF(GETBIT(inv, 20) = 1, ADDERROR(120, "Low Temp Fault"));
IF(GETBIT(inv, 21) = 1, ADDERROR(121, "Parallel Fault"));
IF(GETBIT(inv, 22) = 1, ADDERROR(122, "Hard Limit Fault"));
IF(GETBIT(inv, 23) = 1, ADDERROR(123, "INV Volt Sample Fault"));
IF(GETBIT(inv, 24) = 1, ADDERROR(124, "Inner Comm Fault"));
IF(GETBIT(inv, 25) = 1, ADDERROR(125, "INV EEPROM Fault"));
IF(GETBIT(inv, 26) = 1, ADDERROR(126, "RCD Fault"));
IF(GETBIT(inv, 27) = 1, ADDERROR(127, "Grid Relay Fault"));
IF(GETBIT(inv, 28) = 1, ADDERROR(128, "Off-grid Relay Fault"));
IF(GETBIT(inv, 29) = 1, ADDERROR(129, "PV ConnDir Fault"));
IF(GETBIT(inv, 30) = 1, ADDERROR(130, "Charger Relay Fault"));
IF(GETBIT(inv, 31) = 1, ADDERROR(131, "Earth Relay Fault"));
VAR mgr := MODBUSR(A, 0x0043, UInt16);
IF(GETBIT(mgr, 0) = 1, ADDERROR(200, "Power Type Fault"));
IF(GETBIT(mgr, 1) = 1, ADDWARNING(201, "Port OC Warning"));
IF(GETBIT(mgr, 2) = 1, ADDERROR(202, "Mgr EEPROM Fault"));
IF(GETBIT(mgr, 4) = 1, ADDERROR(204, "NTC Sample Invalid"));
IF(GETBIT(mgr, 5) = 1, ADDERROR(205, "Battery Temperature Low"));
IF(GETBIT(mgr, 6) = 1, ADDERROR(206, "Battery Temperature High"));
IF(GETBIT(mgr, 9) = 1, ADDERROR(209, "Meter Fault"));
IF(GETBIT(mgr, 10) = 1, ADDERROR(210, "Bypass Relay Fault"));
IF(GETBIT(mgr, 11) = 1, ADDERROR(211, "Fan 2 Fault"));
Service Attributes
Run mode
SWITCH(MODBUSR(A, 0x0009, 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", 20, "Remote control", "Other")
Machine type
SWITCH(MODBUSR(H, 0x0105, UInt16), 1, "X1 (single-phase)", 3, "X3 (three-phase)", "Unknown")
Settings lock
SWITCH(MODBUSR(A, 0x0054, UInt16), 0, "Locked", 1, "Unlocked", "Unknown")
Remote control mode
SWITCH(MODBUSR(A, 0x0100, UInt16), 0, "Off", 1, "Power control", 2, "Energy target", 3, "SOC target", "Other")
Remote control - maximum target
TOSTRING(MODBUSR(A, 0x010A, LittleEndianInt32)) + " W"
Remote control - minimum target
TOSTRING(MODBUSR(A, 0x010C, LittleEndianInt32)) + " W"
Service Actions
Unlock settings (password 2014)
MODBUSW(SH, 0x0000, Uint16, 2014);
End remote control
MODBUSW(H, 0x007C, Uint16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
${deviceType_PVProduction} Electricity Meter
Service Attributes
PV1 power
PV2 power
PV3 power
Inverter AC output - total energy

${deviceType_PVProduction}

Read total consumption
MODBUSR(A, 0x0094, LittleEndianUint32) / 10
Read demand
(MODBUSR(A, 0x000A, UInt16) + MODBUSR(A, 0x000B, UInt16) + MODBUSR(A, 0x0124, UInt16)) / 1000
Service Attributes
PV1 power
TOSTRING(MODBUSR(A, 0x000A, UInt16)) + " W"
PV2 power
TOSTRING(MODBUSR(A, 0x000B, UInt16)) + " W"
PV3 power
TOSTRING(MODBUSR(A, 0x0124, UInt16)) + " W"
Inverter AC output - total energy
TOSTRING(MODBUSR(A, 0x0052, LittleEndianUint32) / 10, "F1") + " kWh"
Grid - power balance Electricity Meter

Grid - power balance

Read demand
MODBUSR(A, 0x0046, LittleEndianInt32) / -1000
${deviceType_PVFromGrid} Electricity Meter

${deviceType_PVFromGrid}

Read total consumption
MODBUSR(A, 0x004A, LittleEndianUint32) / 100
Read demand
MAX(-MODBUSR(A, 0x0046, LittleEndianInt32), 0) / 1000
${deviceType_PVToGrid} Electricity Meter

${deviceType_PVToGrid}

Read total consumption
MODBUSR(A, 0x0048, LittleEndianUint32) / 100
Read demand
MAX(MODBUSR(A, 0x0046, LittleEndianInt32), 0) / 1000
${deviceType_PVToBattery} Electricity Meter

${deviceType_PVToBattery}

Read total consumption
MODBUSR(A, 0x0021, LittleEndianUint32) / 10
Read demand
MAX(MODBUSR(A, 0x0016, Int16), 0) / 1000
${deviceType_PVFromBattery} Electricity Meter

${deviceType_PVFromBattery}

Read total consumption
MODBUSR(A, 0x001D, LittleEndianUint32) / 10
Read demand
MAX(-MODBUSR(A, 0x0016, Int16), 0) / 1000
${deviceType_PVLoad} Electricity Meter

${deviceType_PVLoad}

Read demand
((MODBUSR(A, 0x006C, Int16) + MODBUSR(A, 0x0070, Int16) + MODBUSR(A, 0x0074, Int16)) - MODBUSR(A, 0x0046, LittleEndianInt32)) / 1000
${deviceType_BatterySOC} Analog Input
Service Attributes
Remaining energy
Chargeable energy

${deviceType_BatterySOC}

Read input level
MODBUSR(A, 0x001C, UInt16) / 100
Service Attributes
Remaining energy
TOSTRING(MODBUSR(A, 0x0118, LittleEndianUint32) / 1000, "F2") + " kWh"
Chargeable energy
TOSTRING(MODBUSR(A, 0x0116, LittleEndianUint32) / 1000, "F2") + " kWh"
Battery 2 - state of charge Analog Input
Service Attributes
Battery 2 power
Battery 2 temperature

Battery 2 - state of charge

Read input level
MODBUSR(A, 0x012D, UInt16) / 100
Service Attributes
Battery 2 power
TOSTRING(MODBUSR(A, 0x0129, Int16)) + " W"
Battery 2 temperature
TOSTRING(MODBUSR(A, 0x0131, Int16)) + " °C"
Battery - temperature Temperature Sensor

Battery - temperature

Read temperature
MODBUSR(A, 0x0018, Int16)
Inverter - AC power Variable

Inverter - AC power

Read
(MODBUSR(A, 0x006C, Int16) + MODBUSR(A, 0x0070, Int16) + MODBUSR(A, 0x0074, Int16)) / 1000
Grid - voltage L1 Variable
Service Attributes
Grid voltage L2
Grid voltage L3
Grid frequency L1
Grid frequency L2
Grid frequency L3

Grid - voltage L1

Read
MODBUSR(A, 0x006A, UInt16) / 10
Service Attributes
Grid voltage L2
TOSTRING(MODBUSR(A, 0x006E, UInt16) / 10, "F1") + " V"
Grid voltage L3
TOSTRING(MODBUSR(A, 0x0072, UInt16) / 10, "F1") + " V"
Grid frequency L1
TOSTRING(MODBUSR(A, 0x006D, UInt16) / 100, "F2") + " Hz"
Grid frequency L2
TOSTRING(MODBUSR(A, 0x0071, UInt16) / 100, "F2") + " Hz"
Grid frequency L3
TOSTRING(MODBUSR(A, 0x0075, UInt16) / 100, "F2") + " Hz"
Settings - work mode Multi-value Switch
Values / States: Self use · Feed-in priority · Backup · Manual · Peak shaving · Time of use

Settings - work mode

Read switch state
MODBUSR(H, 0x008B, UInt16)
Write switch state
IF(MODBUSR(H, 0x008B, UInt16) != Mu AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(MODBUSR(H, 0x008B, UInt16) != Mu, MODBUSW(SH, 0x001F, Uint16, Mu));
Settings - manual mode Multi-value Switch
Values / States: Stop charge and discharge · Force charge · Force discharge

Settings - manual mode

Read switch state
MODBUSR(H, 0x008C, UInt16)
Write switch state
IF(MODBUSR(H, 0x008C, UInt16) != Mu AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(MODBUSR(H, 0x008C, UInt16) != Mu, MODBUSW(SH, 0x0020, Uint16, Mu));
Settings - self-use minimum SOC Dimmer

Settings - self-use minimum SOC

Read level
GETBYTE(MODBUSR(H, 0x0093, UInt16), 1) / 100
Write level
VAR v := MAX(ROUND(Le * 100), 10);
IF(GETBYTE(MODBUSR(H, 0x0093, UInt16), 1) != v AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(GETBYTE(MODBUSR(H, 0x0093, UInt16), 1) != v, MODBUSW(SH, 0x0061, Uint16, v));
Settings - night charge from grid Switch
Values / States: ON · OFF

Settings - night charge from grid

Read switch state
GETBYTE(MODBUSR(H, 0x0093, UInt16), 0)
Write switch state
IF(GETBYTE(MODBUSR(H, 0x0093, UInt16), 0) != St AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(GETBYTE(MODBUSR(H, 0x0093, UInt16), 0) != St, MODBUSW(SH, 0x0062, Uint16, St));
Settings - night charge target SOC Dimmer

Settings - night charge target SOC

Read level
MODBUSR(H, 0x0094, UInt16) / 100
Write level
VAR v := MAX(ROUND(Le * 100), 10);
IF(MODBUSR(H, 0x0094, UInt16) != v AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(MODBUSR(H, 0x0094, UInt16) != v, MODBUSW(SH, 0x0063, Uint16, v));
Settings - export limit Variable

Settings - export limit

Read
MODBUSR(H, 0x00B6, UInt16) / 100
Write
VAR v := MAX(ROUND(Va * 100), 0);
IF(MODBUSR(H, 0x00B6, UInt16) != v AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(MODBUSR(H, 0x00B6, UInt16) != v, MODBUSW(SH, 0x0042, Uint16, v));
Remote control - AC power target Variable
Service Attributes
Actual AC power

Remote control - AC power target

Read
IF(MODBUSR(A, 0x0100, UInt16) = 1, MODBUSR(A, 0x0102, LittleEndianInt32) / 1000, 0)
Write
VAR w := ROUND(Va * 1000);
VAR u := IF(w < 0, w + 4294967296, w);
IF(w = 0 AND MODBUSR(A, 0x0100, UInt16) != 0, MODBUSW(H, 0x007C, Uint16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
IF(w != 0 AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(w != 0, MODBUSW(H, 0x007C, Uint16, 1, 1, MOD(u, 65536), FLOOR(u / 65536), 0, 0, 120, 0, 0, 0, 0, 0, 60));
Service Attributes
Actual AC power
TOSTRING(MODBUSR(A, 0x0106, LittleEndianInt32)) + " W"
Connection: Modbus RTU • 19200 baud• 8N1 • Slave ID: $[SlaveId]

Import parameters

Enter these values when you import the XML.

Asked in the appDefault
Modbus Slave ID1

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.

Template · TapHome portal SolaX X3-Ultra Hybrid Inverter — monitoring and power control (Modbus RTU) 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. Modbus RTU View in TapHome portal