Example #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)
Example #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)
Example #3
0
 def virr(self, p_ac, timestamp=None, weather_data=None):
     """calculate virtual irradiation"""
     girr = 1000.
     gp_ac = self.p_ac(girr)
     if p_ac > gp_ac:
         print "WARNING: Edge effect?"
     iteration = 2
     while round(p_ac, -1) != round(gp_ac, -1):
         #todo: improve non linear search routine
         t_cell = irradiation.moduleTemp(girr, weather_data)
         gp_ac = self.p_ac(girr, t_cell)
         if gp_ac <= p_ac:
             girr = girr + 1000./(iteration**2)
         else:
             girr = girr - 1000./(iteration**2)
         iteration += 1
         if iteration > 25:
             raise Exception('too many iterations')
     solar_az, solar_alt = irradiation.ephem_sun(self.place, timestamp)
     irrRec = irradiation.irrGuess(timestamp, girr, solar_alt, solar_az,\
             self.tilt, self.azimuth)
     irrRec['girr'] = round(girr, 0)
     return irrRec
Example #4
0
 def virr(self, p_ac, timestamp=None, weather_data=None):
     """calculate virtual irradiation"""
     girr = 1000.
     gp_ac = self.p_ac(girr)
     if p_ac > gp_ac:
         print "WARNING: Edge effect?"
     iteration = 2
     while round(p_ac, -1) != round(gp_ac, -1):
         #todo: improve non linear search routine
         t_cell = irradiation.moduleTemp(girr, weather_data)
         gp_ac = self.p_ac(girr, t_cell)
         if gp_ac <= p_ac:
             girr = girr + 1000. / (iteration**2)
         else:
             girr = girr - 1000. / (iteration**2)
         iteration += 1
         if iteration > 25:
             raise Exception('too many iterations')
     solar_az, solar_alt = irradiation.ephem_sun(self.place, timestamp)
     irrRec = irradiation.irrGuess(timestamp, girr, solar_alt, solar_az,\
             self.tilt, self.azimuth)
     irrRec['girr'] = round(girr, 0)
     return irrRec
Example #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
Example #6
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