GribStream

Previsão de geração solar

Este dashboard estima geração horária de painéis solares a partir de radiação de onda curta e temperatura do ar de modelos meteorológicos. Ele começa com uma configuração residencial típica para que ninguém precise preencher um formulário completo de projeto fotovoltaico: Denver, sistema de 6 kW DC, aproximação de inclinação fixa, 14% de perdas totais do sistema fotovoltaico (PV), 96% de eficiência do inversor e relação DC/AC de 1.2.

A previsão usa GFS, HRRR ou NBM pelo endpoint padrão do GribStream /api/v2/[dataset]/timeseries. A variável meteorológica principal é DSWRF em superfície, o campo da NOAA de fluxo descendente de radiação de onda curta, combinado com temperatura do ar a 2 m para uma correção simples por temperatura dos painéis. O dashboard mantém o horizonte em 24 ou 36 horas para que as linhas retornadas sejam horárias nos modelos disponíveis.

O que os controles fazem

Como ler os painéis

O cálculo é intencionalmente leve. Ele ajuda a comparar padrões de produção movidos pelo clima, avaliar rapidamente uma instalação proposta e mostrar como expressions do GribStream transformam campos de previsão em métricas de aplicação. Não é um modelo fotovoltaico adequado para decisões financeiras e não substitui PVWatts, SAM, modelagem de sombra do local, medições de sujeira nos painéis nem um modelo profissional de irradiância no plano do arranjo.

O controle de geometria do arranjo é deliberadamente conservador. Um cálculo real de inclinação e azimute precisa de posição solar, irradiância normal direta, irradiância horizontal difusa, albedo, orientação dos módulos, geometria das fileiras e sombra. Este dashboard só pede DSWRF e temperatura a 2 m do GribStream, então expõe a premissa de geometria como um multiplicador explícito em vez de esconder falsa precisão atrás de um campo de inclinação.

Matemática e constantes

O dashboard calcula todos os campos derivados com GribStream expressions. Com os controles padrão, as equações são:

  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 o dashboard limita a consulta a linhas horárias.

As constantes mais importantes são:

Essas constantes tornam a previsão explicável e fácil de ajustar, mas não substituem a ficha técnica do módulo, albedo medido, medições de sujeira nos painéis, geometria de sombras ou uma execução completa de PVWatts/SAM.

Requisição representativa do GribStream

Este exemplo usa a configuração padrão para Denver com GFS: 6 kW com aproximação de inclinação fixa. O dashboard preenche os valores numéricos a partir de variáveis do Grafana e calcula as estimativas PV em uma única chamada padrão do 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 que os valores padrão são razoáveis

Contexto e referências: GribStream expressions · inventário GFS · inventário HRRR · inventário NBM · tabela NOAA GRIB2 de radiação de onda curta · API PVWatts V8 · definições de irradiância do SAM · variáveis do Grafana.