# PV-produksjonsberegning

> Forventet års- og månedsproduksjon for et solcelleanlegg hvor som helst i Norge, regnet på TMY Norge med terrenghorisont. Flere takflater, klipping, snøtap, P50 til P95 og optimal vinkel. Samme beregning som PVGIS, med norske data.

Kilde: https://solkart.no/api/dokumentasjon/pv · Sist oppdatert 2026-09-15 · Base-URL https://api.solkart.no · OpenAPI: https://solkart.no/openapi.json

## Hva du får

Månedlig og årlig produksjon (kWh), innstråling i modulplanet (kWh/m²), standardavvik mellom år, månedlig makseffekt og tapspostene hver for seg. Modellkjeden er den samme som i EUs PVGIS (Perez-transposisjon, Martin-Ruiz-refleksjon, Faiman-temperatur, Huld-effektmodell), men klimadataene er [TMY Norge](/api/dokumentasjon/tmy) i 3 km og horisonten leses fra Kartverkets høydemodell for punktet. Beregningen er validert mot PVGIS 5.3.

Endepunktet krever ingen nøkkel og har ingen kvote. Timeverdier leveres ikke; trenger du dem, hent [TMY](/api/dokumentasjon/tmy) og regn selv.

## GET /api/pv/calc

```bash
curl "https://api.solkart.no/api/pv/calc?lat=59.91&lon=10.75&peakpower=10&angle=35&aspect=0"
```

| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
| `lat`, `lon` | tall | påkrevd | 57 til 71,5° N, 4 til 31,5° Ø, fastlands-Norge |
| `peakpower` | 0,05 til 100 000 kWp | 1 | Installert effekt for én flate |
| `angle` | 0 til 90° | 35 | Helning (0 = flatt) |
| `aspect` | −180 til 180° | 0 | Asimut, **0 = sør**, −90 = øst, +90 = vest |
| `arrays` | `kwp:vinkel:asimut,…` | | 1 til 4 flater i samme beregning, f.eks. `arrays=6:35:0,4:25:-90`. Overstyrer `peakpower`, `angle`, `aspect`. Kan ikke kombineres med `optimize`. |
| `loss` | 0 til 60 % | 14 | Systemtap: inverter, kabling, mismatch, LID. 14 er PVGIS-standard; moderne anlegg ligger på 5 til 7. |
| `pvtechchoice` (`tech`) | `crystSi` \| `CIS` \| `CdTe` | `crystSi` | Modulteknologi (Huld-koeffisienter). TOPCon og PERC = `crystSi`. |
| `mountingplace` (`mounting`) | `free` \| `building` | `free` | Ventilert eller bygningsintegrert (Faiman-temperaturmodell) |
| `optimize` | `none` \| `slope` \| `both` | `none` | Finn optimal helning, eller helning og asimut |
| `confidence` | `p50` \| `p75` \| `p90` \| `p95` | `p50` | Solår-persentil fra TMY-statistikken. P90 = året som overskrides 90 % av årene. |
| `maxpower` | 0,05 til 100 000 kW | | Klipping: maks AC-effekt ut (inverter eller nettgrense). Klippes per time på summen av flatene. |
| `horizon` | `0` | på | `0` slår av terrenghorisonten |
| `snowloss` | `1` | av | Legg til stedlig snø- og smusstap (samme modell som [snøtap](/api/dokumentasjon/snotap)) |
| `snowmounting` | `roof` \| `rack` \| `flat` | `rack` ved `free`, ellers `roof` | Montasje for snømodellen |
| `format` | `json` \| `csv` | `json` | |

Svar `200` (ekte svar, Oslo sentrum, 10 kWp, 35°, sør):

```json
{
  "inputs": {
    "location": { "lat": 59.9105, "lon": 10.7687, "elevation_m": 61.3, "cell_id": "y0578x614" },
    "meteo_data": { "source": "SunPoint V6 ens_tmy30 (NORA3+SunPoint 1991-2020)", "confidence": "p50", "horizon": "V3 terrain (DTM10)" },
    "pv_module": { "technology": "crystSi", "peak_power_kwp": 10, "system_loss_pct": 14 },
    "mounting_system": { "type": "free", "slope_deg": 35, "azimuth_deg": 0, "optimized": null },
    "snow_loss": null
  },
  "outputs": {
    "monthly": [
      { "month": 1, "E_d": 5.29, "E_m": 163.94, "H(i)_d": 0.63, "H(i)_m": 19.63, "SD_m": 10.82, "P_peak_kW": 4.553 },
      { "month": 6, "E_d": 48.11, "E_m": 1443.27, "H(i)_d": 6.04, "H(i)_m": 181.12, "SD_m": 205.14, "P_peak_kW": 8.031 },
      { "month": 12, "E_d": 4.42, "E_m": 137.11, "H(i)_d": 0.53, "H(i)_m": 16.41, "SD_m": 14.0, "P_peak_kW": 3.391 }
    ],
    "totals": {
      "E_d": 26.95, "E_m": 819.63, "E_y": 9835.55,
      "H(i)_d": 3.3, "H(i)_m": 100.48, "H(i)_y": 1205.78, "SD_y": 320.5,
      "l_aoi": -2.4, "l_spec": 1.6, "l_tg": -4.3, "l_total": -18.4,
      "specific_yield_kwh_kwp": 984
    }
  },
  "meta": {
    "sky_view_factor": 0.998,
    "model": "Perez1990 + Martin-Ruiz(ar=0.16) + Faiman + Huld2010; spektral konstant per teknologi (tilnaerming)",
    "note": "Kun maaneds- og aarsverdier (+ maanedlig makseffekt) leveres - timeserier er ikke tilgjengelige her.",
    "generator": "SunPoint PV-kalkulator v1 (solkart.no/sunpoint)"
  }
}
```

