def now(self, timestamp=None, weather_data=None, model='STC'): """Preditive power output""" if timestamp is None: timestamp = datetime.datetime.now() - \ datetime.timedelta(hours=self.tz) if model != 'STC' and weather_data == None: weather_data = forecast.data(self.place)['currently'] if model == 'CC': record = irradiation.blave(timestamp, self.place, self.tilt, \ self.azimuth, cloudCover=weather_data['cloudCover']) else: record = irradiation.blave(timestamp, self.place, self.tilt, \ self.azimuth) irradiance = irradiation.irradiation(record, self.place, None,\ t=self.tilt, array_azimuth=self.azimuth, model='p9') if hasattr(self, 'hourly_shade'): irradiance = irradiance * self.hourly_shade.shade(timestamp) if model == 'STC': return self.p_ac(irradiance) else: t_cell = irradiation.moduleTemp(irradiance, weather_data) return self.p_ac(irradiance, t_cell)
#-- Get the historic cloud cover for that day # if ccddatabase: # cloud_cover = ccddatabase[str(m_s)+str(d_s)] # else: # cloud_cover = 0.0 for setting in settings: if setting['Name'] not in res: res[setting['Name']] = {} e = str(m_s) + str(d_s) if e not in res[setting['Name']]: res[setting['Name']][e] = [] #-- Global synthetic irradiation from Solpy global_irradiation_rec = irradiation.blave(dt, place, 0, 180) #-- Adjust it for the tilt. The value is now in W/m^2 irrValue = irradiation.irradiation(global_irradiation_rec, place, None, setting['Tilt'], setting['Azimuth'], 'p9') horr_irrValue = irradiation.irradiation( global_irradiation_rec, place, None, 0, 180, 'p9') #-- Workaround to keep the data aligned d_ = datetime.date(2013, 1, 1) t_ = datetime.time(hour, minute) dt_ = datetime.datetime.combine(d_, t_) res[setting['Name']][e].append([dt_, irrValue, horr_irrValue]) import scipy import os
def forecast_output(self, daylightSavings=False, source=None, hours=24): """forecast output of system""" #todo: model and forecast should use consistant units; Wh or KWh #default is forecast with solpy.blave #this is ugly code... sorry #todo: refactor d = datetime.date.today() endTimeUTC = datetime.datetime(d.year, d.month, d.day)\ + datetime.timedelta(hours=hours-self.tz) if source == 'noaa': wseries = noaa.herp_derp_interp(self.place) ts = [] irr = [] for i in wseries: if i['utc_datetime'] > endTimeUTC: break rec = irradiation.blave(i['utc_datetime'], self.place, \ self.tilt, self.azimuth, cloudCover=i['cloudCover']) irradiance = irradiation.irradiation(rec, self.place,\ t=self.tilt, array_azimuth=self.azimuth, model='p90') t_cell = irradiation.moduleTemp(irradiance, i) irr.append(self.p_ac(irradiance, t_cell)) ts.append(i['utc_datetime']) resultset = ResultSet() resultset.values = irr resultset.timeseries = ts return resultset if source == 'forecast': wseries = forecast.hourly(self.place) ts = [] irr = [] for i in wseries: if i['utc_datetime'] > endTimeUTC: break irradiance = irradiation.irradiation(i, self.place,\ t=self.tilt, array_azimuth=self.azimuth, model='p90') t_cell = irradiation.moduleTemp(irradiance, i) irr.append(self.p_ac(irradiance, t_cell)) ts.append(i['utc_datetime']) resultset = ResultSet() resultset.values = irr resultset.timeseries = ts return resultset if source == 'blave': wseries = forecast.hourly(self.place) ts = [] irr = [] for i in wseries: if i['utc_datetime'] > endTimeUTC: break rec = irradiation.blave(i['utc_datetime'], self.place, \ self.tilt, self.azimuth, cloudCover=i['cloudCover']) irradiance = irradiation.irradiation(rec, self.place,\ t=self.tilt, array_azimuth=self.azimuth, model='p90') t_cell = irradiation.moduleTemp(irradiance, i) irr.append(self.p_ac(irradiance, t_cell)) ts.append(i['utc_datetime']) rs = ResultSet() rs.values = irr rs.timeseries = ts return rs else: #blave stime = datetime.datetime.today().timetuple() tz_off = datetime.timedelta(hours=self.tz) if daylightSavings: tz_off += datetime.timedelta(hours=1) else: tz_off += datetime.timedelta(hours=0) initTime = datetime.datetime(stime[0], stime[1], stime[2]) - tz_off timeseries = [] values = [] ts = initTime while ts < datetime.datetime.now()-tz_off: ts += datetime.timedelta(minutes=5) currentPower = self.now(ts) values.append(currentPower) timeseries.append(ts) rs = ResultSet() rs.values = values rs.timeseries = timeseries return rs
def forecast_output(self, daylightSavings=False, source=None, hours=24): """forecast output of system""" #todo: model and forecast should use consistant units; Wh or KWh #default is forecast with solpy.blave #this is ugly code... sorry #todo: refactor d = datetime.date.today() endTimeUTC = datetime.datetime(d.year, d.month, d.day)\ + datetime.timedelta(hours=hours-self.tz) if source == 'noaa': wseries = noaa.herp_derp_interp(self.place) ts = [] irr = [] for i in wseries: if i['utc_datetime'] > endTimeUTC: break rec = irradiation.blave(i['utc_datetime'], self.place, \ self.tilt, self.azimuth, cloudCover=i['cloudCover']) irradiance = irradiation.irradiation(rec, self.place,\ t=self.tilt, array_azimuth=self.azimuth, model='p90') t_cell = irradiation.moduleTemp(irradiance, i) irr.append(self.p_ac(irradiance, t_cell)) ts.append(i['utc_datetime']) resultset = ResultSet() resultset.values = irr resultset.timeseries = ts return resultset if source == 'forecast': wseries = forecast.hourly(self.place) ts = [] irr = [] for i in wseries: if i['utc_datetime'] > endTimeUTC: break irradiance = irradiation.irradiation(i, self.place,\ t=self.tilt, array_azimuth=self.azimuth, model='p90') t_cell = irradiation.moduleTemp(irradiance, i) irr.append(self.p_ac(irradiance, t_cell)) ts.append(i['utc_datetime']) resultset = ResultSet() resultset.values = irr resultset.timeseries = ts return resultset if source == 'blave': wseries = forecast.hourly(self.place) ts = [] irr = [] for i in wseries: if i['utc_datetime'] > endTimeUTC: break rec = irradiation.blave(i['utc_datetime'], self.place, \ self.tilt, self.azimuth, cloudCover=i['cloudCover']) irradiance = irradiation.irradiation(rec, self.place,\ t=self.tilt, array_azimuth=self.azimuth, model='p90') t_cell = irradiation.moduleTemp(irradiance, i) irr.append(self.p_ac(irradiance, t_cell)) ts.append(i['utc_datetime']) rs = ResultSet() rs.values = irr rs.timeseries = ts return rs else: #blave stime = datetime.datetime.today().timetuple() tz_off = datetime.timedelta(hours=self.tz) if daylightSavings: tz_off += datetime.timedelta(hours=1) else: tz_off += datetime.timedelta(hours=0) initTime = datetime.datetime(stime[0], stime[1], stime[2]) - tz_off timeseries = [] values = [] ts = initTime while ts < datetime.datetime.now() - tz_off: ts += datetime.timedelta(minutes=5) currentPower = self.now(ts) values.append(currentPower) timeseries.append(ts) rs = ResultSet() rs.values = values rs.timeseries = timeseries return rs
#-- Get the historic cloud cover for that day # if ccddatabase: # cloud_cover = ccddatabase[str(m_s)+str(d_s)] # else: # cloud_cover = 0.0 for setting in settings: if setting['Name'] not in res: res[setting['Name']] = {} e = str(m_s)+str(d_s) if e not in res[setting['Name']]: res[setting['Name']][e] = [] #-- Global synthetic irradiation from Solpy global_irradiation_rec = irradiation.blave(dt, place, 0, 180) #-- Adjust it for the tilt. The value is now in W/m^2 irrValue = irradiation.irradiation(global_irradiation_rec, place, None, setting['Tilt'], setting['Azimuth'], 'p9') horr_irrValue = irradiation.irradiation(global_irradiation_rec, place, None, 0, 180, 'p9') #-- Workaround to keep the data aligned d_ = datetime.date(2013, 1, 1) t_ = datetime.time(hour, minute) dt_ = datetime.datetime.combine(d_, t_) res[setting['Name']][e].append([dt_, irrValue, horr_irrValue]) import scipy import matplotlib as mpl import matplotlib.pyplot as plt # plt.rc('text', usetex=True) # plt.rc('font', family='serif')