GribStream

太陽光発電量予報

このダッシュボードは、気象モデルの短波放射と気温から時間ごとの太陽光発電量を推定します。完全な太陽光発電の設計フォームを入力しなくても試せるよう、住宅用システムとしてよくある標準設定から始めます。標準設定はDenver、6 kW DCの太陽光アレイ、固定傾斜に近いパネル配置の仮定、太陽光発電の総損失14%、インバーター効率96%、DC/AC比1.2です。

予報には、標準のGribStream /api/v2/[dataset]/timeseriesエンドポイントを通じて、GFSHRRR、またはNBMのデータを使います。中心になる気象入力は、地表のDSWRFです。これはNOAAの下向き短波放射フィールドで、2 m気温と組み合わせ、パネル温度による簡易補正に使います。利用可能なモデルで返る行が時間ごとになるよう、ダッシュボードはリードタイム(モデル実行時刻から有効時刻までの予報時間)を24時間または36時間に抑えています。

コントロールの役割

表示パネルの読み方

計算は意図的に軽量です。気象に左右される発電パターンの比較、提案中の設置案の簡易評価、GribStreamの計算式(expressions)が予報フィールドを用途別の指標に変換できることの説明に向いています。一方で、資金調達や設計判断の根拠にできる太陽光発電の設計モデルではなく、PVWatts、SAM、現地の影モデル、実測の汚れ損失、技術設計向けのパネル面日射モデルの代替ではありません。

アレイ配置のコントロールは意図的に保守的です。本格的な傾斜角と方位角の計算には、太陽位置、直達日射、水平面散乱日射、アルベド、モジュール方位、列配置、影の情報が必要です。このダッシュボードはGribStreamからDSWRFと2 m気温だけをリクエストするため、傾斜面フィールドの裏に見かけだけの精度を隠すのではなく、配置の仮定を名前付きの倍率として見せています。

計算式と定数

ダッシュボードは、すべての派生フィールドをGribStreamの計算式(expressions)で計算します。標準設定では、式は次の通りです。

  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。ダッシュボードがクエリを時間ごとの行に制限しているためです。

重要な定数は次の通りです。

これらの定数により、予報は説明しやすく、仮定も変えやすくなります。ただし、モジュールデータシート、実測アルベド、実測の汚れ損失、影の形状、PVWatts/SAMによる完全なシミュレーションの代替ではありません。

代表的なGribStreamリクエスト

この例は、DenverでGFSを使う標準設定、つまり6 kWの固定傾斜に近い簡易近似を使います。ダッシュボードは数値の標準値をGrafanaの変数から埋め、1つの標準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" }
    ]
  }'

標準値が妥当な理由

背景とリファレンス: GribStreamの計算式(expressions) · GFSモデルページ · HRRRモデルページ · NBMモデルページ · NOAA GRIB2短波放射テーブル · PVWatts V8 API · SAMの日射定義 · Grafana variables.