Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
            #-- 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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
            #-- 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')