node-red-contrib-apsystems-easypower 0.1.0

Node-RED nodes for the APsystems EasyPower (EZ1) cloud API.

npm install node-red-contrib-apsystems-easypower

node-red-contrib-apsystems-easypower

Node-RED nodes for the APsystems EasyPower cloud (EZ1 inverters).

Talks to the same encrypted cloud API as the official AP EasyPower mobile app — no local network access to the inverter is required, but a working EasyPower account is.

Inspired by the Home Assistant integration Meyblaubaer/apsystems-easypower-ha.

Nodes

Node What it does
apsystems-config Holds username / password. Logs in on demand and re-auths when the token expires.
apsystems-inverters Lists all EZ inverters on the account. Optional fan-out (one msg per inverter).
apsystems-realtime Live AC power per inverter (power, power1, power2 in W).
apsystems-statistic Energy totals: todayEnergy, monthEnergy, lifetimeEnergy (kWh) + lastPower (W).
apsystems-status Communication / running status of the inverter.

Install

From your Node-RED user directory (usually ~/.node-red):

npm install node-red-contrib-apsystems-easypower

…or, while developing locally:

cd ~/.node-red
npm install /path/to/node-red-contrib-apsystems-easypower

Restart Node-RED. The nodes appear under the APSystems category in the palette.

Quick start

  1. Drag any data node (e.g. apsystems-realtime) onto the flow.
  2. Open it, create a new apsystems-config with your EasyPower credentials.
  3. Trigger the flow with an inject node — msg.payload carries the response.

Typical pattern: poll all inverters

[ inject (every 5 min) ]
        │
        ▼
[ apsystems-inverters (fan-out=on) ]
        │  (one msg per inverter, msg.payload = inverter object)
        ├─────────────► [ apsystems-realtime ]  ──►  [ debug ]
        └─────────────► [ apsystems-statistic ] ──►  [ debug ]

The realtime / statistic nodes pick up msg.payload.inverter_dev_id automatically, so you don't have to wire the device ID yourself.

Don't poll faster than once a minute. The cloud doesn't update faster than that anyway and aggressive polling risks rate-limits or account locks. The Home Assistant integration uses a 5-minute interval; we recommend the same.

Message contract

apsystems-inverters

  • Input: any (used as trigger).
  • Output (default): msg.payload = array of inverters. Also sets msg.systemId and msg.systems.
  • Output (fan-out): one msg per inverter, msg.payload = single inverter object including inverter_dev_id.

apsystems-realtime / -statistic / -status

  • Device ID is taken from (in order): node setting → msg.devIdmsg.inverter_dev_idmsg.payload.inverter_dev_id.
  • Output: msg.payload = response object. msg.devId and msg.offline are set.
  • When the inverter is offline (cloud code 1001), msg.offline=true and msg.payload={} — no error is raised, so a chained statistic node can still report cached lifetime energy if you want it.

Notes & caveats

  • TLS: the EasyPower cloud sometimes presents non-standard certificates, so the config node defaults to rejectUnauthorized=false. Tick Strict TLS if your environment is happy with strict validation.
  • App credentials (API_APP_ID, API_APP_SECRET, RSA public key) are extracted from the EasyPower APK. APsystems may rotate them — if login starts failing across all users, that's the likely cause.
  • Tested with: EZ1-M-EU (2 channels). Other EZ-series inverters should work, since the API surface is the same.

License

MIT — see LICENSE.

Node Info

Version: 0.1.0
Updated 1 day ago
License: MIT
Rating: not yet rated

Categories

Actions

Rate:

Downloads

0 in the last week

Nodes

  • apsystems-config
  • apsystems-inverters
  • apsystems-realtime
  • apsystems-statistic
  • apsystems-status

Keywords

  • node-red
  • apsystems
  • easypower
  • ez1
  • solar
  • inverter
  • balcony
  • balkonkraftwerk

Maintainers