🔧 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%2FTokyo",
    "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, longitudeparams(API呼び出し)観測地点の緯度・経度(例:東京)
tzsite.tzタイムゾーン。日本の場合は “Asia/Tokyo”
temperature_2mweather['temperature_2m']地表2mの気温(気象APIから取得)
direct_radiationweather['direct_radiation']直達日射量(太陽からの直接的な光)
diffuse_radiationweather['diffuse_radiation']散乱日射量(大気中で散乱された光)
global_radiationweather['global_radiation']全天日射量(直達+散乱の合計)
surface_tilt変数 surface_tiltパネルの傾斜角(例:30度)
surface_azimuth変数 surface_azimuthパネルの方位角。180度=南向き(日本の標準)
alpha_scmodule_parameters短絡電流の温度係数(セル温度上昇による出力変化率)
gamma_refmodule_parametersモジュールの最大出力点電力係数(Pmax変化に関連)
mu_gammamodule_parameters出力係数の温度変化率
I_sc_ref, V_oc_refmodule_parameters基準条件下の短絡電流・開放電圧(パネル仕様)
R_s, R_sh_refmodule_parameters直列抵抗・並列抵抗(セルの電気的損失)
nmodule_parametersダイオード係数(セルの非理想性を表す)
sapm_cell関数 pvlib.temperature.sapm_cellパネル温度推定関数(気温・風速などから)
singlediode関数 pvlib.pvsystem.singlediode単一ダイオードモデルにより出力(電力)を計算

✅ まとめ

ステップ説明
1ライブラリ導入
2地点と日付の設定(翌日)
3Open-Meteo APIで気象予測取得
4太陽位置と受光量の計算
5パネル出力(DC)予測
6可視化と分析