TapHome

SolaX Inverter (Cloud API)

Packet Parser → HTTP
Submitted by
Last updated: 03. 2026
SolaX Inverter (Cloud API)

The SolaX Cloud API template connects TapHome to any SolaX inverter through the SolaxCloud monitoring platform. Unlike the SolaX Hybrid X1/X3 Gen 4 template which uses Modbus RTU over RS-485, this cloud-based integration requires no physical wiring to the inverter. TapHome queries the SolaX Cloud servers via HTTPS and receives real-time data in JSON format.

The template supports all SolaX inverter types (23 models across the X1, X3, A1 and J1 series) and provides 11 monitoring devices covering AC output, battery state, grid power flow and per-MPPT PV production. The only requirements are a SolaxCloud account, an internet-connected communication dongle (Pocket WiFi, LAN or 4G) and the API token.

Configuration

SolaxCloud account setup

The inverter must be registered and online on SolaxCloud. A communication module (Pocket WiFi, LAN or 4G dongle) must be installed on the inverter and connected to the internet.

Obtaining the API token (tokenID)
  1. Log into SolaxCloud at www.solaxcloud.com
  2. In the left sidebar, navigate to Service > Third-party ecosystem (or the API section)
  3. Copy the tokenID displayed on the page — this is a 23- or 24-character string

The token is free for all registered SolaxCloud users.

Finding the Registration Number (sn)

The sn parameter is the Registration Number of the communication dongle — not the inverter serial number. This is a common source of confusion.

Where to find it:

  • On the dongle — printed on the label of the Pocket WiFi / LAN / 4G module (barcode or QR code)
  • In SolaxCloud — navigate to Device > Inverter and look for the Registration No. column in the table
Import parameters

When importing the template in TapHome, enter:

  • Token ID — the tokenID from SolaxCloud
  • Registration No. — the 10-character serial number from the communication dongle
Internet dependency

This is a cloud-only integration. All data flows through SolaX Cloud servers (www.solaxcloud.com:9443). The template will not work without an active internet connection on both the TapHome CCU and the inverter’s communication dongle.

For users who prefer local communication without cloud dependency, the SolaX Hybrid X1/X3 Gen 4 (Modbus RTU) template provides direct RS-485 communication with Gen 4 hybrid inverters.

Device capabilities

AC output and energy production

The AC Output electricity meter reads total AC energy production (yieldtotal in kWh) and real-time AC output power (acpower in W, converted to kW). A service attribute reports the daily yield (yieldtoday in kWh) which resets at midnight.

Battery monitoring
  • Battery SOC — reads battery state of charge as a percentage from the soc field. The value is divided by 100 for the TapHome 0–1 analog input range (e.g. 85% becomes 0.85). This is the fastest-polled device at 2.5-second intervals
  • Battery Power — instantaneous battery charge/discharge power in watts. Positive values indicate charging (from PV or grid), negative values indicate discharging to load
Grid power and energy metering

Three devices cover grid power flow:

  • Grid Power — raw bidirectional grid power in watts. Positive = exporting to grid, negative = importing from grid
  • PV From Grid — electricity meter tracking energy consumed from the grid. Total consumption (consumeenergy in kWh) and real-time import power (extracted from feedinpower when negative, converted to kW)
  • PV To Grid — electricity meter tracking energy exported to the grid. Total export energy (feedinenergy in kWh) and real-time export power (extracted from feedinpower when positive, converted to kW)
PV production monitoring

The template provides five PV production devices:

  • PV Production (Total) — computed sensor summing DC power from all 4 MPPT inputs. Null-safe — inverters with fewer than 4 strings return null for unused MPPTs, which the formula treats as zero
  • PV Production (MPPT 1–4) — individual DC power readings for each PV string input in watts
Module-level diagnostics

The module readscript checks the inverter status on each poll cycle and reports issues:

  • Status 100 (Wait Mode) and 110 (Standby) trigger warnings in TapHome
  • Status 103 (Fault Mode) and 104 (Permanent Fault Mode) trigger errors
  • If the API response indicates failure, the error message from the exception field is reported

Two service attributes are available on the module:

  • Inverter status — maps status codes 100–113 to human-readable names (Wait Mode, Check Mode, Normal Mode, Fault Mode, Permanent Fault Mode, Update Mode, EPS Check Mode, EPS Mode, Self-Test Mode, Idle Mode, Standby Mode, Pv Wake Up Bat Mode, Gen Check Mode, Gen Run Mode)
  • Inverter type — maps type codes 1–23 to model names (X1-LX, X-Hybrid, X1-Boost/Air/Mini, X3-Hybrid-G4, etc.)
