У меня есть набор прогнозов погоды HQ для данного местоположения X, оптимизированный для моей страны. Это включает в себя прогнозируемые значения глобального освещения (единица измерения: Вт / м ^ 2) для данной временной отметки.
Кроме того, у меня есть следующая информация о солнечной панели в точке X: координаты (широта, долгота), часовой пояс, высота над уровнем моря, азимут, наклон .
Теперь я хочу вычислить скорректированное излучение на солнечной панели, то есть излучение, которое будет на солнечной панели, учитывая азимут + наклон. Коллега указал мне на PVLib . Затем я изучил примеры intro , где они показывают, как рассчитать скорректированное освещение для нескольких заданных местоположений; именно так, как я хочу.
Однако они используют значения освещенности из своей собственной модели и определяют детали солнечного модуля. Я только хочу рассчитать скорректированные значения освещенности, но не смог выяснить, как использовать мои собственные прогнозы освещенности из прогнозов погоды .
Любые предложения, что мне нужно сделать, чтобы достичь своей цели?
(Я новичок в теме, извиняюсь, если задаю слишком тривиальный вопрос.)
Что у меня так далеко:
naive_times = pd.DatetimeIndex(start='2018', end='2019', freq='1h')
coordinates = [(sol_loc_lat, sol_loc_lng, sol_loc_desc, sol_loc_alt, sol_loc_tz),]
my_irradiance = df_meteo_raw_all[[m_datetime, m_irradiance]].set_index(m_datetime)[m_irradiance]
# get the module and inverter specifications from SAM
sandia_modules = pvlib.pvsystem.retrieve_sam('SandiaMod')
sapm_inverters = pvlib.pvsystem.retrieve_sam('cecinverter')
module = sandia_modules['Canadian_Solar_CS5P_220M___2009_']
inverter = sapm_inverters['ABB__MICRO_0_25_I_OUTD_US_208_208V__CEC_2014_']
# specify constant ambient air temp and wind for simplicity
temp_air = 20 # todo get from meteo data
wind_speed = 0 # todo get from meteo data
for latitude, longitude, name, altitude, timezone in coordinates:
localized_system = LocalizedPVSystem(module_parameters=module,
inverter_parameters=inverter,
surface_tilt=sol_tilt, # or latitude as in example?
surface_azimuth=sol_azimuth, # or 180 as in example?
latitude=latitude,
longitude=longitude,
name=name,
altitude=altitude,
tz=timezone)
times = naive_times.tz_localize(timezone)
#clearsky = localized_system.get_clearsky(times)
solar_position = localized_system.get_solarposition(times)
#total_irrad = localized_system.get_irradiance(solar_position['apparent_zenith'],
# solar_position['azimuth'],
# clearsky['dni'],
# clearsky['ghi'],
# clearsky['dhi'])
temps = localized_system.sapm_celltemp(my_irradiance, # was: total_irrad['poa_global'],
wind_speed, temp_air)
aoi = localized_system.get_aoi(solar_position['apparent_zenith'],
solar_position['azimuth'])
airmass = localized_system.get_airmass(solar_position=solar_position)
effective_irradiance = localized_system.sapm_effective_irradiance(total_irrad['poa_direct'], # update change here too, how?
total_irrad['poa_diffuse'], # update change here too, how?
airmass['airmass_absolute'], aoi)
dc = localized_system.sapm(effective_irradiance, temps['temp_cell'])
ac = localized_system.snlinverter(dc['v_mp'], dc['p_mp'])
annual_energy = ac.sum()
energies[name] = annual_energy
Обратите внимание, что я заменил total_irrad['poa_global']
на my_irradiance
, и позже мне придется его заменить, но не знаю как. И действительно ли необходимо указывать характеристики солнечного модуля, просто чтобы рассчитать скорректированное излучение?