1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本向けPV需給シミュレーターがOSSで存在しなかったので作った ——JIS C 8907 × NEDO METPV-20 × Python/Gradio、Hugging Face Spacesで無料公開

1
Last updated at Posted at 2026-03-22

日本向けPV需給シミュレーターがOSSで存在しなかったので作った

——JIS C 8907 × NEDO METPV-20 × Python/Gradio、Hugging Face Spacesで無料公開

なぜ作ったか

家庭用・産業用の太陽光発電やマイクログリッドに関わる仕事を
ひと通りやってきた。

そのなかでずっと気になっていたことが一つある。

「発電量と需要を同時に扱える、日本向けのオープンソースの
シミュレーターが存在しない」

海外にはNRELのSAM(System Advisor Model)という
よくできたツールがある。ただ日本で使おうとすると壁がある。

  • 気象データがNEDO METPV-20に対応していない
  • JIS C 8907準拠ではない
  • 日本の電気料金体系に対応していない
  • デスクトップアプリなのでブラウザから触れない

国内はどうかというと、商用SaaSは存在する。
計算精度も高い。ただソースは非公開だ。

(計算ロジックがブラックボックスのまま提案書だけが
飛び交う業界というのは、まあそういうものなのだが)

もう一つの動機を正直に書くと、Claude Codeで
どこまで開発できるかを試したかった。
太陽光はその実験台としてちょうどよかった。

何ができるか

スクリーンショット 2026-03-22 205213.png

地点・パネル構成・需要プリセットを選んで実行すると、
30分×365日=17,520コマの需給バランスが計算される。

主な機能はこうだ。

発電計算

  • NEDO METPV-20(47都道府県)の気象データを使用
  • JIS C 8907に準拠した発電量推定
  • pvlibによるGHI→POA変換(傾斜面日射量への変換)
  • 気温による出力補正(毎時反映)
  • 最大8面アレイ対応、面ごとにPCS出力制限を設定可能

需給バランス

  • 「電気+ガス併用(5,000kWh/年)」
    「オール電化+おひさまエコキュート(7,000kWh/年)」の2プリセット
    ※おひさまエコキュートは昼間の太陽光で湯を沸かす給湯器で、
     自家消費率が上がりやすい世帯向けの想定だ。
  • 年間消費量を入力してスケーリング可能
  • 自家消費率・自給率を自動計算

蓄電池シミュレーション

  • ルールベースの充放電制御(SOC追跡)
  • 需給バランスグラフにSOC推移を重ね表示

経済性計算

  • 従量電灯B・スマートライフS/L(時間帯別)に対応
  • 東京ガス一般料金との比較(オール電化vs併用)
  • FIT売電収入の計算(卒FIT後の単価切替含む)

グラフは月別の発電量・需要量・自家消費の比較棒グラフと、
任意の日の30分単位需給バランス曲線の2種類。
数字だけでなく「いつ余っていつ足りないか」が視覚的にわかる。

技術構成

構成はシンプルで、すべてapp.py一枚に収まっている。

気象データ
NEDO METPV-20の47都道府県データをSQLiteに格納し、
地点選択時に30分×365日=17,520コマ分を引き出す構造だ。
データ要素は日射量・気温・風速など10要素。
CSVを直接読むのではなくDBにしたのは、HF Spacesへの
デプロイ時にファイル数を増やしたくなかったからだ。

発電計算(JIS C 8907)
傾斜面日射量への変換はpvlibのErbs分離モデル+
等方性天空モデルを使用している。
月積算ではなく30分単位で逐次計算しているため、
時間帯ごとの需給バランスが出せる。
温度補正係数も毎コマ気温を参照して反映している。

# JIS C 8907 温度補正の実装イメージ
k_pt = 1 + alpha * (cell_temp - 25)  # alpha: 温度係数
e_pm = k_prime * k_pt * p_as * h_am / g_s

需要データ(NREL EULP)
需要プリセットはNRELのEnd-Use Load Profiles(EULP)を
日本向けに補正して作成した。
米国固有の消費(電気乾燥機・プール等)を除去し、
月別補正係数で日本の消費パターンに近づけている。
気候区分はASHRAE 4A(東京相当)を使用した。

スタック

役割 ライブラリ
UI Gradio
発電計算 pvlib
気象DB SQLite
グラフ Plotly
デプロイ Hugging Face Spaces

コードはHugging Face Spacesのリポジトリに含まれている。
https://huggingface.co/spaces/hachinai/pv-sim-gh

やってみてわかったこと

NEDOデータと30分解像度の壁

NEDO METPV-20は1時間単位のデータだ。
JIS C 8907の計算自体は月積算でも成立するが、
需給バランスを30分単位で出すには30分に補間する必要がある。
(月平均値で計算すると「いつ余っていつ足りないか」が
見えなくなるからだ)

需要データはNRELから借りて日本向けに直した

日本の家庭の30分単位消費データは公開されているものが少ない。
そこでNRELのEnd-Use Load Profiles(EULP)を使った。
気候区分ASHRAE 4A(東京相当)の一戸建てデータを取得し、
日本向けに以下の補正をかけている。

  • 電気乾燥機・プール・電気温水器など米国固有の消費を除去
  • 月別補正係数で日本の季節パターンに近づける

完全に日本の実測データではないが、
30分解像度の時系列パターンを得る手段としては
現状これが現実的な選択だった。
データの出所と補正内容をこうして明示しておくのは、
再現性という意味でOSSとして最低限の誠実さだと思っている。

既存ソフトとの設計上の違い

市販のPV設計ソフトは、方位・傾斜角ごとに
NEDOのサイトからデータをダウンロードして読み込む設計が多い。
つまり「東向き5°」と「南向き30°」を比較したければ
それぞれ別ファイルを用意する必要があるか、ブラックボックスに任せるしかない。

今回は水平面日射量(GHI)だけをDBに持たせ、
pvlibで任意の方位・傾斜角に変換する設計にした。
パラメータをスライダーで変えるたびに再計算できるのは
この構造のおかげだ。角度を変えるたびにファイルを
差し替える必要がない。

# GHI → 傾斜面日射量(POA)への変換イメージ
dni, dhi = pvlib.irradiance.erbs(ghi, zenith, doy)
poa = pvlib.irradiance.get_total_irradiance(
    surface_tilt, surface_azimuth,
    zenith, azimuth, dni, ghi, dhi
)

まとめと今後

作ったものをまとめるとこうなる。

  • JIS C 8907準拠の発電計算をpvlibで実装
  • NEDO METPV-20(47都道府県)をSQLiteに格納し、
     水平面日射量からpvlibで任意の方位・傾斜角に変換
  • 30分×365日の需給バランスをブラウザから無料で試算可能

現在は産業用(高圧・特別高圧)向けの拡張を開発中だ。
デマンドチャージ・逆潮流禁止・蓄電池の充放電最適化(LP)
あたりを実装する予定で、住宅用とは別のSpaceで公開する予定でいる。

(そちらは公開したらまた記事を書く)

閉じコンが激しい日本の再エネ業界でOSSが育っていくことに少しでも貢献できればいいが。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?