Additional capabilities

The SolaX Cloud API also exposes Meter 2 AC power (feedinpowerM2), per-phase EPS (Emergency Power Supply) power for three phases (peps1peps3), the data upload timestamp, inverter serial number, and battery status. These can be added in a future template update.

Troubleshooting

API returns error or no data
  1. Verify the inverter is online on SolaxCloud — log into the web portal and check device status
  2. Confirm the tokenID is correct and has not been regenerated (old tokens become invalid)
  3. Ensure the sn parameter is the communication dongle Registration Number, not the inverter serial number
  4. Check that the communication dongle has an active internet connection
Stale or delayed readings

The SolaX Cloud API returns the most recent data uploaded by the communication dongle. Data freshness depends on the dongle’s upload interval (typically every 5 minutes). The template polls the API every 20 seconds, but the underlying data may update less frequently.

Rate limit errors

The API allows a maximum of 10 requests per minute and 10,000 requests per day. The template polls at 20-second intervals (approximately 3 requests per minute), which is within limits. If multiple systems (TapHome, Home Assistant, other tools) share the same tokenID, the combined request rate may exceed the limit.

The SolaX Cloud API requires an active internet connection and depends on SolaX Cloud server availability. During cloud outages or internet disruptions, the template will not receive updated data. For installations requiring guaranteed local control, consider the Modbus RTU template instead.

Available devices

SolaX Inverter Module
Service Attributes
Inverter statusCurrent operating mode — Wait, Check, Normal, Fault, Permanent Fault, Update, EPS Check, EPS, Self-Test, Idle, Standby, Pv Wake Up Bat, Gen Check, Gen Run
Inverter typeConnected inverter model — identifies which SolaX series (X1, X3, A1, J1) and generation is installed
Custom Variables
tokenID (string)SolaX Cloud API token ID (obtain from your SolaX Cloud account API page)
sn (string)Serial number of the SolaX communication module (Registration No.)

Solax Inverter

Read (module)
var response := sendhttprequest("/proxy/api/getRealtimeInfo.do?tokenId="+tokenID+"&sn="+sn);

if parsejson(response.Content, "success")
	json := parsejson(response.Content, "result", 1);
	
	var statusCode := parsejson(json,"inverterStatus");
	if statusCode = "100"
	  addwarning("Inverter in waiting - Check DC");
	end
	if statusCode =  "103"
	  adderror("Inverter in fault mode");
	end
	if statusCode = "104"
	  adderror("Inverter in permanent fault mode");
	end
	if statusCode = "110"
	  addwarning("Inverter in standby mode");
	end
else
 	adderror(parsejson(response.Content, "exception"));
end
Service Attributes
Inverter status
var statusCode := parsejson(json,"inverterStatus");

IF(statusCode = "100",return("Wait Mode"));
IF(statusCode = "101",return("Check Mode"));
IF(statusCode = "102",return("Normal Mode"));
IF(statusCode = "103",return("Fault Mode"));
IF(statusCode = "104",return("Permanent Fault Mode"));
IF(statusCode = "105",return("Update Mode"));
IF(statusCode = "106",return("EPS Check Mode"));
IF(statusCode = "107",return("EPS Mode"));
IF(statusCode = "108",return("Self-Test Mode"));
IF(statusCode = "109",return("Idle Mode"));
IF(statusCode = "110",return("Standby Mode"));
IF(statusCode = "111",return("Pv Wake Up Bat Mode"));
IF(statusCode = "112",return("Gen Check Mode"));
IF(statusCode = "113",return("Gen Run Mode"));
Inverter type
var type := parsejson(json,"inverterType");

IF(type = "1",return("X1-LX"));
IF(type = "2",return("X-Hybrid"));
IF(type = "3",return("X1-Hybiyd/Fit"));
IF(type = "4",return("X1-Boost/Air/Mini"));
IF(type = "5",return("X3-Hybiyd/Fit"));
IF(type = "6",return("X3-20K/30K"));
IF(type = "7",return("X3-MIC/PRO"));
IF(type = "8",return("X1-Smart"));
IF(type = "9",return("X1-AC"));
IF(type = "10",return("A1-Hybrid"));
IF(type = "11",return("A1-Fit"));
IF(type = "12",return("A1-Grid"));
IF(type = "13",return("J1-ESS"));
IF(type = "14",return("X3-Hybrid-G4"));
IF(type = "15",return("X1-Hybrid-G4"));
IF(type = "16",return("X3-MIC/PRO-G2"));
IF(type = "17",return("X1-SPT"));
IF(type = "18",return("X1-Boost/Mini-G4"));
IF(type = "19",return("A1-HYB-G2"));
IF(type = "20",return("A1-AC-G2"));
IF(type = "21",return("A1-SMT-G2"));
IF(type = "22",return("X3-FTH"));
IF(type = "23",return("X3-MGA-G2"));
AC Output Electricity Meter Read-only

