Skip to content

PVDAQ system 34

examples/pvdaq_system34.py runs the PV part of the library on NREL PVDAQ system 34: a 146.64 kWp rooftop array in Las Vegas with one 135 kW inverter (PV Data Acquisition database, OEDI, CC BY 4.0), 2016-2018 at 15 minutes. The repository holds no data; the script reads the long table that the companion project pv-budget-bridge builds from the public files.

python examples/pvdaq_system34.py --data <folder with long_34.parquet> --out results/

Reading the data

The file is a long table with the met station's own signal names and units, in local standard time (Etc/GMT+8, no DST) and stamped at the end of each interval. The mapping converts both:

MAPPING = {
    "format": "long", "timezone": "Etc/GMT+8", "label": "end", "step": "15min",
    "signals": {
        "poa_irradiance": {"signal": "poa", "unit": "W/m2"},
        "ambient_temp_f": {"signal": "t_amb", "unit": "degF"},
        "module_temp_f": {"signal": "t_mod", "unit": "degF"},
        "wind_speed_mph": {"signal": "wind_speed", "unit": "mph"},
    },
    "devices": {"MET": "PLANT"},
}
wide = schema.to_wide(schema.read(raw, MAPPING))

Data quality

Six hours of identical values count as stuck (zeros of irradiance and wind at night are ignored):

signal missing stuck usable share
poa 4 715 0 0.955
t_amb 9 948 31 511 0.606
t_mod 4 400 0 0.958
wind_speed 4 400 1 138 0.947
p_ac 2 205 0 0.979

The ambient temperature sensor sits frozen for weeks at a time, as pv-budget-bridge also found. The flagged values are set to missing, so the cell temperature (PVsyst heat balance, \(U_c = 21\), \(U_v = 1.35\)) and with it the temperature-corrected ratios use only intervals with a real reading.

Results

Daylight intervals (POA above 50 W/m²); \(T_\mathrm{typ} = 56.1\) °C is the irradiance-weighted cell temperature of the three years, standing in for a typical year. The inverter counts as running above 2 % of its rating; the expected power for the energy basis comes from a temperature-corrected model scaled to the plant's median ratio of measured to modelled power.

year energy (MWh) H_POA (kWh/m²) PR PR_25 PR_wc A_time A_energy
2016 175.0 2039 0.585 0.677 0.583 0.948 0.946
2017 178.3 1988 0.612 0.712 0.612 0.994 0.999
2018 124.3 1405 0.603 0.698 0.601 0.994 0.999

Over the year \(\mathrm{PR}_\mathrm{wc} \approx \mathrm{PR}\), as it should be, while \(\mathrm{PR}_{25}\) is ten points higher: in the desert sun the cells run around 56 °C, far from 25 °C. Month by month the weather-corrected ratio removes the summer dip of the plain one:

month PR PR_25 PR_wc A_time A_energy lost (kWh)
2016-05 0.632 0.730 0.628 0.994 0.999 15
2016-06 0.119 0.150 0.127 0.195 0.202 10 147
2016-07 0.595 0.764 0.648 0.990 0.998 42
2016-08 0.605 0.753 0.641 0.989 0.999 24

June 2016 is the inverter outage that pv-budget-bridge reports as the main availability loss of the year; the energy basis prices it at about 10 MWh. 2018 holds fewer months of data.

The absolute PR is low because the met station's irradiance sensor reads 14-22 % above both a clear-sky model and ERA5 (pv-budget-bridge, which rescales the sensor before its bridge, reports PR 0.63-0.67). The library does not rescale anything on its own: that is an analyst's decision, made explicitly and recorded.