AP Systems EasyPower — Cloud API integration (reverse-engineered from APK, no local API needed)

AP Systems EasyPower – Cloud API Integration

TL;DR: I reverse-engineered the AP EasyPower Android app to build a Home Assistant integration that uses the official cloud API — no local API, no WiFi range issues, just your app login credentials.

GitHub / HACS: GitHub - Meyblaubaer/apsystems-easypower-ha: Home Assistant custom integration for APsystems EZ1 micro-inverters via cloud API · GitHub


Why this exists

The existing APsystems integrations all rely on the local API — which requires enabling a hidden developer mode in the app, being on the same WiFi, and stops working when the inverter goes to sleep. I wanted something that works the same way the app does: via the cloud.

How the authentication works

After decompiling the APK with jadx, I found that login uses:

  • A random 32-byte hex AES-256 key and 16-digit IV
  • Both encrypted with the app’s RSA public key (PKCS1v15)
  • Username and password AES-CBC encrypted, output as hex (not base64 — this tripped me up for a while)
  • app_id and app_secret sent in the POST body alongside the encrypted credentials

After login, all data endpoints use a standard Bearer token over HTTPS.

Sensors exposed

Sensor Unit Source
Current Power W Real-time
Power Channel 1 / 2 W Real-time
Energy Today kWh Real-time
Energy This Month kWh Statistics
Energy Lifetime kWh Statistics
Last Reported Power W Statistics

Offline handling: When the inverter shuts down at night (API returns code 1001), power sensors correctly show unavailable while energy sensors (lifetime, monthly) retain their last known values.

Installation

Via HACS (recommended):

  1. HACS → Custom repositories → Meyblaubaer/apsystems-easypower-ha → Integration
  2. Restart HA
  3. Settings → Integrations → Add → “AP Systems EasyPower”
  4. Enter your AP EasyPower app username (account name, not email) and password

Tested with: EZ1-M-EU (600W)
Should work with: Any inverter accessible via the AP EasyPower app — please open an issue if yours doesn’t work, I’d love to expand support.


Feedback, bug reports and PRs are very welcome!