このダッシュボードは、気象モデルの短波放射と気温から時間ごとの太陽光発電量を推定します。完全な太陽光発電の設計フォームを入力しなくても試せるよう、住宅用システムとしてよくある標準設定から始めます。標準設定はDenver、6 kW DCの太陽光アレイ、固定傾斜に近いパネル配置の仮定、太陽光発電の総損失14%、インバーター効率96%、DC/AC比1.2です。
予報には、標準のGribStream /api/v2/[dataset]/timeseriesエンドポイントを通じて、GFS、HRRR、またはNBMのデータを使います。中心になる気象入力は、地表のDSWRFです。これはNOAAの下向き短波放射フィールドで、2 m気温と組み合わせ、パネル温度による簡易補正に使います。利用可能なモデルで返る行が時間ごとになるよう、ダッシュボードはリードタイム(モデル実行時刻から有効時刻までの予報時間)を24時間または36時間に抑えています。
計算は意図的に軽量です。気象に左右される発電パターンの比較、提案中の設置案の簡易評価、GribStreamの計算式(expressions)が予報フィールドを用途別の指標に変換できることの説明に向いています。一方で、資金調達や設計判断の根拠にできる太陽光発電の設計モデルではなく、PVWatts、SAM、現地の影モデル、実測の汚れ損失、技術設計向けのパネル面日射モデルの代替ではありません。
アレイ配置のコントロールは意図的に保守的です。本格的な傾斜角と方位角の計算には、太陽位置、直達日射、水平面散乱日射、アルベド、モジュール方位、列配置、影の情報が必要です。このダッシュボードはGribStreamからDSWRFと2 m気温だけをリクエストするため、傾斜面フィールドの裏に見かけだけの精度を隠すのではなく、配置の仮定を名前付きの倍率として見せています。
ダッシュボードは、すべての派生フィールドをGribStreamの計算式(expressions)で計算します。標準設定では、式は次の通りです。
temp_c = temp_k - 273.15poa_wm2 = ghi_wm2 * 1.0800cell_temp_c = temp_c + (poa_wm2 / 800.0) * 25.0000temperature_factor = max(0, 1 + (-0.3500 / 100) * (cell_temp_c - 25.0))loss_factor = max(0, 1 - 14.0000 / 100)dc_power_kw = 6.0000 * poa_wm2 / 1000.0 * temperature_factor * loss_factorac_limit_kw = 6.0000 / 1.2000ac_power_kw = min(dc_power_kw * 96.0000 / 100, ac_limit_kw)hourly_energy_kwh = ac_power_kw。ダッシュボードがクエリを時間ごとの行に制限しているためです。重要な定数は次の通りです。
6.0000は標準のDC側アレイ容量(kW)です。ユーザーが変更できます。1.0800は標準のアレイ配置倍率です。水平DSWRFに固定傾斜に近い簡易近似をかけます。他のシナリオでは1.0000、0.9300、1.1800を使います。800.0 W/m2と25.0000 °Cは、セル温度上昇の簡易推定に使います。これは内部標準値であり、現地校正されたモジュール熱モデルではありません。-0.3500は内部の出力温度係数で、単位は%/°Cです。25.0 °Cの参照温度に対して適用します。14.0000は、気象以外の総損失率の標準値です。ユーザーが選択できます。1.2000は標準のDC/AC比です。つまり6 kW DCアレイのAC上限は5 kWになります。ユーザーが選択できます。96.0000は内部のインバーター効率です。1000.0 W/m2は、日射をPVの定格出力に近い基準値へ正規化します。これらの定数により、予報は説明しやすく、仮定も変えやすくなります。ただし、モジュールデータシート、実測アルベド、実測の汚れ損失、影の形状、PVWatts/SAMによる完全なシミュレーションの代替ではありません。
この例は、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" }
]
}'
DSWRFが水平放射フィールドだからです。背景とリファレンス: GribStreamの計算式(expressions) · GFSモデルページ · HRRRモデルページ · NBMモデルページ · NOAA GRIB2短波放射テーブル · PVWatts V8 API · SAMの日射定義 · Grafana variables.