APsystems EZ1-M / EZ1-SPE / EZ1-LV / EZ1-H / EZ1D-L / EZ1D / EZ1D-H – Community Enhanced Integration (extended sensors, all models, overnight fix & more)

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.

:backhand_index_pointing_right: GitHub - shopf/apsystems-ez1-enhanced: Community-enhanced Home Assistant integration for APsystems EZ1-M/EZ1-D microinverters · GitHub


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 unavailable every 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 increasing log 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_status shows a problem every eveningnot c.operating with device_class=PROBLEM triggers a false alarm on every normal nightly shutdown. Replaced with inverter_active using device_class=RUNNING (semantics: Running / Off).
  • Power limit always shows 800 W – Fixed by calling the dedicated getMaxPower endpoint directly. On firmware 1.9.x+, getDefaultMaxPower (flash value) and getMaxPower (RAM value) are read separately.
  • KeyError crash on newer firmwaremaxPower/minPower are missing from getDeviceInfo on firmware 1.1.2_b, 2.0.1_B and later, crashing the integration at startup. Fixed with safe getattr() fallbacks.
  • Python 3 syntax errorsexcept ConnectionError, TimeoutError: is Python 2 syntax and raises a SyntaxError in 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 WARNING is logged with the exact values before and after the reset.
  • Today energy drops/resets mid-day – Firmware bug where e1/e2 momentarily 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 protectionsetDefaultMaxPower is called exactly once to set flash to the hardware maximum. All subsequent power limit changes use setMaxPower (RAM only), protecting flash longevity. A Flash Write Count diagnostic sensor is shown on older firmware where every setMaxPower call 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 apsystems under 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)

  1. Open HACS → Integrations
  2. Three-dot menu → Custom Repositories
  3. Add https://github.com/shopf/apsystems-ez1-enhanced, category: Integration
  4. Search for “APsystems” and install
  5. 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.

3 Likes

Hi,
Thanks a lot for your integration, it’s highly appreciated.

Just as a remark, I followed your migration steps to replace the official one with yours. But step 4 “deinstalling the official integration” is not possible as it’s not shown in the integration list anymore after the reboot.
Your integration seems to automatically replace the official one, at least that’s what I understand from “Benutzerdefinierte Integration, die eine Core-Komponente ersetzt”.

As I learned, starting with firmware 1.11.2, APSystems integrated a bluetooth lock. Is there a way to integrate a firmware update via Wifi into your integration?

Kind Regards,
meiser

Thanks for the feedback on the migration – good to know it works automatically! I’ll update the README to reflect that.
Regarding firmware updates via WiFi: unfortunately the local API does not provide a firmware update endpoint – updates are handled by APsystems’ own cloud infrastructure. This is outside the scope of a local integration. The AP EasyPower app is the only supported way to update firmware.

Hi,

it’s a bit confusing that my inverter shows 135W power even though it’s shutdown. It also somehow falsifies the statistics.
Could the values for total power (Gesamtleistung), power of P1 (Leistung von P1) and power of P2 (Leistung von P2) go to 0 if the inverter is powered off?

Thanks,
meiser

@Osiris09, may I kindly ask to look at my issue?

Hi @meiser Sorry for the late reply. Please download v1.3.0; hopefully that should fix the issue. If you find any other bugs, please create an issue on GitHub. Thanks.

1 Like

New sensors are now available:

  • DC voltage
  • DC current
  • Mains frequency and voltage
  • EZ1 device temperature

Installation via HACS (custom repository): :point_right: https://github.com/shopf/apsystems-ez1-enhanced

1 Like

Hi @Osiris09, how did you get the FW 1.12.2? I try to install for the last 2 weeks, but it’s not offered in the app. Thanks for any advice!

There are different EZ1 hardware versions. If your EZ1 is older, version 1.10.2 may be the only one available as of today. Newer versions receive 1.12.2 or 1.12.2t. And then there are specific “battery versions” with completely different firmware designations. You can find more detailed information in PV forums, e.g. at www.photovoltaikforum.com

Thank you for this. I already made a bunch of helper sensors to prevent my panels from showing errors every night, but having it built in the integration is a lot cleaner.

One questions, I upgraded to this integration after my panels reset. But as expected, this fix only works if the rollover happens after upgrading. Is there a way to manually fix this afterwards? Essentially I want to add ~540kWh to the lifetime production of each panel and the total.

Hi @tim.bemindt yes, you can add the old value (per MPPT input) retroactively at any time.
In the device list, click the three dots on the right > select "Reconfigure," and enter the last known value into the "Lifetime energy start offset input (kWh)" field. For example, if you enter 540.62 there, the current counter will be increased by 540.62 kWh. I hope this helps :wink:

Yes, thank you. Exactly what I needed. Even the value was spot on, but I guess that's no coincidence. I wonder what number makes it overflow, I don't recognize a power of two or anything.

Thank you for the integration, working well for EZ1-M. Does it also support EZ1-H?

Hi @r.fitzgerald2004 I haven't received any feedback from an EZ1-H user yet. The datasheet shows a higher output power of 960W instead of 800W, which my integration should detect.
You are very welcome to give it a try and open an issue at any time if anything comes up. I would appreciate some feedback.

@Osiris09 I have installed yesterday 2 APsystems EZ1-D 1800w inverters with this integration and all seems to work well thank you.

1 Like

Hey @r.fitzgerald2004 do you have an EZ1-H? Have you been able to try out my integration yet? Is everything working?
I’d really appreciate it if you could let me know whether the EZ1-H works — that way, I can add the device to the README. Thanks.

@tim.bemindt With the latest version (released today), you can now enter negative offset values ​​as well — which might be useful for very rare cases.

1 Like

Hi,
Just upgraded from the official integration to yours and it works flawlessly without doing anything. Using EZ1-H with latest firmware 1.12.2. Only problem is that it appears as an EZ1-M model otherwise everything is displayed properly. Thanks for the work!

Hi @spiderben25 thank you for the feedback. I've just released a new version and implemented automatic model recognition. From now on, the correct hardware designation will be determined and displayed for the following models:

  • EZ1-M
  • EZ1-LV
  • EZ1-H
  • EZ1D-L
  • EZ1D
  • EZ1D-H

If you encounter any problems, please open an issue. If it works flawlessly for you, a simple "like" on my post would be great feedback. Thanks.

1 Like