GribStream

Pronóstico de generación solar

Este panel 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 arreglo 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 panel 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 las expresiones de GribStream 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 panel 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 panel calcula todos los campos derivados con expresiones de GribStream. 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 panel 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 panel 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: expresiones de GribStream · inventario de GFS · inventario de HRRR · inventario de NBM · tabla NOAA GRIB2 de radiación de onda corta · API PVWatts V8 · definiciones de irradiancia de SAM · variables de Grafana.