Skip to main content

SolarEdge

SolarEdge solar PV (and StorEdge / Energy Hub battery) sites integrated through the public monitoringapi.solaredge.com REST API.

One GEM device represents one SolarEdge site. The driver polls power-flow and overview endpoints on a configurable interval and surfaces production, consumption, grid, and battery telemetry as device attributes. The integration is read-only — SolarEdge's public API exposes no documented write actions.

Prerequisites

  • A SolarEdge monitoring account with at least one site.
  • "Account API access" toggled on in mySolarEdge → Admin → Site Access → API Access. The toggle is one-time per account and reveals an api_key field.
  • The site's numeric site_id, visible in the URL of any site dashboard.
  • Outbound HTTPS (port 443) from the GEM controller to monitoringapi.solaredge.com.

Setup

  1. Sign in to monitoring.solaredge.com → Admin → Site Access.
  2. Toggle API Access on. Copy the generated api_key. The key is per-account and gives access to all sites the account can see.
  3. Note the numeric site_id for the site you want to track (it is the integer in the URL of the site dashboard).
  4. In GEM admin, create a device using the solaredge driver. Set:
    • api_key — the key from step 2 (stored encrypted).
    • site_id — the numeric id from step 3.
  5. Save and reload. The driver will hit /site/{site_id}/details to verify the credentials, then begin polling /currentPowerFlow and /overview.
  6. Inspect device attributes for live telemetry (pv_power, grid_power, load_power, storage_power, storage_charge_level, lifetime_energy_wh, etc.).

Attribute reference

Configuration

AttributeRequiredDescription
api_keyyesPer-account SolarEdge monitoring API key. Stored encrypted; sent as the ?api_key=… query parameter on every call.
site_idyesNumeric site id.
ipnoAPI host override. Defaults to monitoringapi.solaredge.com.
portnoHTTPS port. Defaults to 443.
status_intervalnoPoll interval in milliseconds. Defaults to 300000 (5 min) to stay inside the 300/day rate limit.

Driver-managed telemetry

AttributeSourceNotes
pv_powercurrentPowerFlow.PV.currentPowerAlways ≥ 0. Unit = power_unit (typically kW).
load_powercurrentPowerFlow.LOAD.currentPowerSite consumption.
grid_powercurrentPowerFlow.GRID.currentPowerNegative when exporting (LOAD → GRID edge present).
storage_powercurrentPowerFlow.STORAGE.currentPowerNegative when charging (any → STORAGE edge present). Hybrid sites only.
storage_charge_levelcurrentPowerFlow.STORAGE.chargeLevelPercent state-of-charge.
storage_statuscurrentPowerFlow.STORAGE.statuse.g. Charging / Discharging / Idle.
power_unitcurrentPowerFlow.unitUsually kW.
current_power_woverview.currentPower.powerLatest production reading from the overview endpoint.
lifetime_energy_wh, day_energy_wh, month_energy_wh, year_energy_whoverview.{lifeTimeData,lastDayData,lastMonthData,lastYearData}.energyLifetime / current-day / current-month / current-year energy totals.

Zones are not used by this driver — all telemetry lives on the device.

Commands

CommandDescription
get_sitesLists every site the API key can see. Useful for finding a site_id.
get_site_detailsReturns the full site detail block for the configured site.
get_overviewLifetime / yearly / monthly / daily / current-day energy plus current power.
get_power_flowPV / LOAD / GRID / STORAGE snapshot used by the polling loop.
get_inventoryInverters, meters, batteries, gateways for the site.
get_storage_dataBattery telemetry for the last hour. Hybrid sites only.

Limitations

  • No write endpoints. Battery charge schedules, inverter modes, and curtailment cannot be set through the public Monitoring API. Anyone needing this should look at SolarEdge's Modbus/TCP interface on the inverter (a separate driver, not yet implemented).
  • No LAN fallback. This driver depends on SolarEdge's cloud. If the site loses internet, telemetry stops updating until connectivity returns.
  • Rate-limited. The Monitoring API caps each account at 300 requests per day. The driver makes two requests per poll (currentPowerFlow + overview), so the default 5-minute interval consumes ~576 requests/day across two GEM polls per cycle — verify your account headroom before running multiple SolarEdge sites or shortening the interval. If you have many sites under one key, raise status_interval.
  • Storage telemetry is best-effort. Direction (charging vs discharging) is derived from the connections[] graph; if SolarEdge changes that schema in a future API release, signs may need to be re-derived.

Troubleshooting

  • details returns 403 — API access is not toggled on for the account, or the API key is from a different account that can't see this site. Re-check Admin → Site Access.
  • details returns 401 / 400 INVALID_TOKEN — the API key was regenerated and the old key was invalidated. Mint a new one and update the api_key attribute.
  • All requests fail with 429 Too Many Requests — you've exceeded the 300/day quota. The counter resets at midnight UTC. Raise status_interval and/or consolidate sites under one device.
  • Storage attributes never populate — your site is PV-only with no SolarEdge battery. The STORAGE node is absent from currentPowerFlow and the driver intentionally leaves storage_* attributes unchanged.
  • Overview energy values look off by 1000× — SolarEdge returns Wh in the overview endpoint and kW/kWh in the power-flow endpoint. Different attributes intentionally use different units (the names end in _wh vs the flow values being kW). Don't try to reconcile them — they come from different views.