Total and daily AC energy production (kWh) with real-time output power (kW)

numeric Unit: kWh / kW JSON parsejson()
Service Attributes
Inverter.AC.energy.out.daily [kWh]Daily AC energy yield — resets at midnight

AC Output

Read total consumption
parsejson(json, "yieldtotal", 1)
Read demand
parsejson(json, "acpower", 1) / 1000
Service Attributes
Inverter.AC.energy.out.daily [kWh]
parsejson(json, "yieldtoday", 1)
Battery SOC Analog Input Read-only

Battery state of charge as percentage — 0% (empty) to 100% (full)

numeric Unit: % JSON parsejson()

Battery SOC

Read input level
parsejson(json, "soc", 1) / 100
Battery Power Variable Read-only

Instantaneous battery power in watts — positive when charging, negative when discharging

numeric Unit: W JSON parsejson()

Battery Power

Read
parsejson(json,"batPower",1)
PV From Grid Electricity Meter Read-only

Energy consumed from the grid — total consumption (kWh) and real-time import power (kW)

numeric Unit: kWh / kW JSON parsejson()

PV From Grid

Read total consumption
parsejson(json, "consumeenergy", 1)
Read demand
var power := parsejson(json, "feedinpower", 1);
if(power < 0, power * -1, 0) / 1000
Grid Power Variable Read-only

Bidirectional grid power in watts — positive when exporting, negative when importing

numeric Unit: W JSON parsejson()

Grid Power

Read
parsejson(json, "feedinpower", 1)
PV Production (Total) Variable Read-only

Combined DC power from all MPPT inputs — automatically sums available strings

numeric Unit: W JSON parsejson()

PV Production (Total)

Read
var PV1 := parsejson(json,"powerdc1",1);
var PV2 := parsejson(json,"powerdc2",1);
var PV3 := parsejson(json,"powerdc3",1);
var PV4 := parsejson(json,"powerdc4",1);

if(isnull(PV1), 0, PV1) +
if(isnull(PV2), 0, PV2) +
if(isnull(PV3), 0, PV3) +
if(isnull(PV4), 0, PV4)
PV Production (MPPT 1) Variable Read-only
numeric Unit: W JSON parsejson()

PV Production (MPPT 1)

Read
parsejson(json,"powerdc1",1)
PV Production (MPPT 2) Variable Read-only
numeric Unit: W JSON parsejson()

PV Production (MPPT 2)

Read
parsejson(json,"powerdc2",1)
PV Production (MPPT 3) Variable Read-only
numeric Unit: W JSON parsejson()

PV Production (MPPT 3)

Read (module)
parsejson(json,"powerdc3",1)
PV Production (MPPT 4) Variable Read-only
numeric Unit: W JSON parsejson()

PV Production (MPPT 4)

Read (module)
parsejson(json,"powerdc4",1)
PV To Grid Electricity Meter Read-only

Energy exported to the grid — total feed-in energy (kWh) and real-time export power (kW)

numeric Unit: kWh / kW JSON parsejson()

PV To Grid

Read total consumption
parsejson(json, "feedinenergy", 1)
Read demand
var power := parsejson(json, "feedinpower", 1);
if(power > 0, power, 0) / 1000
Connection: Packet Parser → HTTP
Possible improvements (7)
  • Meter 2 AC Power — Inverter.Meter2.AC.power.total, 1 W. Secondary meter power reading — available for dual-meter setups
  • EPS Phase 1 Power — Inverter.AC.EPS.power.R, 1 W. Emergency Power Supply output phase R
  • EPS Phase 2 Power — Inverter.AC.EPS.power.S, 1 W. Emergency Power Supply output phase S
  • EPS Phase 3 Power — Inverter.AC.EPS.power.T, 1 W. Emergency Power Supply output phase T
  • Upload Time — Last data upload timestamp from inverter to SolaX Cloud. Useful for stale-data detection
  • Inverter Serial Number — Serial number of the inverter hardware (different from communication module SN)
  • Battery Status — Battery status code with mapped states. Documented in HA integration but not in official API V6.1 PDF

Sources