Files

2.6 KiB

SolarEdge Monitoring API

Typed, dependency-free client for the SolarEdge Monitoring API at https://monitoringapi.solaredge.com.

Canonical reference: SolarEdge Monitoring API documentation (March 2026)

Directly readable local reference: docs/monitoring-api.md

Keep SOLAREDGE_API_KEY and SOLAREDGE_SITE_ID on the server. Do not expose them through EXPO_PUBLIC_ environment variables or bundle them into a client app.

import { createSolarEdgeClientFromEnv } from "@solar-dash/solaredgeapi";

const client = createSolarEdgeClientFromEnv();
const overview = await client.getSiteOverview();

The client exposes typed methods for site metadata, overview, energy, power, detailed meter series, current power flow, inventory, and equipment. Use client.get<T>(path, query) for other read-only Monitoring API endpoints. The site-specific methods use SOLAREDGE_SITE_ID by default, while still accepting an explicit site ID when needed.

The client limits itself to three concurrent requests, matching SolarEdge's documented concurrency limit. SolarEdge also applies daily quotas of 300 requests per account token and 300 requests per site ID and source IP, plus endpoint-specific maximum date ranges. Callers remain responsible for staying within those daily and date-range limits.

SolarEdge date/time parameters are strings in the site's local time zone:

  • dates: yyyy-MM-dd
  • date-times: yyyy-MM-dd HH:mm:ss

Experimental optimizer access

Optimizer values are not part of the official Monitoring API. The package also contains an explicitly unsupported, server-only portal client which performs the same OAuth2/PKCE login and session exchange as the Monitoring web portal. It does not require a browser at runtime.

SOLAREDGE_USERNAME=owner@example.com
SOLAREDGE_PASSWORD=...
import { createSolarEdgePortalClientFromEnv } from "@solar-dash/solaredgeapi";

const portal = createSolarEdgePortalClientFromEnv();
const optimizerSerials = await portal.listOptimizerSerials();
const optimizerMappings = await portal.listOptimizerMappings();
const energy = await portal.getOptimizerEnergy({
  startDate: "2026-08-09",
  endDate: "2026-08-09",
  optimizerSerials,
});

Never expose the portal credentials through EXPO_PUBLIC_ variables or a mobile/web bundle. Additional MFA challenges are detected but are not currently automated. Internal endpoints and response formats may change without notice. See docs/internal-optimizer-api.md.