GribStream

Pronóstico de generación solar

Este dashboard estima generación horaria de paneles solares a partir de radiación de onda corta y temperatura del aire de modelos meteorológicos. Arranca con una configuración residencial típica para que nadie tenga que completar un formulario completo de diseño fotovoltaico: Denver, un conjunto DC de 6 kW, una aproximación de inclinación fija, 14% de pérdidas PV totales, 96% de eficiencia del inversor y una relación DC/AC de 1.2.

El pronóstico usa datos de GFS, HRRR o NBM a través del endpoint estándar de GribStream /api/v2/[dataset]/timeseries. La variable meteorológica principal es DSWRF en superficie, el campo NOAA de flujo descendente de radiación de onda corta, combinado con temperatura del aire a 2 m para una corrección simple por temperatura del panel. El dashboard mantiene el horizonte en 24 o 36 horas para que las filas devueltas sean horarias en los modelos disponibles.

Qué hacen los controles

Cómo leer los paneles

La matemática es intencionalmente liviana. Sirve para comparar patrones de producción impulsados por el clima, evaluar rápidamente una instalación propuesta y explicar cómo GribStream expressions pueden convertir campos de pronóstico en métricas de aplicación. No es un modelo fotovoltaico apto para decisiones financieras y no reemplaza PVWatts, SAM, modelado de sombras del sitio, mediciones de suciedad sobre paneles ni un modelo profesional de irradiancia en el plano del arreglo.

El control de geometría del arreglo es deliberadamente conservador. Un cálculo real de inclinación y azimut necesita posición solar, irradiancia normal directa, irradiancia horizontal difusa, albedo, orientación de módulos, geometría de filas y sombras. Este dashboard solo pide DSWRF y temperatura a 2 m desde GribStream, por lo que expone el supuesto de geometría como un multiplicador explícito en vez de esconder falsa precisión detrás de un campo de inclinación.

Matemática y constantes

El dashboard calcula todos los campos derivados con GribStream expressions. Con los controles predeterminados, las ecuaciones son:

  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, porque el dashboard limita la consulta a filas horarias.

Las constantes más importantes son:

Estas constantes hacen que el pronóstico sea explicable y fácil de variar, pero no reemplazan una ficha técnica del módulo, albedo medido, mediciones de suciedad sobre paneles, geometría de sombras ni una ejecución completa de PVWatts/SAM.

Llamada representativa a GribStream

Este ejemplo usa la configuración predeterminada para Denver con GFS: 6 kW con aproximación de inclinación fija. El dashboard completa los valores numéricos desde variables de Grafana y calcula las estimaciones PV en una sola llamada estándar de 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" }
    ]
  }'

Por qué los valores predeterminados son razonables

Contexto y referencias: GribStream expressions · GFS model inventory · HRRR model inventory · NBM model inventory · NOAA GRIB2 shortwave radiation table · PVWatts V8 API · SAM irradiance definitions · Grafana variables.