feedinlib package

Submodules

feedinlib.models module

@author: oemof development group

class feedinlib.models.Base(**kwargs)[source]

Bases: abc.ABC

The base class of feedinlib models.

Parameters:required (list of strings, optional) – Containing the names of the required parameters to use the model.
required

The (names of the) parameters this model requires in order to calculate the feedin.

As this is an abstract property, you have to override it in a subclass so that the model can be instantiated. This forces implementors to make the required parameters for a model explicit, even if they are empty, and gives them a good place to document them.

By default, this property is settable and its value can be specified via and argument on construction. If you want to keep this functionality, simply delegate all calls to the superclass.

class feedinlib.models.PvlibBased(**kwargs)[source]

Bases: feedinlib.models.Base

Model to determine the output of a photovoltaik module

The calculation is based on the library pvlib. [1]

Parameters:(list of strings, optional) (PvlibBased.required) – List of required parameters of the model

Notes

For more information about the photovoltaic model check the documentation of the pvlib library.

https://readthedocs.org/projects/pvlib-python/

References

[1]pvlib on github

Examples

>>> from feedinlib import models
>>> pv_model = models.PvlibBased()
angle_of_incidence(data, **kwargs)[source]

Determine the angle of incidence using the pvlib aoi funktion. [4]

Parameters:
  • data (pandas.DataFrame) – Containing the timeseries of the azimuth and zenith angle
  • tilt (float) – Tilt angle of the pv module (horizontal=0°).
  • azimuth (float) – Azimuth angle of the pv module (south=180°).
Returns:

Angle of incidence in degrees.

Return type:

pandas.Series

References

[4]pvlib angle of incidence.
feedin(**kwargs)[source]

Feedin time series for the given pv module.

In contrast to turbine_power_output it returns just the feedin series instead of the whole DataFrame.

Parameters:seeturbine_power_output
Returns:A time series of the power output for the given pv module.
Return type:pandas.Series
fetch_module_data(lib='sandia-modules', **kwargs)[source]

Fetch the module data from the Sandia Module library

The file is saved in the ~/.oemof folder and loaded from there to save time and to make it possible to work if the server is down.

Parameters:module_name (string) – Name of a pv module from the sam.nrel database [9].
Returns:The necessary module data for the selected module to use the pvlib sapm pv model. [8]
Return type:dictionary

Examples

>>> from feedinlib import models
>>> pvmodel = models.PvlibBased()
>>> name = 'Yingli_YL210__2008__E__'
>>> print(pvmodel.fetch_module_data(module_name=name).Area)
1.7
get_pv_power_output(**kwargs)[source]

Output of the given pv module. For the theoretical background see the pvlib documentation [11].

Parameters:weather (feedinlib.weather.FeedinWeather object) – Instance of the feedinlib weather object (see class FeedinWeather for more details)

Notes

See method required for all required parameters of this model.

Returns:The DataFrame contains the following new columns: p_pv_norm, p_pv_norm_area and all timeseries calculated before.
Return type:pandas.DataFrame

References

[11]pvlib documentation.
[12]module library.
global_in_plane_irradiation(data, **kwargs)[source]

Determine the global irradiaton on the tilted surface.

This method determines the global irradiation in plane knowing the direct and diffuse irradiation, the incident angle and the orientation of the surface. The method uses the pvlib.irradiance.globalinplane function [5] and some other functions of the pvlib.atmosphere [6] and the pvlib.solarposition [2] module to provide the input parameters for the globalinplane function.

Parameters:
  • data (pandas.DataFrame) – Containing the time index of the location and columns with the following timeseries: (dirhi, dhi, zenith, azimuth, aoi)
  • tilt (float) – Tilt angle of the pv module (horizontal=0°).
  • azimuth (float) – Azimuth angle of the pv module (south=180°).
  • albedo (float) – Albedo factor arround the module
Returns:

The DataFrame contains the following new columns: poa_global, poa_diffuse, poa_direct

Return type:

pandas.DataFrame

References

[5]pvlib globalinplane.
[6]pvlib atmosphere.

See also

solarposition_hourly_mean(), solarposition(), angle_of_incidenc()

pv_module_output(data, **kwargs)[source]

Determine the output of pv-system.

Using the pvlib.pvsystem.sapm function of the pvlib [8].

Parameters:
  • module_name (string) – Name of a pv module from the sam.nrel database [9].
  • data (pandas.DataFrame) – Containing the time index of the location and columns with the following timeseries: (temp_air [K], v_wind, poa_global, poa_diffuse, poa_direct, airmass, aoi)
  • method (string, optional) – Method to calulate the position of the sun according to the methods provided by the pvlib function (default: ‘ephemeris’) ‘pvlib.solarposition.get_solarposition’. [10]
Returns:

The DataFrame contains the following new columns: p_pv_norm, p_pv_norm_area

Return type:

pandas.DataFrame

References

[8](1, 2) pvlib pv-system.
[9](1, 2) module library.
[10]pvlib get_solarposition.
required

The parameters this model requires to calculate a feedin.

In this feedin model the required parameters are:

Modul_name:(string) - name of a pv module from the sam.nrel database [12]
Tilt:(float) - tilt angle of the pv module (horizontal=0°)
Azimuth:(float) - azimuth angle of the pv module (south=180°)
Albedo:(float) - albedo factor arround the module
solarposition(location, data, **kwargs)[source]

Determine the position of the sun unsing the time of the time index.

Parameters:
  • location (pvlib.location.Location) – A pvlib location object containing the longitude, latitude and the timezone of the location
  • data (pandas.DataFrame) – Containing the timeseries of the weather data and the time index of the location.
  • method (string, optional) – Method to calulate the position of the sun according to the methods provided by the pvlib function (default: ‘ephemeris’) ‘pvlib.solarposition.get_solarposition’. [2]
Returns:

The DataFrame contains the following new columns: azimuth, zenith, elevation

Return type:

pandas.DataFrame

Notes

This method is not used in favour to solarposition_hourly_mean.

Examples

>>> import pvlib
>>> import pandas as pd
>>> from feedinlib import models
>>> loc = pvlib.location.Location(52, 13, 'Europe/Berlin')
>>> pvmodel = models.PvlibBased()
>>> data = pd.DataFrame(index=pd.date_range(pd.datetime(2010, 1, 1, 0),
... periods=8760, freq='H', tz=loc.tz))
>>> elevation = pvmodel.solarposition(loc, data).elevation
>>> print(round(elevation[12], 3))
14.968

See also

solarposition_hourly_mean()
calculates the position of the sun as an hourly mean.
solarposition_hourly_mean(location, data, **kwargs)[source]

Determine the position of the sun as an hourly mean of all angles above the horizon.

Parameters:
  • location (pvlib.location.Location) – A pvlib location object containing the longitude, latitude and the timezone of the location
  • data (pandas.DataFrame) – Containing the time index of the location.
  • method (string, optional) – Method to calulate the position of the sun according to the methods provided by the pvlib function (default: ‘ephemeris’) ‘pvlib.solarposition.get_solarposition’. [2]
  • freq (string, optional) – The time interval to create the hourly mean (default: ‘5Min’).
  • pandas.DataFrame – The DataFrame contains the following new columns: azimuth, zenith, elevation

Notes

Combining hourly values for irradiation with discrete values for the position of the sun can lead to unrealistic results. Using hourly values for the position minimizes these errors.

References

[2](1, 2, 3) pvlib solarposition.

See also

solarposition()
calculates the position of the sun at a given time
class feedinlib.models.SimpleWindTurbine(**kwargs)[source]

Bases: feedinlib.models.Base

Model to determine the output of a wind turbine

Parameters:required (list of strings) – Containing the names of the required parameters to use the model.

Examples

>>> from feedinlib import models
>>> required_ls = ['h_hub', 'd_rotor', 'wind_conv_type', 'data_height']
>>> wind_model = models.SimpleWindTurbine(required=required_ls)

See also

Base, PvlibBased

cp_values(v_wind, **kwargs)[source]

Interpolates the cp value as a function of the wind velocity between data obtained from the power curve of the specified wind turbine type.

Parameters:
  • wind_conv_type (string) – Name of the wind converter type. Use self.get_wind_pp_types() to see a list of all possible wind converters.
  • v_wind (pandas.Series or numpy.array) – Wind speed at hub height [m/s]
Returns:

cp values, wind converter type, installed capacity

Return type:

numpy.array

>>> from feedinlib import models
>>> import numpy
>>> v_wi = numpy.array([1,2,3,4,5,6,7,8])
>>> w = models.SimpleWindTurbine(required=['wind_conv_type', 'v_wind'])
>>> cp = w.cp_values(wind_conv_type='ENERCON E 126 7500', v_wind=v_wi)
>>> print(cp)
[ 0.     0.     0.191  0.352  0.423  0.453  0.47   0.478]

See also

fetch_cp_values_from_db(), fetch_cp_values_from_file()

feedin(**kwargs)[source]

Alias for turbine_power_output.

fetch_cp_values(**kwargs)[source]

Fetch cp values from database, file or http source.

If no set of cp values is given, tries to fetch the values from the database. If no valid database connection is present, tries to read the values from a local file. If the need files are not present, loads the files from a server. First tries to read the hdf5 file and then the csv file.

Parameters:wind_conv_type (string) – Name of the wind converter type. Use self.get_wind_pp_types() to see a list of all possible wind converters.
Returns:cp values, wind converter type, installed capacity
Return type:pandas.DataFrame

Examples

>>> from feedinlib import models
>>> w_model = models.SimpleWindTurbine()
>>> cp = w_model.fetch_cp_values(wind_conv_type='ENERCON E 126 7500')
>>> index=cp.loc[0, :][2:55].index=='8'
>>> print(cp.loc[0, :][2:55].values[index][0])
0.478

See also

fetch_cp_values_from_db(), fetch_cp_values_from_file()

fetch_cp_values_from_file(**kwargs)[source]

Fetch cp values from a file or download it from a server.

The files are located in the ~/.oemof folder.

Parameters:
  • wind_conv_type (string) – Name of the wind converter type. Use self.get_wind_pp_types() to see a list of all possible wind converters.
  • cp_path (string, optional) – Path where the cp file is stored
  • filename (string, optional) – Filename of the cp file without suffix. The suffix should be csv or hf5.
  • url (string, optional) – URL from where the cp file is loaded if not present
Returns:

cp values, wind converter type, installed capacity or the full table if the given wind converter cannot be found in the table.

Return type:

pandas.DataFrame

Notes

The files can be downloaded from http://vernetzen.uni-flensburg.de/~git/

See also

fetch_cp_values_from_db()

get_wind_pp_types(print_out=True)[source]

Get the names of all possible wind converter types.

Parameters:print_out (boolean (default: True)) – Directly prints the list of types if set to True.

Examples

>>> from feedinlib import models
>>> w_model = models.SimpleWindTurbine()
>>> valid_types_df = w_model.get_wind_pp_types(print_out=False)
>>> valid_types_df.shape
(91, 2)
required

The parameters this model requires to calculate a feedin.

In this feedin model the required parameters are:

H_hub:(float) - Height of the hub of the wind turbine
D_rotor:(float) - ‘Diameter of the rotor [m]’,
Wind_conv_type:(string) - Name of the wind converter type. Use self.get_wind_pp_types() to see a list of all possible wind converters.
rho_hub(weather)[source]
Calculates the density of air in kg/m³ at hub height.
(temperature in K, height in m, pressure in Pa)
Parameters:
  • data (DataFrame or Dictionary) – Containing columns or keys with the timeseries for Temperature (temp_air) and pressure (pressure).
  • data_height (DataFrame or Dictionary) – Containing columns or keys with the height of the measurement or model data for temperature (temp_air) and pressure (pressure).
  • h_hub (float) – Height of the hub of the wind turbine
Returns:

density of air in kg/m³ at hub height

Return type:

float

Notes

Assumptions:
  • Temperature gradient of -6.5 K/km
  • Pressure gradient of -1/8 hPa/m

The following equations are used [22]:

T_{hub}=T_{air, data}-0.0065\cdot\left(h_{hub}-h_{T,data}
\right)

p_{hub}=\left(p_{data}/100-\left(h_{hub}-h_{p,data}\right)
*\frac{1}{8}\right)/\left(2.8706\cdot T_{hub}\right)

with T: temperature [K], h: height [m], p: pressure [Pa]

ToDo: Check the equation and add references.

References

[22]ICAO-Standardatmosphäre (ISA). http://www.deutscher-wetterdienst.de/lexikon/download.php?file=Standardatmosphaere.pdf

See also

v_wind_hub()

turbine_power_output(**kwargs)[source]

Calculates the power output in W of one wind turbine.

Parameters:
  • weather (feedinlib.weather.FeedinWeather object) – Instance of the feedinlib weather object (see class FeedinWeather for more details)
  • **kwargs – Keyword arguments for underlaying methods like filename to name the file of the cp_values.
  • TODO Move the following parameters to a better place (#) –
Returns:

Electrical power of the wind turbine

Return type:

pandas.Series

Notes

The following equation is used for the power output P_{wpp} [21]:

P_{wpp}=\frac{1}{8}\cdot\rho_{air,hub}\cdot d_{rotor}^{2}
\cdot\pi\cdot v_{wind}^{3}\cdot cp\left(v_{wind}\right)

with:
v: wind speed [m/s], d: diameter [m], \rho: density [kg/m³]

ToDo: Check the equation and add references.

References

[21]Gasch R., Twele J.: “Windkraftanlagen”. 6. Auflage, Wiesbaden, Vieweg + Teubner, 2010, pages 35ff, 208

See also

get_normalized_wind_pp_time_series()

v_wind_hub(weather)[source]

Calculates the wind speed in m/s at hub height.

Parameters:
  • data (DataFrame or Dictionary) – Containing columns or keys with the timeseries for wind speed (v_wind) and roughness length (z0).
  • data_height (DataFrame or Dictionary) – Containing columns or keys with the height of the measurement or model data for temperature (temp_air) and pressure (pressure).
  • h_hub (float) – Height of the hub of the wind turbine
Returns:

wind speed [m/s] at hub height

Return type:

float

Notes

The following equation is used for the logarithmic wind profile [20]:

v_{wind,hub}=v_{wind,data}\cdot\frac{\ln\left(\frac{h_{hub}}
{z_{0}}\right)}{\ln\left(\frac{h_{data}}{z_{0}}\right)}

with:
v: wind speed [m/s], h: height [m], z0: roughnes length [m]

h_{data} is the hight in which the wind velocity is measured. (height in m, velocity in m/s)

ToDo: Check the equation and add references.

References

[20]Gasch R., Twele J.: “Windkraftanlagen”. 6. Auflage, Wiesbaden, Vieweg + Teubner, 2010, page 129

See also

rho_hub()

feedinlib.powerplants module

@author: oemof developing group

Classes in this module correspond to specific types of powerplants.

Powerplant objects act as data holders for the attributes making up a powerplants specification. These objects should only contain little logic. Computing the actual feedin provided by a powerplant is done using it’s model attribute.`

class feedinlib.powerplants.Base(**attributes)[source]

Bases: abc.ABC

The base class of feedinlib powerplants.

The most prominent shared functionality between powerplants is the fact that they instantiate their model class uppon construction, in order to get a unique model instance for each powerplant instance.

Parameters:
  • model (A model class or an instance of one) –

    If a class (or in general, any instance of type) is provided, it is used to create the model instance encapsulating the actual mathematical model used to calculate the feedin provided by this powerplant.

    In any other case, the provided object is used directly. Note though, that a reference to this powerplant is saved in the provided object, so sharing model instances between two powerplant objects is not a good idea, as the second powerplant will overwrite the reference the reference to the first.

    The non-class version is only provided for users who need the extra flexibility of controlling model instantiation and who know what they are doing. In general, you’ll want to provide a class for this parameter or just go with the default for the specific subclass you are using.

  • **attributes

    The remaining attributes providing the technical specification of the powerplant. They will be added as regular attributes to this object, with keys as attribute names and initialized to the corresponding values.

    An error is raised if the attributes required by the given model are not contained in this hash.

Raises:

AttributeError – in case the attribute listed in the given model’s required attribute are not present in the attributes parameter.

See also

feedinlib.models
for and explanation of the model needed to actually calculate the feedin.
feedin(**kwargs)[source]

Calculates the amount of energy fed in by this powerplant into the energy system.

This method delegates the actual computation to the feedin() method of this objects model while giving you the opportunity to override some of the inputs used to calculate the feedin.

Parameters:**kwargs – Keyword arguments. If not specified, all the paramters needed to calculate the feedin are taken from this object. If any keyword argument is present whose key matches one of the parameters needed to calculate the feedin, it takes precedence over a matching attribute of this object.
Returns:feedin – The feedin provided by this poweplant as a time series represented by a pandas.DataFrame.
Return type:Pandas dataframe
class feedinlib.powerplants.Photovoltaic(model=<class 'feedinlib.models.PvlibBased'>, **attributes)[source]

Bases: feedinlib.powerplants.Base

Photovoltaic objects correspond to powerplants using solar power to generate electricity.

Parameters:
feedin(**kwargs)[source]
class feedinlib.powerplants.WindPowerPlant(model=<class 'feedinlib.models.SimpleWindTurbine'>, **attributes)[source]

Bases: feedinlib.powerplants.Base

WindPowerPlant objects correspond to powerplants using wind power to generate electricity.

Parameters:

See also

feedinlib.models
for and explanation of the model needed to actually calculate the feedin.
feedin(**kwargs)[source]

feedinlib.weather

Created on Fri Oct 9 16:01:02 2015

@author: uwe

class feedinlib.weather.FeedinWeather(**kwargs)[source]

Bases: object

Class, containing all meta informations regarding the weather data set.

Parameters:
  • data (pandas.DataFrame, optional) – Containing the time series of the different parameters as columns
  • timezone (string, optional) – Containing the name of the time zone using the naming of the IANA (Internet Assigned Numbers Authority) time zone database [40]
  • longitude (float, optional) – Longitude of the location of the weather data
  • latitude (float, optional) – Latitude of the location of the weather data
  • geometry (shapely.geometry object) – polygon or point representing the zone of the weather data
  • data_height (dictionary, optional) – Containing the heights of the weather measurements or weather model in meters with the keys of the data parameter
  • name (string) – Name of the weather data object

Notes

Depending on the used feedin modell some of the optional parameters might be mandatory.

References

[40]IANA time zone database.
read_feedinlib_csv(filename, overwrite=True)[source]

Reading a csv-file with a header containg the meta data of the time series.

The header has to contain the time zone and has to end with a blank line. To add data of the data_height dictionary there should be space between the parameter name and the key name (e.g. # data_height v_wind: 10). Further more any number of parameters can be added.

The file should have the following form:

# timezone=
# name: NAME
# longitude: xx.xxx
# latitude: yy.yyy
# timezone: Continent/City
# data_height temp_air: zz
# data_height v_wind: vv

,temp_air,v_wind,.....
2010-01-01 00:00:00+01:00,267.599,5.32697,...
2010-01-01 01:00:00+01:00,267.596,5.46199,....
....
Parameters:
  • filename (string) – The filename with the full path and the suffix of the file.
  • overwrite (boolean) – If False the only class attributes of NoneType will be overwritten with the data of the csv file. If True all class attributes will be overwriten with the data of the csv-file.
Raises:

FileNotFoundError – If the file defined by filename can not be found.

Module contents