🔧 1. ライブラリのインストール
pip install pvlib pandas matplotlib requests
🌍 2. 設置場所と予測対象日の設定
import pandas as pd
from pvlib.location import Location
from datetime import datetime, timedelta
# 例:東京都
site = Location( latitude = 35.68 , longitude = 139.76 , tz = 'Asia/Tokyo' , altitude = 10 )
# 翌日の日付を自動で取得
tomorrow = (datetime.now() + timedelta( days = 1 )).strftime( '%Y-%m- %d ' )
times = pd.date_range( start = tomorrow, end = tomorrow + ' 23:00' , freq = '1h' , tz = site.tz)
🌤 3. Open-Meteo API から気象予測データを取得
import requests
import json
latitude = 35.68
longitude = 139.76
params = {
"latitude" : latitude,
"longitude" : longitude,
"hourly" : "temperature_2m,cloudcover,direct_radiation,diffuse_radiation,global_radiation" ,
"timezone" : "Asia %2F Tokyo" ,
"start_date" : tomorrow,
"end_date" : tomorrow
}
url = "https://api.open-meteo.com/v1/forecast"
response = requests.get(url, params = params)
data = response.json()[ 'hourly' ]
weather = pd.DataFrame(data)
weather[ 'time' ] = pd.to_datetime(weather[ 'time' ])
weather = weather.set_index( 'time' )
🌞 4. 太陽位置とパネル受光量の計算
solar_position = site.get_solarposition(times)
import pvlib
surface_tilt = 30
surface_azimuth = 180
poa_irrad = pvlib.irradiance.get_total_irradiance(
surface_tilt,
surface_azimuth,
solar_position[ 'apparent_zenith' ],
solar_position[ 'azimuth' ],
dni = weather[ 'direct_radiation' ],
ghi = weather[ 'global_radiation' ],
dhi = weather[ 'diffuse_radiation' ],
model = 'isotropic'
)
⚡ 5. パネル温度とDC出力の計算
from pvlib.temperature import sapm_cell
from pvlib.pvsystem import calcparams_pvsyst, singlediode
# モジュールパラメータ(例)
module_parameters = {
'alpha_sc' : 0.0047 ,
'gamma_ref' : 1.1 ,
'mu_gamma' : - 0.0003 ,
'I_sc_ref' : 6 ,
'V_oc_ref' : 40 ,
'R_s' : 0.5 ,
'R_sh_ref' : 200 ,
'n' : 1.2
}
temp_air = weather[ 'temperature_2m' ]
temps = sapm_cell(poa_irrad[ 'poa_global' ], temp_air = temp_air, wind_speed = 1 )
IL , I0, Rs, Rsh, nNsVth = calcparams_pvsyst(poa_irrad[ 'poa_global' ], temps, ** module_parameters)
dc = singlediode( IL , I0, Rs, Rsh, nNsVth)
📉 6. 発電量予測の可視化
import matplotlib.pyplot as plt
dc[ 'p_mp' ].plot( label = 'Predicted DC Power [W]' , figsize = ( 10 , 4 ))
plt.title( 'Predicted PV Output for ' + tomorrow)
plt.xlabel( 'Time' )
plt.ylabel( 'Power (W)' )
plt.grid( True )
plt.legend()
plt.tight_layout()
plt.show()
📘 使用パラメータの解説(日本語)
以下は、コード内で使用されている主なパラメータの日本語での説明です。パラメータがキーの場合は、どの変数に含まれているか(例:weather[‘temperature_2m’])も併記しています。
パラメータ 所属変数 説明 latitude
, longitude
params
(API呼び出し)観測地点の緯度・経度(例:東京) tz
site.tz
タイムゾーン。日本の場合は “Asia/Tokyo” temperature_2m
weather['temperature_2m']
地表2mの気温(気象APIから取得) direct_radiation
weather['direct_radiation']
直達日射量(太陽からの直接的な光) diffuse_radiation
weather['diffuse_radiation']
散乱日射量(大気中で散乱された光) global_radiation
weather['global_radiation']
全天日射量(直達+散乱の合計) surface_tilt
変数 surface_tilt
パネルの傾斜角(例:30度) surface_azimuth
変数 surface_azimuth
パネルの方位角。180度=南向き(日本の標準) alpha_sc
module_parameters
短絡電流の温度係数(セル温度上昇による出力変化率) gamma_ref
module_parameters
モジュールの最大出力点電力係数(Pmax変化に関連) mu_gamma
module_parameters
出力係数の温度変化率 I_sc_ref
, V_oc_ref
module_parameters
基準条件下の短絡電流・開放電圧(パネル仕様) R_s
, R_sh_ref
module_parameters
直列抵抗・並列抵抗(セルの電気的損失) n
module_parameters
ダイオード係数(セルの非理想性を表す) sapm_cell
関数 pvlib.temperature.sapm_cell
パネル温度推定関数(気温・風速などから) singlediode
関数 pvlib.pvsystem.singlediode
単一ダイオードモデルにより出力(電力)を計算
✅ まとめ
ステップ 説明 1 ライブラリ導入 2 地点と日付の設定(翌日) 3 Open-Meteo APIで気象予測取得 4 太陽位置と受光量の計算 5 パネル出力(DC)予測 6 可視化と分析