Skip to content

feat: add SunEnergyXT 500 Series battery storage module#3387

Draft
ChristophCaina wants to merge 6 commits into
openWB:masterfrom
ChristophCaina:master
Draft

feat: add SunEnergyXT 500 Series battery storage module#3387
ChristophCaina wants to merge 6 commits into
openWB:masterfrom
ChristophCaina:master

Conversation

@ChristophCaina
Copy link
Copy Markdown

@ChristophCaina ChristophCaina commented May 22, 2026

Summary

This PR adds support for the SunEnergyXT 500 Series (including the 500 PRO) battery storage system to openWB.

Communication

The device exposes a local HTTP API — no cloud dependency, no Modbus:

Endpoint Method Description
http://<IP>/read GET Read all device state fields as JSON
http://<IP>/write POST Write control parameters

Features

Read (passive monitoring)

  • Battery SoC (SC)
  • Battery power — positive = charging, negative = discharging (PB)
  • Max inverter power (IS)

Active control (power_limit_controllable = True)

The module supports full active battery control by openWB:

openWB request Device command Effect
None — automatic MM=1, GS=0 Device self-regulates (self-consumption mode)
0 — stop discharge MM=0, GS=0 Battery inactive
> 0 — discharge N W MM=0, GS=+N Targeted discharge
< 0 — charge N W MM=0, GS=-N Forced charging

Configuration

  • IP address — local IP of the SunEnergyXT device
  • Port — default 80
  • Timeout — HTTP timeout in seconds, default 5

UI

A Vue configuration page is provided via a separate PR to openwb-ui-settings: ChristophCaina/openwb-ui-settings

Testing

  • ✅ Tested with SunEnergyXT device simulator
  • ✅ SoC, charge/discharge power verified against Home Assistant integration
  • ✅ Active control (power_limit_controllable) recognized by openWB
  • ⏳ Test with real hardware pending (EVSE issue on physical openWB being resolved and storage is available)
  • ⏳ Active power limit control (set_power_limit) not yet verified —
    requires a real charging session with physical hardware

Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/device.vue Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new openWB device integration for the SunEnergyXT 500 Series battery storage via the device’s local HTTP API, including active power-limit control support.

Changes:

  • Introduces a new sunenergyxt vendor/device module with configuration schema and device descriptor wiring.
  • Implements a battery component that reads SoC/power from /read and writes control parameters to /write.
  • Adds a device configuration Vue component (settings UI) for IP/port/timeout.

Reviewed changes

Copilot reviewed 5 out of 7 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
packages/modules/devices/sunenergyxt/vendor.py Registers the new vendor metadata and grouping.
packages/modules/devices/sunenergyxt/sunenergyxt/device.py Wires the configurable device and battery component updater.
packages/modules/devices/sunenergyxt/sunenergyxt/config.py Adds device + component configuration classes (IP/port/timeout).
packages/modules/devices/sunenergyxt/sunenergyxt/bat.py Implements HTTP read/write logic, state parsing, and set_power_limit() control.
packages/modules/devices/sunenergyxt/sunenergyxt/device.vue Adds a settings UI component for configuring the device connection.
packages/modules/devices/sunenergyxt/init.py Package marker.
packages/modules/devices/sunenergyxt/sunenergyxt/init.py Package marker.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/bat.py
Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/bat.py
Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/bat.py
Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/config.py Outdated
Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/bat.py
Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/device.vue Outdated
Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/device.py
Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/bat.py
Comment thread packages/modules/devices/sunenergyxt/sunenergyxt/device.py Outdated
Removed default values for ip_address, port, and timeout in SunEnergyXTConfiguration.
refactor(sunenergyxt): apply Copilot review suggestions to bat.py

- Replace raw `requests` with `req.get_http_session()` to align with
  openWB HTTP session conventions (timeout, error handling)
- Remove `max_charge_power` / `max_discharge_power` assignments –
  BatState does not expose these fields
- Replace magic constant `9999` with dynamic `self._gs_max`, derived
  from device field IS (max. inverter power) on each update().
  IS reflects both model (500 / 500 Pro) and number of modules (BN),
  so no manual calculation needed. Falls back to 800W until first update.
- Remove `self._timeout` – timeout is now a fixed inline value (5s)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants