Hi everyone,
I’ve been running APsystems EZ1-M inverters with Home Assistant for a while and ran into several bugs in the official integration that have been bothering me. I’ve put together a community-enhanced version that fixes all of them, and adds a bunch of features the official integration is missing.
Supported models
All EZ1 variants are supported and auto-detected from the hardware’s maxPower value reported by the inverter:
| Model | Max Power |
|---|---|
| EZ1-SPE | 500 W |
| EZ1-M | 600 W / 800 W |
| EZ1-LV | 900 W / 1000 W |
| EZ1-H | 960 W |
| EZ1D-L | 1600 W |
| EZ1D | 1800 W |
| EZ1D-H | 2000 W |
The power limit entity’s upper bound is set dynamically from the actual hardware ceiling – an EZ1D-H is never incorrectly capped at 800 W.
New sensors (not in the official integration)
The integration polls the /getOutputDataDetail endpoint (firmware 1.9.x+) and exposes 7 additional diagnostic sensors:
| Sensor | Unit | Notes |
|---|---|---|
| DC Voltage – Input 1 | V | PV panel 1 |
| DC Voltage – Input 2 | V | PV panel 2 |
| DC Current – Input 1 | A | PV panel 1 |
| DC Current – Input 2 | A | PV panel 2 |
| Grid Voltage | V | AC output side |
| Grid Frequency | Hz | AC output side |
| Inverter Temperature | °C | Last known value preserved overnight |
| Firmware Version | – | Helps correlate issues with firmware releases |
| Flash Write Count | – | Only on older firmware; tracks cumulative flash wear |
Detail polling is fully configurable: disabled entirely for maximum stability, or throttled to once every 60 seconds (recommended for EZ1-D on some firmware versions that need recovery time between calls).
Fixed bugs compared to the official integration
- Sensors go
unavailableevery night – The inverter physically shuts down at dusk and drops off the network. The official integration marks all sensors as unavailable. Fixed with a cache mechanism: sensors keep their last known values until the inverter comes back online in the morning. No user action required. state is not strictly increasinglog warnings – The inverter occasionally returns marginally smaller lifetime energy values due to floating-point rounding. Fixed by tracking the last output value so it can never decrease.output_fault_statusshows a problem every evening –not c.operatingwithdevice_class=PROBLEMtriggers a false alarm on every normal nightly shutdown. Replaced withinverter_activeusingdevice_class=RUNNING(semantics: Running / Off).- Power limit always shows 800 W – Fixed by calling the dedicated
getMaxPowerendpoint directly. On firmware 1.9.x+,getDefaultMaxPower(flash value) andgetMaxPower(RAM value) are read separately. KeyErrorcrash on newer firmware –maxPower/minPowerare missing fromgetDeviceInfoon firmware1.1.2_b,2.0.1_Band later, crashing the integration at startup. Fixed with safegetattr()fallbacks.- Python 3 syntax errors –
except ConnectionError, TimeoutError:is Python 2 syntax and raises aSyntaxErrorin Python 3. - Lifetime energy counter overflow (~540 kWh) – Known firmware bug: the internal counter resets to 0 at ~540 kWh. Detected automatically; a cumulative offset keeps the HA sensor running continuously. A
WARNINGis logged with the exact values before and after the reset. - Today energy drops/resets mid-day – Firmware bug where
e1/e2momentarily drops (to 0, or to an arbitrary intermediate value). Fixed with a monotonic floor that never lets today’s energy decrease within a day, regardless of how small the drop is. - Post-midnight carry-over (battery systems) – On setups where the inverter runs continuously through midnight (e.g. behind a Marstek B2500), the firmware’s daily counter doesn’t reset at midnight. Fixed by using the lifetime counter delta (
te1_now − te1_at_midnight) as the authoritative today-production value.
Additional features
- Power limit restored after nightly restart – On firmware 1.9.x+ the inverter reloads the flash value into RAM each morning. The integration detects the mismatch and restores your chosen limit via
setMaxPower(RAM only – flash is never written again after a one-time setup). - Flash write protection –
setDefaultMaxPoweris called exactly once to set flash to the hardware maximum. All subsequent power limit changes usesetMaxPower(RAM only), protecting flash longevity. A Flash Write Count diagnostic sensor is shown on older firmware where everysetMaxPowercall writes flash directly. - Switch state restored after restart – If you turn the inverter OFF via the switch entity, that state is restored automatically after the nightly restart.
- Battery system mode – Enables extended power limit verification (10 rounds × 5 min) for setups where the inverter may reload flash values multiple times during morning startup depending on battery charge state.
- Configurable lifetime energy offset – Enter an initial offset during setup or reconfigure to correct the lifetime total after a firmware counter reset. The offset survives HA restarts and reconfigures correctly when changed.
- Configurable polling interval – 12–60 seconds, set during setup.
- Custom device name – Set a friendly name (e.g. “BalconyPowerSouth”) during setup. Used as the device name in HA and as the prefix for all entity names.
- German translations – All entity names available in German.
- Comprehensive logging – All relevant events logged at appropriate levels. Filter by
apsystemsunder Settings → System → Logs.
Migration from the official integration
Entity IDs, history and statistics are fully preserved – both integrations use the same domain name apsystems and the same unique_id based on the inverter’s serial number. HA automatically replaces the official integration with this one.
Note: Migration from the Sonnenladen community integration (
apsystemsapi_local) is not seamless as it uses a different domain name.
Installation via HACS (custom repository)
- Open HACS → Integrations
- Three-dot menu → Custom Repositories
- Add
https://github.com/shopf/apsystems-ez1-enhanced, category: Integration - Search for “APsystems” and install
- Restart Home Assistant
Requirements: Home Assistant 2024.6+, Local Mode enabled on the inverter, apsystems-ez1==2.7.0 (installed automatically).
Tested with HA 2026.8.2 on EZ1-M (firmware 1.7.0, 1.7.5, 1.10.2, 1.12.2). Reports from EZ1-SPE, EZ1-LV, EZ1-H, EZ1D-L, EZ1D and EZ1D-H users very welcome!
Feedback, bug reports and PRs welcome – especially from users with models or firmware versions not yet in the compatibility table.