| Felt | Enhet | Beskrivelse |
|---|---|---|
| `outputs.monthly[].E_d`, `E_m` | kWh | Produksjon per dag (middel) og per måned |
| `outputs.monthly[].H(i)_d`, `H(i)_m` | kWh/m² | Innstråling i modulplanet per dag og måned |
| `outputs.monthly[].SD_m` | kWh | Standardavvik i månedsproduksjon mellom år |
| `outputs.monthly[].P_peak_kW` | kW | Høyeste timeeffekt i måneden (sum over flatene) |
| `outputs.monthly[].snow_loss_pct` | % | Bare med `snowloss=1` |
| `outputs.totals.E_y` | kWh | Årsproduksjon |
| `outputs.totals.H(i)_y` | kWh/m² | Årsinnstråling i modulplanet |
| `outputs.totals.l_aoi` | % | Refleksjonstap ved innfallsvinkel |
| `outputs.totals.l_spec` | % | Spektral effekt (positiv = gevinst) |
| `outputs.totals.l_tg` | % | Temperatur og lav innstråling |
| `outputs.totals.l_clip` | % | Klipping, bare med `maxpower` |
| `outputs.totals.l_snow` | % | Snø og smuss, bare med `snowloss=1` |
| `outputs.totals.l_total` | % | Sum av alle tap inkludert `loss` |
| `outputs.totals.specific_yield_kwh_kwp` | kWh/kWp | Spesifikk avling per år |
| `outputs.arrays[]` | | Med `arrays`: `kwp`, `angle_deg`, `aspect_deg`, `E_y`, `specific_yield_kwh_kwp` per flate |
| `inputs.mounting_system.optimized` | | Med `optimize`: `{angle, aspect}` som ble funnet |
| `meta.sky_view_factor` | 0 til 1 | Andel av himmelen som er synlig over horisonten |

Tapene `l_aoi`, `l_spec`, `l_tg`, `l_clip` og `l_snow` modelleres eksplisitt og skal derfor ikke også legges i `loss`.

## Flere takflater og klipping

```bash
# Øst/vest-anlegg, 60 kWp per side, 10° helning, inverter begrenset til 100 kW
curl "https://api.solkart.no/api/pv/calc?lat=59.22&lon=10.93&arrays=60:10:-90,60:10:90&maxpower=100&loss=7"
```

Energiene summeres per time før klipping, så øst- og vestflater som ikke topper samtidig gir riktig `P_peak_kW` og `l_clip`.

## CSV

`format=csv` gir månedstabellen (`month,E_d,E_m,H(i)_d,H(i)_m,SD_m,P_peak_kW`), en tom linje og totalene som `key,value`. Fil: `sunpoint_pv_<lat>_<lon>.csv`.

## Caching

JSON-svaret har `Cache-Control: public, max-age=86400` og lagres hos oss i 7 døgn (`X-Pv-Cache: HIT` viser treff); CSV caches ikke. Horisonten for punktet lagres i 30 døgn.

## Feil

| Status | `error` |
|---|---|
| `400` | `Ugyldige tall: peakpower (kWp), loss (%), angle (0-90), aspect (-180..180, 0=sor).` |
| `400` | `arrays: 1-4 flater som kwp:vinkel:asimut, kommaseparert.` |
| `400` | `optimize stottes ikke sammen med arrays.` |
| `400` | `confidence ma vaere p50\|p75\|p90\|p95`, `maxpower: 0.05-100000 kW …`, `format ma vaere json\|csv` |
| `404` | `Ingen TMY-celle innen ~6 km av punktet (utenfor fastlands-Norge-masken).` |
| `503` | `TMY-data ikke tilgjengelig.` |

## Samme beregning i nettleseren

[solkart.no/sunpoint](/sunpoint) kjører dette endepunktet med adressesøk, kart, rapport til PDF og valgfri takanalyse fra flyfoto. Rapporten viser parametrene som ble brukt, så en beregning kan gjentas via API-et.
