{
  "spec_version": 1,
  "slug": "solax-x1-x3-hybrid",
  "manufacturer": "SolaX Power",
  "model": "X1 / X3 hybrid (G3/G4)",
  "category": "Solar inverter",
  "supplier_url": "https://www.solaxpower.com/downloads/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "LowFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 19200,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 10,
      "count": 1,
      "name": "PV1 power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 11,
      "count": 1,
      "name": "PV2 power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 22,
      "count": 1,
      "name": "Battery 1 power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Positive while charging, negative while discharging."
    },
    {
      "address": 28,
      "count": 1,
      "name": "Battery 1 state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 70,
      "count": 2,
      "name": "Meter active power (grid)",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Positive means export/feed-in to the grid, negative means import."
    },
    {
      "address": 74,
      "count": 2,
      "name": "Total energy consumed from grid (meter)",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 148,
      "count": 2,
      "name": "Total solar energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 202,
      "count": 1,
      "name": "Grid voltage R",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 203,
      "count": 1,
      "name": "Grid voltage S",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 204,
      "count": 1,
      "name": "Grid voltage T",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 206,
      "count": 1,
      "name": "Grid current R",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 207,
      "count": 1,
      "name": "Grid current S",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 208,
      "count": 1,
      "name": "Grid current T",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 292,
      "count": 1,
      "name": "PV3 power (MPPT 3)",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Only present on inverters with a third DC input."
    },
    {
      "address": 297,
      "count": 1,
      "name": "Battery 2 power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Dual-battery systems only. Positive while charging."
    },
    {
      "address": 301,
      "count": 1,
      "name": "Battery 2 state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Dual-battery systems only."
    }
  ],
  "holding_registers": [
    {
      "address": 31,
      "count": 1,
      "name": "Solar charge use mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = self use, 3 = manual mode (manual mode is what the 0x0020 register acts in)."
    },
    {
      "address": 32,
      "count": 1,
      "name": "Manual mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = stop forced charge/discharge, 1 = force charge. Only effective while 0x001F is 3."
    },
    {
      "address": 86,
      "count": 1,
      "name": "Battery wake-up",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Write 1 to wake the battery from standby."
    }
  ],
  "combined_registers": [],
  "notes": "Register map from the evcc template https://raw.githubusercontent.com/evcc-io/evcc/master/templates/definition/meter/solax.yaml (covers SolaX X1/X3 hybrid G3/G4 and the rebadged Qcells Q.HOME ESS HYB-G3), cross-checked against the SolaX register table in wills106/homeassistant-solax-modbus (custom_components/solax_modbus/plugin_solax.py). The inverter itself is an RS-485 device (19200 8N1, slave 1); most sites reach it through the PocketLAN/PocketWiFi dongle, which serves the same map as Modbus TCP on port 502, unit 1, so set the gateway/dongle accordingly. Measurement registers (0x000A-0x012D) are input registers, settings (0x001F-0x0056) are holding registers. Every 32-bit value in this map is low-word-first (evcc decodes them as int32s/uint32s, and the Home Assistant plugin sets order32=\"little\" for the whole SolaX family), so the default word order is LowFirst; the 16-bit entries are not affected by it. Meter power is signed: positive means export to the grid. Battery power is positive while charging. Model-specific: PV3 (MPPT 3) exists only on units with three DC inputs, battery 2 registers only on dual-battery systems. Battery compatibility: SolaX's battery product page lists the Triple Power / T-BAT high-voltage families (T58, T-BAT-SYS-HV-5.0, T-BAT H 3.0 V2, T-BAT-SYS-HV-R3.6/R2.5, HS25, HS36) and the T-BAT-SYS-LV D53/D150/R36/R25 low-voltage families, and the FAQ on that page confirms lead-acid support on the Hybrid G4 - https://www.solaxpower.com/energy-storage-batteries.html."
}
