GribStream

Previsione di produzione solare

Questa dashboard stima la produzione oraria di pannelli solari a partire da radiazione a onde corte e temperatura dell'aria dei modelli meteorologici. Parte da una configurazione residenziale tipica, così non serve compilare un modulo completo di progettazione fotovoltaica: Denver, un impianto da 6 kW DC, un'approssimazione a inclinazione fissa, 14% di perdite PV totali, 96% di efficienza dell'inverter e rapporto DC/AC di 1.2.

La previsione usa dati GFS, HRRR o NBM tramite l'endpoint standard GribStream /api/v2/[dataset]/timeseries. Il dato meteorologico principale è DSWRF in superficie, il campo NOAA di flusso radiativo a onde corte verso il basso, combinato con temperatura dell'aria a 2 m per una semplice correzione da temperatura del pannello. La dashboard mantiene la finestra di lead time a 24 o 36 ore, così le righe restituite restano orarie tra i modelli disponibili.

Cosa fanno i controlli

Come leggere i pannelli

Il calcolo è volutamente leggero. Aiuta a confrontare profili di produzione guidati dal meteo, valutare rapidamente una possibile installazione e spiegare come le espressioni GribStream (expressions) possono trasformare campi di previsione in metriche applicative. Non è un modello fotovoltaico adatto a decisioni finanziarie e non sostituisce PVWatts, SAM, modellazione delle ombre del sito, misure di soiling (sporcamento dei moduli) o un modello professionale di irradianza sul piano dei moduli.

Il controllo della geometria dei moduli è volutamente conservativo. Un vero calcolo di inclinazione e azimut richiede posizione solare, irradianza normale diretta, irradianza orizzontale diffusa, albedo, orientamento dei moduli, geometria delle file e ombreggiamento. Questa dashboard chiede a GribStream solo DSWRF e temperatura a 2 m, quindi espone l'ipotesi di geometria come moltiplicatore esplicito invece di nascondere una falsa precisione dietro un campo di inclinazione.

Matematica e costanti

La dashboard calcola tutti i campi derivati con espressioni GribStream (expressions). Con i controlli di default, le equazioni sono:

  1. temp_c = temp_k - 273.15
  2. poa_wm2 = ghi_wm2 * 1.0800
  3. cell_temp_c = temp_c + (poa_wm2 / 800.0) * 25.0000
  4. temperature_factor = max(0, 1 + (-0.3500 / 100) * (cell_temp_c - 25.0))
  5. loss_factor = max(0, 1 - 14.0000 / 100)
  6. dc_power_kw = 6.0000 * poa_wm2 / 1000.0 * temperature_factor * loss_factor
  7. ac_limit_kw = 6.0000 / 1.2000
  8. ac_power_kw = min(dc_power_kw * 96.0000 / 100, ac_limit_kw)
  9. hourly_energy_kwh = ac_power_kw, perché la dashboard limita la richiesta a righe orarie.

Le costanti più importanti sono:

Queste costanti rendono la previsione spiegabile e facile da variare, ma non sostituiscono la scheda tecnica del modulo, misure di albedo e soiling, geometria delle ombre o una simulazione completa PVWatts/SAM.

Richiesta GribStream rappresentativa

Questo esempio usa la configurazione di default per Denver con GFS: 6 kW con approssimazione a inclinazione fissa. La dashboard riempie i valori numerici dalle variabili Grafana e calcola le stime PV in una singola chiamata standard GribStream /timeseries.

curl -X POST 'https://gribstream.com/api/v2/gfs/timeseries' \
  -H 'Content-Type: application/json' \
  -H 'Accept: text/csv' \
  -H 'Authorization: Bearer [API_TOKEN]' \
  -d '{
    "fromTime": "2026-05-03T12:00:00Z",
    "untilTime": "2026-05-05T00:00:00Z",
    "minLeadTime": "0h",
    "maxLeadTime": "36h",
    "coordinates": [
      { "lat": 39.7392, "lon": -104.9903, "name": "Denver, CO" }
    ],
    "variables": [
      { "name": "DSWRF", "level": "surface", "alias": "ghi_wm2" },
      { "name": "TMP", "level": "2 m above ground", "alias": "temp_k" }
    ],
    "expressions": [
      { "expression": "temp_k - 273.15", "alias": "temp_c" },
      { "expression": "ghi_wm2 * 1.0800", "alias": "poa_wm2" },
      { "expression": "temp_c + (poa_wm2 / 800.0) * 25.0000", "alias": "cell_temp_c" },
      { "expression": "func.Max(0.0, 1 + (-0.3500 / 100.0) * (cell_temp_c - 25.0))", "alias": "temperature_factor" },
      { "expression": "func.Max(0.0, 1 - 14.0000 / 100.0)", "alias": "loss_factor" },
      { "expression": "6.0000 * poa_wm2 / 1000.0 * temperature_factor * loss_factor", "alias": "dc_power_kw" },
      { "expression": "6.0000 / 1.2000", "alias": "ac_limit_kw" },
      { "expression": "func.Min(dc_power_kw * 96.0000 / 100.0, ac_limit_kw)", "alias": "ac_power_kw" },
      { "expression": "ac_power_kw", "alias": "hourly_energy_kwh" },
      { "expression": "func.Max(0.0, (6.0000 - ac_power_kw) / 6.0000 * 100.0)", "alias": "unused_capacity_pct" }
    ]
  }'

Perché i default sono ragionevoli

Contesto e riferimenti: espressioni GribStream · inventario modello GFS · inventario modello HRRR · inventario modello NBM · tabella NOAA GRIB2 della radiazione a onda corta · API PVWatts V8 · definizioni di irradianza SAM · variabili Grafana.