Skip to main content

Python client library for Luxpower/EG4 inverter web monitoring API

Project description

pylxpweb

A Python client library for Luxpower/EG4 solar inverters and energy storage systems.

PyPI Version Python Versions License CI GitHub Sponsors Ko-fi

What It Does

pylxpweb provides programmatic access to the Luxpower/EG4 web monitoring API, enabling Python applications and Home Assistant integrations to read real-time inverter data, energy statistics, battery information, and GridBOSS metrics. It is the library backing the EG4 Web Monitor Home Assistant integration.

Features

  • Complete API Coverage: Inverter runtime, energy statistics, battery BMS, and GridBOSS data
  • Device Object Hierarchy: High-level StationParallelGroupBaseInverter / MIDDevice / BatteryBankBattery objects with auto-scaled properties
  • Async/Await: Built on aiohttp for efficient async I/O
  • Session Management: Automatic authentication and session renewal
  • Smart Caching: Configurable TTL caching to minimise API calls
  • Type Safe: Comprehensive type hints and Pydantic models throughout
  • Error Handling: Robust error handling with automatic retry and backoff
  • Regional Endpoints: Supports all global Luxpower and EG4 endpoints
  • Control Operations: Read and write inverter parameters, enable quick charge, set SOC limits

Supported Devices

  • Inverters: FlexBOSS21, FlexBOSS18, 18KPV, 12KPV, XP series, and LXP variants
  • GridBOSS: Microgrid interconnection devices (MID)
  • Batteries: All EG4-compatible battery modules with BMS integration

Supported Regional Endpoints

Region Endpoint
US (EG4 Electronics) https://monitor.eg4electronics.com (default)
US (Luxpower) https://us.luxpowertek.com
Americas (Luxpower) https://na.luxpowertek.com
Europe (Luxpower) https://eu.luxpowertek.com
Asia Pacific (Luxpower) https://sea.luxpowertek.com
Middle East & Africa (Luxpower) https://af.luxpowertek.com
China (Luxpower) https://server.luxpowertek.com

The base URL is fully configurable to support regional variations and future endpoints.

Installation

See INSTALL.md for the complete guide.

pip install pylxpweb
# or
uv add pylxpweb

Requires Python 3.13+.

Quick Start

Using Device Objects (Recommended)

import asyncio
from pylxpweb import LuxpowerClient
from pylxpweb.devices.station import Station

async def main():
    async with LuxpowerClient(
        username="your_username",
        password="your_password",
        base_url="https://monitor.eg4electronics.com"
    ) as client:
        stations = await Station.load_all(client)
        station = stations[0]

        for inverter in station.all_inverters:
            await inverter.refresh()
            print(f"{inverter.model} {inverter.serial_number}:")
            print(f"  PV Power: {inverter.pv_total_power}W")
            print(f"  Battery: {inverter.battery_soc}% @ {inverter.battery_voltage}V")
            print(f"  Grid: {inverter.grid_voltage_r}V @ {inverter.grid_frequency}Hz")
            print(f"  Today: {inverter.total_energy_today}kWh")

asyncio.run(main())

Device objects handle all value scaling automatically — no manual division required.

Usage

Low-Level API Access

For direct endpoint calls without the device-object layer:

async with LuxpowerClient(username, password) as client:
    plants = await client.api.plants.get_plants()
    plant_id = plants.rows[0].plantId
    devices = await client.api.devices.get_devices(str(plant_id))
    serial = devices.rows[0].serialNum

    runtime = await client.api.devices.get_inverter_runtime(serial)
    # Raw API returns scaled integers — divide as needed:
    print(f"Grid Voltage: {runtime.vacr / 10}V")
    print(f"Grid Frequency: {runtime.fac / 100}Hz")
    print(f"Battery Voltage: {runtime.vBat / 10}V")

Control Operations

async with LuxpowerClient(username, password) as client:
    serial = "1234567890"
    await client.set_quick_charge(serial, enabled=True)
    await client.set_charge_soc_limit(serial, limit=90)
    await client.set_operating_mode(serial, mode="standby")
    params = await client.read_parameters(serial, [21, 22, 23])

