{
  "spec_version": 1,
  "slug": "luxpower-lxp-lb-hybrid",
  "manufacturer": "Luxpower",
  "model": "LXP-LB series hybrid inverter (LXP-LB-EU 8-10K)",
  "category": "Solar inverter",
  "supplier_url": "https://luxpowertek.com/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "LittleEndian",
    "word_order": "LowFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 19200,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 0,
      "count": 1,
      "name": "Inverter state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Operation mode; the document refers to the separate operation-mode definition file for the values."
    },
    {
      "address": 1,
      "count": 1,
      "name": "PV1 voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 2,
      "count": 1,
      "name": "PV2 voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3,
      "count": 1,
      "name": "PV3 voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4,
      "count": 1,
      "name": "Battery voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 5,
      "count": 1,
      "name": "Battery state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 6,
      "count": 1,
      "name": "Internal fault code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit field; values in the vendor's internal fault-code definition file."
    },
    {
      "address": 7,
      "count": 1,
      "name": "PV1 power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 8,
      "count": 1,
      "name": "PV2 power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 9,
      "count": 1,
      "name": "PV3 power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "On the AC-coupled models this register instead carries the total PV power."
    },
    {
      "address": 10,
      "count": 1,
      "name": "Battery charging power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Power flowing into the battery; separate register from the discharge power, so both are unsigned."
    },
    {
      "address": 11,
      "count": 1,
      "name": "Battery discharging power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12,
      "count": 1,
      "name": "Grid voltage R phase",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 13,
      "count": 1,
      "name": "Grid voltage S phase",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 14,
      "count": 1,
      "name": "Grid voltage T phase",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 15,
      "count": 1,
      "name": "Grid frequency",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 16,
      "count": 1,
      "name": "Inverter output power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "On-grid inverter power; R phase on three-phase models."
    },
    {
      "address": 17,
      "count": 1,
      "name": "Rectifier (AC charge) power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 18,
      "count": 1,
      "name": "Inverter RMS output current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 20,
      "count": 1,
      "name": "Off-grid output voltage R phase",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 21,
      "count": 1,
      "name": "Off-grid output voltage S phase",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 22,
      "count": 1,
      "name": "Off-grid output voltage T phase",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 24,
      "count": 1,
      "name": "Off-grid output power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 25,
      "count": 1,
      "name": "Off-grid apparent power",
      "data_type": "UInt16",
      "units": "VA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 26,
      "count": 1,
      "name": "Power exported to the grid",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 27,
      "count": 1,
      "name": "Power imported from the grid",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 28,
      "count": 1,
      "name": "PV1 energy today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 29,
      "count": 1,
      "name": "PV2 energy today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30,
      "count": 1,
      "name": "PV3 energy today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 31,
      "count": 1,
      "name": "Inverter output energy today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 32,
      "count": 1,
      "name": "Rectifier energy today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33,
      "count": 1,
      "name": "Battery charge energy today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 34,
      "count": 1,
      "name": "Battery discharge energy today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 35,
      "count": 1,
      "name": "Off-grid output energy today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 36,
      "count": 1,
      "name": "Energy exported to the grid today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 37,
      "count": 1,
      "name": "Energy imported from the grid today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 38,
      "count": 1,
      "name": "Bus 1 voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39,
      "count": 1,
      "name": "Bus 2 voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 40,
      "count": 2,
      "name": "PV1 cumulative energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 40, high word at 41."
    },
    {
      "address": 42,
      "count": 2,
      "name": "PV2 cumulative energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 42, high word at 43."
    },
    {
      "address": 44,
      "count": 2,
      "name": "PV3 cumulative energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 44, high word at 45."
    },
    {
      "address": 46,
      "count": 2,
      "name": "Inverter cumulative output energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 46, high word at 47."
    },
    {
      "address": 48,
      "count": 2,
      "name": "Rectifier cumulative energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 48, high word at 49."
    },
    {
      "address": 50,
      "count": 2,
      "name": "Battery cumulative charge energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 50, high word at 51."
    },
    {
      "address": 52,
      "count": 2,
      "name": "Battery cumulative discharge energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 52, high word at 53."
    },
    {
      "address": 54,
      "count": 2,
      "name": "Off-grid cumulative output energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 54, high word at 55."
    },
    {
      "address": 56,
      "count": 2,
      "name": "Cumulative energy exported to the grid",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 56, high word at 57."
    },
    {
      "address": 58,
      "count": 2,
      "name": "Cumulative energy imported from the grid",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 58, high word at 59."
    },
    {
      "address": 60,
      "count": 2,
      "name": "Fault code",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 60, high word at 61; bit field, values in the vendor's fault-code definition file."
    },
    {
      "address": 62,
      "count": 2,
      "name": "Warning code",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 62, high word at 63; bit field, values in the vendor's alarm-code definition file."
    },
    {
      "address": 64,
      "count": 1,
      "name": "Internal temperature",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Documented range 0-65535; the vendor table has no type column and no signed marking, so the value is read unsigned."
    },
    {
      "address": 65,
      "count": 1,
      "name": "Radiator temperature 1",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Documented range 0-65535, no signed marking in the vendor table."
    },
    {
      "address": 66,
      "count": 1,
      "name": "Radiator temperature 2",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Documented range 0-65535, no signed marking in the vendor table."
    },
    {
      "address": 67,
      "count": 1,
      "name": "Battery temperature",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Documented range 0-65535, no signed marking in the vendor table."
    },
    {
      "address": 69,
      "count": 2,
      "name": "Running time",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word at 69, high word at 70."
    }
  ],
  "holding_registers": [],
  "combined_registers": [],
  "notes": "Source: Shenzhen Lux Power Technology \"Modbus RTU Protocol\" (administrator edition, 2025/6/13; version history V00 2024.02.23 to V23 20250614) - the vendor's own document, http://www.luxpowertek.com, read from the public mirror https://github.com/OwlBawl/luxpower-ha-modbus/blob/main/ModBus_protocol_updated_on_2025.06.14.pdf (luxpowertek.com did not expose the PDF in its own document index). Section 2 fixes the interface: RS-485, 19200 bps, one start bit, 8 data bits, no parity, one stop bit, minimum polling period 1 s, and a reversed byte order - 0x01 0x02 reads as 0x0201 and 0x01 0x02 0x03 0x04 as 0x04030201 - hence byte order LittleEndian and word order LowFirst. The document numbers the input registers from 0 and says a full 40-register request must start at 0, 40, 80, ..., which is the vendor's own statement that these are wire addresses; they are stored unchanged (zero based). The vendor does not state a factory slave address. The unit 1 recorded here is a placeholder, not a cited value, and the user must set the inverter's own address on site. Deliberate omissions: the settings (holding-register) block, because in this revision its rows pack several settings into one register's bit ranges and the bit-to-value mapping is printed as a separate model file; the power-factor register (19), which is not a plain scale but folds above 1000 ((1000-x)/1000) and cannot be expressed as a fixed factor; the SOH row, which is printed under SOC without a register number of its own; the US-model L1N/L2N block (193-204) and the PV4-PV6 block (217-231), which belong to other model variants; and the BMS mirror block (80-113), which duplicates values the BMS itself serves."
}
