Sungrow iSolarCloud integration (custom, HACS) — sensors + optional charge/discharge control

Hi all,

I’ve been building a custom integration for Sungrow solar/battery systems that talks to the official iSolarCloud OpenAPI (not the Modbus/local route, and not the reverse-engineered app API — the real developer portal API with an app key + secret key). Sharing it here in case it’s useful to others with Sungrow hybrid inverters.

Repo: GitHub - steven-g-w/HA-Sungrow: Home Assistant integration for Sungrow solar systems via the official iSolarCloud OpenAPI · GitHub

What it does

  • Config flow setup — no YAML. Plant ID is optional; the integration auto-discovers it from your account if you leave it blank.

  • Sensors for plant, hybrid inverter (SH-series), and battery/BMS (SBR-series) devices: PV power, load power, daily/total yield, feed-in and purchased energy, battery SoC/SoH/temperature, charge/discharge power, and more — around 40+ entities depending on your system.

  • Sensor names and units are pulled from iSolarCloud’s own point metadata where available, so they should stay accurate as Sungrow’s API evolves.

  • Optional device control (off by default, opt-in via the integration’s Configure dialog): charge/discharge command, charge/discharge power, SOC upper/lower limits, forced charging schedule. This writes real parameters to your inverter, so it’s gated behind an explicit toggle.

  • Installable via HACS as a custom repository.

Why iSolarCloud API instead of Modbus/local

I wanted something that didn’t need a local TCP/RS485 connection to the inverter and could also support cloud-side control endpoints. Trade-off is obviously cloud dependency and iSolarCloud’s polling cadence (~5 min).


:warning: Heads up: this is genuinely early. I only started building it a couple of days ago, it’s tested against exactly one system (my own — an SH10RT + SBR256), and I’m still actively finding and fixing bugs (one already: an early version of the SOC-limit control applied 1/10th of the value you set, fixed in v0.2.2). It is not battle-tested, error handling around Sungrow’s API quirks is still evolving, and the config format may still change between releases. If you try it, please treat it as beta — back up nothing important on it yet, watch the logs, and open a GitHub issue if something looks wrong rather than assuming it’s your setup. Feedback and bug reports are very welcome; I just don’t want anyone assuming this is a polished, widely-used integration yet.


Feel free to ask questions or file issues on GitHub. Happy to hear if it works (or doesn’t) on other Sungrow hybrid models.

1 Like