Error Handling

from pylxpweb import LuxpowerClient, AuthenticationError, ConnectionError, APIError

try:
    async with LuxpowerClient(username, password) as client:
        runtime = await client.get_inverter_runtime(serial)
except AuthenticationError as e:
    print(f"Login failed: {e}")
except ConnectionError as e:
    print(f"Network error: {e}")
except APIError as e:
    print(f"API error: {e}")

Data Scaling

Device objects auto-scale all values. For raw API use, apply these factors manually:

Data Type Factor Example raw Scaled
Inverter Voltage ÷10 2410 241.0 V
Battery Voltage (Bank) ÷10 539 53.9 V
Battery Voltage (Module) ÷100 5394 53.94 V
Cell Voltage ÷1000 3364 3.364 V
Current ÷100 1500 15.00 A
Frequency ÷100 5998 59.98 Hz
Power Direct 1030 1030 W
Temperature Direct 39 39 °C
Energy ÷10 184 18.4 kWh

See docs/SCALING_GUIDE.md for the full reference.

API Reference

Full reference documentation lives in docs/. Key entry points:

Document Contents
docs/api/LUXPOWER_API.md Complete endpoint catalog, authentication, error codes
docs/PROPERTY_REFERENCE.md All device properties with types and scaling
docs/PARAMETER_REFERENCE.md Hold/input register definitions and control parameters
docs/SCALING_GUIDE.md Scaling factors for raw API data
docs/USAGE_GUIDE.md Comprehensive usage examples
docs/DEVICE_TYPES.md Supported device types and capabilities

The docs/ index is at docs/README.md.

Development

See docs/DEVELOPMENT.md. In short:

git clone https://github.com/joyfulhouse/pylxpweb.git
cd pylxpweb
uv sync
uv run pytest
uv run ruff check
uv run mypy

Support

Support Development

If this library is useful to you, please consider supporting its development:

License

This project is licensed under the MIT License — see LICENSE for details.

Related Projects

  • EG4 Web Monitor — the Home Assistant integration built on this library.

Credits

This project builds upon research and knowledge from the Home Assistant community. Special thanks to the Home Assistant community for their pioneering work with EG4 and Luxpower devices — API endpoint research, documentation, and best practices shaped this library from the start.

Disclaimer: Unofficial library, not affiliated with Luxpower or EG4 Electronics. Communicates with the official API using the same endpoints as the official web interface.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylxpweb-0.9.36b11.tar.gz (360.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pylxpweb-0.9.36b11-py3-none-any.whl (414.4 kB view details)

Uploaded Python 3

File details

Details for the file pylxpweb-0.9.36b11.tar.gz.

File metadata

  • Download URL: pylxpweb-0.9.36b11.tar.gz
  • Upload date:
  • Size: 360.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pylxpweb-0.9.36b11.tar.gz
Algorithm Hash digest
SHA256 e9b5694a5e29afa878cf13d6aac62a8cab129403326af92f7fafb0d8706345d7
MD5 50ef7bed4172e85a2d8ac06f20c13a27
BLAKE2b-256 d1d4faf6f7634ea67390cbaf0b5d8e9e84ae2c6f29d43afd478bff59c640bf1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylxpweb-0.9.36b11.tar.gz:

Publisher: release.yml on joyfulhouse/pylxpweb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylxpweb-0.9.36b11-py3-none-any.whl.

File metadata

  • Download URL: pylxpweb-0.9.36b11-py3-none-any.whl
  • Upload date:
  • Size: 414.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pylxpweb-0.9.36b11-py3-none-any.whl
Algorithm Hash digest
SHA256 e8d38d31174ee99ea0338fd800c5de1bd92fa5b1a09003de50698fb9ad4dc854
MD5 fff0de5848089d8f21a31762ec566415
BLAKE2b-256 7165f83f4c02fd02f6087b63f352d7481cea22ff0b853fbeb49f6b8f0f82d801

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylxpweb-0.9.36b11-py3-none-any.whl:

Publisher: release.yml on joyfulhouse/pylxpweb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page