edisgo.edisgo
¶
Module Contents¶
Functions¶
|
Restores EDisGo object from pickle file. |
|
Sets up EDisGo object from csv files. |
- class edisgo.edisgo.EDisGo(**kwargs)[source]¶
Provides the top-level API for invocation of data import, power flow analysis, network reinforcement, flexibility measures, etc..
- Parameters
ding0_grid (
str
) – Path to directory containing csv files of network to be loaded.generator_scenario (None or
str
, optional) – If None, the generator park of the imported grid is kept as is. Otherwise defines which scenario of future generator park to use and invokes grid integration of these generators. Possible options are ‘nep2035’ and ‘ego100’. These are scenarios from the research project open_eGo (see final report for more information on the scenarios). Seeimport_generators
for further information on how generators are integrated and what further options there are. Default: None.timeindex (None or pandas.DatetimeIndex, optional) – Defines the time steps feed-in and demand time series of all generators, loads and storage units need to be set. The time index is for example used as default for time steps considered in the power flow analysis and when checking the integrity of the network. Providing a time index is only optional in case a worst case analysis is set up using
set_time_series_worst_case_analysis()
. In all other cases a time index needs to be set manually.config_path (None or str or dict) –
Path to the config directory. Options are:
- ’default’ (default)
If config_path is set to ‘default’, the provided default config files are used directly.
- str
If config_path is a string, configs will be loaded from the directory specified by config_path. If the directory does not exist, it is created. If config files don’t exist, the default config files are copied into the directory.
- dict
A dictionary can be used to specify different paths to the different config files. The dictionary must have the following keys:
’config_db_tables’
’config_grid’
’config_grid_expansion’
’config_timeseries’
Values of the dictionary are paths to the corresponding config file. In contrast to the other options, the directories and config files must exist and are not automatically created.
- None
If config_path is None, configs are loaded from the edisgo default config directory ($HOME$/.edisgo). If the directory does not exist, it is created. If config files don’t exist, the default config files are copied into the directory.
Default: “default”.
- topology¶
The topology is a container object holding the topology of the grids including buses, lines, transformers, switches and components connected to the grid including generators, loads and storage units.
- Type
- timeseries¶
Container for active and reactive power time series of generators, loads and storage units.
- Type
- results¶
This is a container holding all calculation results from power flow analyses and grid reinforcement.
- Type
- electromobility¶
This class holds data on charging processes (how long cars are parking at a charging station, how much they need to charge, etc.) necessary to apply different charging strategies, as well as information on potential charging sites and integrated charging parks.
- Type
- heat_pump¶
This is a container holding heat pump data such as COP, heat demand to be served and heat storage information.
- Type
- property config¶
eDisGo configuration data.
- import_ding0_grid(path)[source]¶
Import ding0 topology data from csv files in the format as Ding0 provides it.
- Parameters
path (str) – Path to directory containing csv files of network to be loaded.
- set_timeindex(timeindex)[source]¶
Sets
timeindex
all time-dependent attributes are indexed by.The time index is for example used as default for time steps considered in the power flow analysis and when checking the integrity of the network.
- Parameters
timeindex (pandas.DatetimeIndex) – Time index to set.
- set_time_series_manual(generators_p=None, loads_p=None, storage_units_p=None, generators_q=None, loads_q=None, storage_units_q=None)[source]¶
Sets given component time series.
If time series for a component were already set before, they are overwritten.
- Parameters
generators_p (pandas.DataFrame) – Active power time series in MW of generators. Index of the data frame is a datetime index. Columns contain generators names of generators to set time series for. Default: None.
loads_p (pandas.DataFrame) – Active power time series in MW of loads. Index of the data frame is a datetime index. Columns contain load names of loads to set time series for. Default: None.
storage_units_p (pandas.DataFrame) – Active power time series in MW of storage units. Index of the data frame is a datetime index. Columns contain storage unit names of storage units to set time series for. Default: None.
generators_q (pandas.DataFrame) – Reactive power time series in MVA of generators. Index of the data frame is a datetime index. Columns contain generators names of generators to set time series for. Default: None.
loads_q (pandas.DataFrame) – Reactive power time series in MVA of loads. Index of the data frame is a datetime index. Columns contain load names of loads to set time series for. Default: None.
storage_units_q (pandas.DataFrame) – Reactive power time series in MVA of storage units. Index of the data frame is a datetime index. Columns contain storage unit names of storage units to set time series for. Default: None.
Notes
This function raises a warning in case a time index was not previously set. You can set the time index upon initialisation of the EDisGo object by providing the input parameter ‘timeindex’ or using the function
set_timeindex
. Also make sure that the time steps for which time series are provided include the set time index.
- set_time_series_worst_case_analysis(cases=None, generators_names=None, loads_names=None, storage_units_names=None)[source]¶
Sets demand and feed-in of all loads, generators and storage units for the specified worst cases.
See
set_worst_case()
for more information.- Parameters
cases (str or list(str)) – List with worst-cases to generate time series for. Can be ‘feed-in_case’, ‘load_case’ or both. Defaults to None in which case both ‘feed-in_case’ and ‘load_case’ are set up.
generators_names (list(str)) – Defines for which generators to set worst case time series. If None, time series are set for all generators. Default: None.
loads_names (list(str)) – Defines for which loads to set worst case time series. If None, time series are set for all loads. Default: None.
storage_units_names (list(str)) – Defines for which storage units to set worst case time series. If None, time series are set for all storage units. Default: None.
- set_time_series_active_power_predefined(fluctuating_generators_ts=None, fluctuating_generators_names=None, dispatchable_generators_ts=None, dispatchable_generators_names=None, conventional_loads_ts=None, conventional_loads_names=None, charging_points_ts=None, charging_points_names=None)[source]¶
Uses predefined feed-in or demand profiles.
Predefined profiles comprise i.e. standard electric conventional load profiles for different sectors generated using the oemof demandlib or feed-in time series of fluctuating solar and wind generators provided on the OpenEnergy DataBase for the weather year 2011.
This function can also be used to provide your own profiles per technology or load sector.
- Parameters
fluctuating_generators_ts (str or pandas.DataFrame) – Defines which technology-specific (or technology and weather cell specific) time series to use to set active power time series of fluctuating generators. See parameter ts_generators in
predefined_fluctuating_generators_by_technology()
for more information. If None, no time series of fluctuating generators are set. Default: None.fluctuating_generators_names (list(str)) – Defines for which fluctuating generators to apply technology-specific time series. See parameter generator_names in
predefined_dispatchable_generators_by_technology()
for more information. Default: None.dispatchable_generators_ts (pandas.DataFrame) – Defines which technology-specific time series to use to set active power time series of dispatchable generators. See parameter ts_generators in
predefined_dispatchable_generators_by_technology()
for more information. If None, no time series of dispatchable generators are set. Default: None.dispatchable_generators_names (list(str)) – Defines for which dispatchable generators to apply technology-specific time series. See parameter generator_names in
predefined_dispatchable_generators_by_technology()
for more information. Default: None.conventional_loads_ts (pandas.DataFrame) – Defines which sector-specific time series to use to set active power time series of conventional loads. See parameter ts_loads in
predefined_conventional_loads_by_sector()
for more information. If None, no time series of conventional loads are set. Default: None.conventional_loads_names (list(str)) – Defines for which conventional loads to apply technology-specific time series. See parameter load_names in
predefined_conventional_loads_by_sector()
for more information. Default: None.charging_points_ts (pandas.DataFrame) – Defines which use-case-specific time series to use to set active power time series of charging points. See parameter ts_loads in
predefined_charging_points_by_use_case()
for more information. If None, no time series of charging points are set. Default: None.charging_points_names (list(str)) – Defines for which charging points to apply use-case-specific time series. See parameter load_names in
predefined_charging_points_by_use_case()
for more information. Default: None.
Notes
This function raises a warning in case a time index was not previously set. You can set the time index upon initialisation of the EDisGo object by providing the input parameter ‘timeindex’ or using the function
set_timeindex
. Also make sure that the time steps for which time series are provided include the set time index.
- set_time_series_reactive_power_control(control='fixed_cosphi', generators_parametrisation='default', loads_parametrisation='default', storage_units_parametrisation='default')[source]¶
Set reactive power time series of components.
- Parameters
control (str) – Type of reactive power control to apply. Currently the only option is ‘fixed_coshpi’. See
fixed_cosphi()
for further information.generators_parametrisation (str or pandas.DataFrame) – See parameter generators_parametrisation in
fixed_cosphi()
for further information. Here, per default, the option ‘default’ is used.loads_parametrisation (str or pandas.DataFrame) – See parameter loads_parametrisation in
fixed_cosphi()
for further information. Here, per default, the option ‘default’ is used.storage_units_parametrisation (str or pandas.DataFrame) – See parameter storage_units_parametrisation in
fixed_cosphi()
for further information. Here, per default, the option ‘default’ is used.
Notes
Be careful to set parametrisation of other component types to None if you only want to set reactive power of certain components. See example below for further information.
Examples
To only set reactive power time series of one generator using default configurations you can do the following:
>>> self.set_time_series_reactive_power_control( >>> generators_parametrisation=pd.DataFrame( >>> { >>> "components": [["Generator_1"]], >>> "mode": ["default"], >>> "power_factor": ["default"], >>> }, >>> index=[1], >>> ), >>> loads_parametrisation=None, >>> storage_units_parametrisation=None >>> )
In the example above, loads_parametrisation and storage_units_parametrisation need to be set to None, otherwise already existing time series would be overwritten.
To only change configuration of one load and for all other components use default configurations you can do the following:
>>> self.set_time_series_reactive_power_control( >>> loads_parametrisation=pd.DataFrame( >>> { >>> "components": [["Load_1"], >>> self.topology.loads_df.index.drop(["Load_1"])], >>> "mode": ["capacitive", "default"], >>> "power_factor": [0.98, "default"], >>> }, >>> index=[1, 2], >>> ) >>> )
In the example above, generators_parametrisation and storage_units_parametrisation do not need to be set as default configurations are per default used for all generators and storage units anyways.
- to_pypsa(mode=None, timesteps=None, check_edisgo_integrity=False, **kwargs)[source]¶
Convert grid to PyPSA.Network representation.
You can choose between translation of the MV and all underlying LV grids (mode=None (default)), the MV network only (mode=’mv’ or mode=’mvlv’) or a single LV network (mode=’lv’).
- Parameters
mode (str) –
Determines network levels that are translated to PyPSA.Network. Possible options are:
None
MV and underlying LV networks are exported. This is the default.
’mv’
Only MV network is exported. MV/LV transformers are not exported in this mode. Loads, generators and storage units in underlying LV grids are connected to the respective MV/LV station’s primary side. Per default, they are all connected separately, but you can also choose to aggregate them. See parameters aggregate_loads, aggregate_generators and aggregate_storages for more information.
’mvlv’
This mode works similar as mode ‘mv’, with the difference that MV/LV transformers are as well exported and LV components connected to the respective MV/LV station’s secondary side. Per default, all components are connected separately, but you can also choose to aggregate them. See parameters aggregate_loads, aggregate_generators and aggregate_storages for more information.
’lv’
Single LV network topology including the MV/LV transformer is exported. The LV grid to export is specified through the parameter lv_grid_id. The slack is positioned at the secondary side of the MV/LV station.
timesteps (pandas.DatetimeIndex or pandas.Timestamp) – Specifies which time steps to export to pypsa representation to e.g. later on use in power flow analysis. It defaults to None in which case all time steps in
timeindex
are used. Default: None.check_edisgo_integrity (bool) – Check integrity of edisgo object before translating to pypsa. This option is meant to help the identification of possible sources of errors if the power flow calculations fail. See
check_integrity
for more information.use_seed (bool) – Use a seed for the initial guess for the Newton-Raphson algorithm. Only available when MV level is included in the power flow analysis. If True, uses voltage magnitude results of previous power flow analyses as initial guess in case of PQ buses. PV buses currently do not occur and are therefore currently not supported. Default: False.
lv_grid_id (int or str) – ID (e.g. 1) or name (string representation, e.g. “LVGrid_1”) of LV grid to export in case mode is ‘lv’.
aggregate_loads (str) – Mode for load aggregation in LV grids in case mode is ‘mv’ or ‘mvlv’. Can be ‘sectoral’ aggregating the loads sector-wise, ‘all’ aggregating all loads into one or None, not aggregating loads but appending them to the station one by one. Default: None.
aggregate_generators (str) – Mode for generator aggregation in LV grids in case mode is ‘mv’ or ‘mvlv’. Can be ‘type’ aggregating generators per generator type, ‘curtailable’ aggregating ‘solar’ and ‘wind’ generators into one and all other generators into another one, or None, where no aggregation is undertaken and generators are added to the station one by one. Default: None.
aggregate_storages (str) – Mode for storage unit aggregation in LV grids in case mode is ‘mv’ or ‘mvlv’. Can be ‘all’ where all storage units in an LV grid are aggregated to one storage unit or None, in which case no aggregation is conducted and storage units are added to the station. Default: None.
- Returns
PyPSA.Network representation.
- Return type
- to_graph()[source]¶
Returns networkx graph representation of the grid.
- Returns
Graph representation of the grid as networkx Ordered Graph, where lines are represented by edges in the graph, and buses and transformers are represented by nodes.
- Return type
- import_generators(generator_scenario=None, **kwargs)[source]¶
Gets generator park for specified scenario and integrates them into the grid.
Currently, the only supported data source is scenario data generated in the research project open_eGo. You can choose between two scenarios: ‘nep2035’ and ‘ego100’. You can get more information on the scenarios in the final report.
The generator data is retrieved from the open energy platform from tables for conventional power plants and renewable power plants.
When the generator data is retrieved, the following steps are conducted:
Step 1: Update capacity of existing generators if ` update_existing` is True, which it is by default.
Step 2: Remove decommissioned generators if remove_decommissioned is True, which it is by default.
Step 3: Integrate new MV generators.
Step 4: Integrate new LV generators.
For more information on how generators are integrated, see
connect_to_mv
andconnect_to_lv
.After the generator park is changed there may be grid issues due to the additional in-feed. These are not solved automatically. If you want to have a stable grid without grid issues you can invoke the automatic grid expansion through the function
reinforce
.- Parameters
generator_scenario (str) – Scenario for which to retrieve generator data. Possible options are ‘nep2035’ and ‘ego100’.
kwargs – See
edisgo.io.generators_import.oedb()
.
- analyze(mode: str | None = None, timesteps: pd.Timestamp | pd.DatetimeIndex | None = None, raise_not_converged: bool = True, troubleshooting_mode: str | None = None, range_start: numbers.Number = 0.1, range_num: int = 10, **kwargs)[source]¶
Conducts a static, non-linear power flow analysis.
Conducts a static, non-linear power flow analysis using PyPSA and writes results (active, reactive and apparent power as well as current on lines and voltages at buses) to
Results
(e.g.v_res
for voltages).- Parameters
mode (str or None) –
Allows to toggle between power flow analysis for the whole network or just the MV or one LV grid. Possible options are:
None (default)
Power flow analysis is conducted for the whole network including MV grid and underlying LV grids.
’mv’
Power flow analysis is conducted for the MV level only. LV loads, generators and storage units are aggregated at the respective MV/LV stations’ primary side. Per default, they are all connected separately, but you can also choose to aggregate them. See parameters aggregate_loads, aggregate_generators and aggregate_storages in
to_pypsa
for more information.’mvlv’
Power flow analysis is conducted for the MV level only. In contrast to mode ‘mv’ LV loads, generators and storage units are in this case aggregated at the respective MV/LV stations’ secondary side. Per default, they are all connected separately, but you can also choose to aggregate them. See parameters aggregate_loads, aggregate_generators and aggregate_storages in
to_pypsa
for more information.’lv’
Power flow analysis is conducted for one LV grid only. ID or name of the LV grid to conduct power flow analysis for needs to be provided through keyword argument ‘lv_grid_id’ as integer or string. See parameter lv_grid_id in
to_pypsa
for more information. The slack is positioned at the secondary side of the MV/LV station.
timesteps (pandas.DatetimeIndex or pandas.Timestamp) – Timesteps specifies for which time steps to conduct the power flow analysis. It defaults to None in which case all time steps in
timeindex
are used.raise_not_converged (bool) – If True, an error is raised in case power flow analysis did not converge for all time steps. Default: True.
troubleshooting_mode (str or None) –
Two optional troubleshooting methods in case of nonconvergence of nonlinear power flow (cf. [1])
- None (default)
Power flow analysis is conducted using nonlinear power flow method.
- ’lpf’
Non-linear power flow initial guess is seeded with the voltage angles from the linear power flow.
- ’iteration’
Power flow analysis is conducted by reducing all power values of generators and loads to a fraction, e.g. 10%, solving the load flow and using it as a seed for the power at 20%, iteratively up to 100%.
range_start (float, optional) – Specifies the minimum fraction that power values are set to when using troubleshooting_mode ‘iteration’. Must be between 0 and 1. Default: 0.1.
range_num (int, optional) – Specifies the number of fraction samples to generate when using troubleshooting_mode ‘iteration’. Must be non-negative. Default: 10.
kwargs (dict) – Possible other parameters comprise all other parameters that can be set in
edisgo.io.pypsa_io.to_pypsa()
.
- Returns
Returns the time steps for which power flow analysis did not converge.
- Return type
References
[1] https://pypsa.readthedocs.io/en/latest/troubleshooting.html
- reinforce(timesteps_pfa: str | pd.DatetimeIndex | pd.Timestamp | None = None, copy_grid: bool = False, max_while_iterations: int = 20, combined_analysis: bool = False, mode: str | None = None, without_generator_import: bool = False, **kwargs) edisgo.network.results.Results [source]¶
Reinforces the network and calculates network expansion costs.
If the
edisgo.network.timeseries.TimeSeries.is_worst_case
is True input for timesteps_pfa and mode are overwritten and therefore ignored.See
edisgo.flex_opt.reinforce_grid.reinforce_grid()
for more information on input parameters and methodology.- Parameters
is_worst_case (bool) – Is used to overwrite the return value from
edisgo.network.timeseries.TimeSeries.is_worst_case
. If True reinforcement is calculated for worst-case MV and LV cases separately.
- perform_mp_opf(timesteps, storage_series=None, **kwargs)[source]¶
Run optimal power flow with julia.
- add_component(comp_type, ts_active_power=None, ts_reactive_power=None, **kwargs)[source]¶
Adds single component to network.
Components can be lines or buses as well as generators, loads, or storage units. If add_ts is set to True, time series of elements are set as well. Currently, time series need to be provided.
- Parameters
comp_type (str) – Type of added component. Can be ‘bus’, ‘line’, ‘load’, ‘generator’, or ‘storage_unit’.
ts_active_power (pandas.Series or None) – Active power time series of added component. Index of the series must contain all time steps in
timeindex
. Values are active power per time step in MW. Defaults to None in which case no time series is set.ts_reactive_power (pandas.Series or str or None) –
Possible options are:
-
Reactive power time series of added component. Index of the series must contain all time steps in
timeindex
. Values are reactive power per time step in MVA. ”default”
Reactive power time series is determined based on assumptions on fixed power factor of the component. To this end, the power factors set in the config section reactive_power_factor and the power factor mode, defining whether components behave inductive or capacitive, given in the config section reactive_power_mode, are used. This option requires you to provide an active power time series. In case it was not provided, reactive power cannot be set and a warning is raised.
None
No reactive power time series is set.
Default: None
-
**kwargs (dict) –
Attributes of added component. See respective functions for required entries.
’bus’ :
add_bus
’line’ :
add_line
’load’ :
add_load
’generator’ :
add_generator
’storage_unit’ :
add_storage_unit
- integrate_component_based_on_geolocation(comp_type, geolocation, voltage_level=None, add_ts=True, ts_active_power=None, ts_reactive_power=None, **kwargs)[source]¶
Adds single component to topology based on geolocation.
Currently components can be generators, charging points and heat pumps.
See
connect_to_mv
andconnect_to_lv
for more information.- Parameters
comp_type (str) – Type of added component. Can be ‘generator’, ‘charging_point’ or ‘heat_pump’.
geolocation (shapely.Point or tuple) – Geolocation of the new component. In case of tuple, the geolocation must be given in the form (longitude, latitude).
voltage_level (int, optional) –
Specifies the voltage level the new component is integrated in. Possible options are 4 (MV busbar), 5 (MV grid), 6 (LV busbar) or 7 (LV grid). If no voltage level is provided the voltage level is determined based on the nominal power p_nom or p_set (given as kwarg) as follows:
voltage level 4 (MV busbar): nominal power between 4.5 MW and 17.5 MW
voltage level 5 (MV grid) : nominal power between 0.3 MW and 4.5 MW
voltage level 6 (LV busbar): nominal power between 0.1 MW and 0.3 MW
voltage level 7 (LV grid): nominal power below 0.1 MW
add_ts (bool, optional) – Indicator if time series for component are added as well. Default: True.
ts_active_power (pandas.Series, optional) – Active power time series of added component. Index of the series must contain all time steps in
timeindex
. Values are active power per time step in MW. If you want to add time series (if add_ts is True), you must provide a time series. It is not automatically retrieved.ts_reactive_power (pandas.Series, optional) – Reactive power time series of added component. Index of the series must contain all time steps in
timeindex
. Values are reactive power per time step in MVA. If you want to add time series (if add_ts is True), you must provide a time series. It is not automatically retrieved.kwargs – Attributes of added component. See
add_generator
respectivelyadd_load
methods for more information on required and optional parameters of generators respectively charging points and heat pumps.
- remove_component(comp_type, comp_name, drop_ts=True)[source]¶
Removes single component from network.
Components can be lines or buses as well as generators, loads, or storage units. If drop_ts is set to True, time series of elements are deleted as well.
- aggregate_components(aggregate_generators_by_cols=None, aggregate_loads_by_cols=None)[source]¶
Aggregates generators and loads at the same bus.
By default all generators respectively loads at the same bus are aggregated. You can specify further columns to consider in the aggregation, such as the generator type or the load sector. Make sure to always include the bus in the list of columns to aggregate by, as otherwise the topology would change.
Be aware that by aggregating components you loose some information e.g. on load sector or charging point use case.
- Parameters
aggregate_generators_by_cols (list(str) or None) – List of columns to aggregate generators at the same bus by. Valid columns are all columns in
generators_df
. If an empty list is given, generators are not aggregated. Defaults to None, in which case all generators at the same bus are aggregated.aggregate_loads_by_cols (list(str)) – List of columns to aggregate loads at the same bus by. Valid columns are all columns in
loads_df
. If an empty list is given, generators are not aggregated. Defaults to None, in which case all loads at the same bus are aggregated.
- import_electromobility(simbev_directory: PurePath | str, tracbev_directory: PurePath | str, import_electromobility_data_kwds=None, allocate_charging_demand_kwds=None)[source]¶
Imports electromobility data and integrates charging points into grid.
So far, this function requires electromobility data from SimBEV (required version: 3083c5a) and TracBEV (required version: 14d864c) to be stored in the directories specified through the parameters simbev_directory and tracbev_directory. SimBEV provides data on standing times, charging demand, etc. per vehicle, whereas TracBEV provides potential charging point locations.
After electromobility data is loaded, the charging demand from SimBEV is allocated to potential charging points from TracBEV. Afterwards, all potential charging points with charging demand allocated to them are integrated into the grid.
Be aware that this function does not yield charging time series per charging point but only charging processes (see
charging_processes_df
for more information). The actual charging time series are determined through applying a charging strategy using the functioncharging_strategy
.- Parameters
simbev_directory (str) – SimBEV directory holding SimBEV data.
tracbev_directory (str) – TracBEV directory holding TracBEV data.
import_electromobility_data_kwds (dict) –
These may contain any further attributes you want to specify when calling the function to import electromobility data from SimBEV and TracBEV using
import_electromobility()
.- gc_to_car_rate_homefloat
Specifies the minimum rate between potential charging parks points for the use case “home” and the total number of cars. Default 0.5.
- gc_to_car_rate_workfloat
Specifies the minimum rate between potential charging parks points for the use case “work” and the total number of cars. Default 0.25.
- gc_to_car_rate_publicfloat
Specifies the minimum rate between potential charging parks points for the use case “public” and the total number of cars. Default 0.1.
- gc_to_car_rate_hpcfloat
Specifies the minimum rate between potential charging parks points for the use case “hpc” and the total number of cars. Default 0.005.
- mode_parking_timesstr
If the mode_parking_times is set to “frugal” only parking times with any charging demand are imported. Any other input will lead to all parking and driving events being imported. Default “frugal”.
- charging_processes_dirstr
Charging processes sub-directory. Default None.
- simbev_config_filestr
Name of the simbev config file. Default “metadata_simbev_run.json”.
allocate_charging_demand_kwds –
These may contain any further attributes you want to specify when calling the function that allocates charging processes from SimBEV to potential charging points from TracBEV using
distribute_charging_demand()
.- modestr
Distribution mode. If the mode is set to “user_friendly” only the simbev weights are used for the distribution. If the mode is “grid_friendly” also grid conditions are respected. Default “user_friendly”.
- generators_weight_factorfloat
Weighting factor of the generators weight within an LV grid in comparison to the loads weight. Default 0.5.
- distance_weightfloat
Weighting factor for the distance between a potential charging park and its nearest substation in comparison to the combination of the generators and load factors of the LV grids. Default 1 / 3.
- user_friendly_weightfloat
Weighting factor of the user friendly weight in comparison to the grid friendly weight. Default 0.5.
- apply_charging_strategy(strategy='dumb', **kwargs)[source]¶
Applies charging strategy to set EV charging time series at charging parks.
This function requires that standing times, charging demand, etc. at charging parks were previously set using
import_electromobility
.It is assumed that only ‘private’ charging processes at ‘home’ or at ‘work’ can be flexibilized. ‘public’ charging processes will always be ‘dumb’.
The charging time series at each charging parks are written to
loads_active_power
. Reactive power inloads_reactive_power
is set to 0 Mvar.- Parameters
strategy (str) –
Defines the charging strategy to apply. The following charging strategies are valid:
’dumb’
The cars are charged directly after arrival with the maximum possible charging capacity.
’reduced’
The cars are charged directly after arrival with the minimum possible charging power. The minimum possible charging power is determined by the parking time and the parameter minimum_charging_capacity_factor.
’residual’
The cars are charged when the residual load in the MV grid is lowest (high generation and low consumption). Charging processes with a low flexibility are given priority.
Default: ‘dumb’.
timestamp_share_threshold (float) – Percental threshold of the time required at a time step for charging the vehicle. If the time requirement is below this limit, then the charging process is not mapped into the time series. If, however, it is above this limit, the time step is mapped to 100% into the time series. This prevents differences between the charging strategies and creates a compromise between the simultaneity of charging processes and an artificial increase in the charging demand. Default: 0.2.
minimum_charging_capacity_factor (float) – Technical minimum charging power of charging points in p.u. used in case of charging strategy ‘reduced’. E.g. for a charging point with a nominal capacity of 22 kW and a minimum_charging_capacity_factor of 0.1 this would result in a minimum charging power of 2.2 kW. Default: 0.1.
Notes
If the frequency of time series data in
TimeSeries
(checked usingtimeindex
) differs from the frequency of SimBEV data, then the time series inTimeSeries
is first automatically resampled to match the SimBEV data frequency and after determining the charging demand time series resampled back to the original frequency.
- abstract import_heat_pumps(scenario=None, **kwargs)[source]¶
Gets heat pump capacities for specified scenario from oedb and integrates them into the grid.
Besides heat pump capacity the heat pump’s COP and heat demand to be served are as well retrieved.
Currently, the only supported data source is scenario data generated in the research project eGo^n. You can choose between two scenarios: ‘eGon2035’ and ‘eGon100RE’.
The data is retrieved from the open energy platform.
# ToDo Add information on scenarios and from which tables data is retrieved.
The following steps are conducted in this function:
Spatially disaggregated data on heat pump capacities in individual and district heating are obtained from the database for the specified scenario.
Heat pumps are integrated into the grid (added to
loads_df
).Grid connection points of heat pumps for individual heating are determined based on the corresponding building ID.
Grid connection points of heat pumps for district heating are determined based on their geolocation and installed capacity. See
connect_to_mv
andconnect_to_lv
for more information.
COP and heat demand for each heat pump are retrieved from the database and stored in the
HeatPump
class that can be accessed throughheat_pump
.
Be aware that this function does not yield electricity load time series for the heat pumps. The actual time series are determined through applying an operation strategy or optimising heat pump dispatch.
After the heat pumps are integrated there may be grid issues due to the additional load. These are not solved automatically. If you want to have a stable grid without grid issues you can invoke the automatic grid expansion through the function
reinforce
.- Parameters
scenario (str) – Scenario for which to retrieve heat pump data. Possible options are ‘eGon2035’ and ‘eGon100RE’.
kwargs – See
edisgo.io.heat_pump_import.oedb()
.
- apply_heat_pump_operating_strategy(strategy='uncontrolled', heat_pump_names=None, **kwargs)[source]¶
Applies operating strategy to set electrical load time series of heat pumps.
This function requires that COP and heat demand time series, and depending on the operating strategy also information on thermal storage units, were previously set in
heat_pump
. COP and heat demand information is automatically set when usingimport_heat_pumps
. When not using this function it can be manually set usingset_cop
andset_heat_demand
.The electrical load time series of each heat pump are written to
loads_active_power
. Reactive power inloads_reactive_power
is set to 0 Mvar.- Parameters
strategy (str) –
Defines the operating strategy to apply. The following strategies are valid:
’uncontrolled’
The heat demand is directly served by the heat pump without buffering heat using a thermal storage. The electrical load of the heat pump is determined as follows:
Default: ‘uncontrolled’.
heat_pump_names (list(str) or None) – Defines for which heat pumps to apply operating strategy. If None, all heat pumps for which COP information in
heat_pump
is given are used. Default: None.
- plot_mv_grid_topology(technologies=False, **kwargs)[source]¶
Plots plain MV network topology and optionally nodes by technology type (e.g. station or generator).
For more information see
edisgo.tools.plots.mv_grid_topology()
.- Parameters
technologies (bool) – If True plots stations, generators, etc. in the topology in different colors. If False does not plot any nodes. Default: False.
- plot_mv_voltages(**kwargs)[source]¶
Plots voltages in MV network on network topology plot.
For more information see
edisgo.tools.plots.mv_grid_topology()
.
- plot_mv_line_loading(**kwargs)[source]¶
Plots relative line loading (current from power flow analysis to allowed current) of MV lines.
For more information see
edisgo.tools.plots.mv_grid_topology()
.
- plot_mv_grid_expansion_costs(**kwargs)[source]¶
Plots grid expansion costs per MV line.
For more information see
edisgo.tools.plots.mv_grid_topology()
.
- plot_mv_storage_integration(**kwargs)[source]¶
Plots storage position in MV topology of integrated storage units.
For more information see
edisgo.tools.plots.mv_grid_topology()
.
- plot_mv_grid(**kwargs)[source]¶
General plotting function giving all options of function
edisgo.tools.plots.mv_grid_topology()
.
- histogram_voltage(timestep=None, title=True, **kwargs)[source]¶
Plots histogram of voltages.
For more information on the histogram plot and possible configurations see
edisgo.tools.plots.histogram()
.- Parameters
timestep (pandas.Timestamp or list(pandas.Timestamp) or None, optional) – Specifies time steps histogram is plotted for. If timestep is None all time steps voltages are calculated for are used. Default: None.
title (
str
orbool
, optional) – Title for plot. If True title is auto generated. If False plot has no title. Ifstr
, the provided title is used. Default: True.
- histogram_relative_line_load(timestep=None, title=True, voltage_level='mv_lv', **kwargs)[source]¶
Plots histogram of relative line loads.
For more information on how the relative line load is calculated see
edisgo.tools.tools.get_line_loading_from_network()
. For more information on the histogram plot and possible configurations seeedisgo.tools.plots.histogram()
.- Parameters
timestep (pandas.Timestamp or list(pandas.Timestamp) or None, optional) – Specifies time step(s) histogram is plotted for. If timestep is None all time steps currents are calculated for are used. Default: None.
title (
str
orbool
, optional) – Title for plot. If True title is auto generated. If False plot has no title. Ifstr
, the provided title is used. Default: True.voltage_level (
str
) – Specifies which voltage level to plot voltage histogram for. Possible options are ‘mv’, ‘lv’ and ‘mv_lv’. ‘mv_lv’ is also the fallback option in case of wrong input. Default: ‘mv_lv’
- save(directory, save_topology=True, save_timeseries=True, save_results=True, save_electromobility=False, save_heatpump=False, **kwargs)[source]¶
Saves EDisGo object to csv files.
It can be chosen what is included in the csv export (e.g. power flow results, electromobility flexibility, etc.). Further, in order to save disk storage space the data type of time series data can be reduced, e.g. to float32 and data can be archived, e.g. in a zip archive.
- Parameters
directory (str) – Main directory to save EDisGo object to.
save_topology (bool, optional) – Indicates whether to save
Topology
object. Per default it is saved to sub-directory ‘topology’. Seeto_csv
for more information. Default: True.save_timeseries (bool, optional) – Indicates whether to save
Timeseries
object. Per default it is saved to subdirectory ‘timeseries’. Through the keyword arguments reduce_memory and to_type it can be chosen if memory should be reduced. Seeto_csv
for more information. Default: True.save_results (bool, optional) – Indicates whether to save
Results
object. Per default it is saved to subdirectory ‘results’. Through the keyword argument parameters the results that should be stored can be specified. Further, through the keyword parameters reduce_memory and to_type it can be chosen if memory should be reduced. Seeto_csv
for more information. Default: True.save_electromobility (bool, optional) – Indicates whether to save
Electromobility
object. Per default it is not saved. If set to True, it is saved to subdirectory ‘electromobility’. Seeto_csv
for more information.save_heatpump (bool, optional) – Indicates whether to save
HeatPump
object. Per default it is not saved. If set to True, it is saved to subdirectory ‘heat_pump’. Seeto_csv
for more information.reduce_memory (bool, optional) – If True, size of dataframes containing time series in
Results
,TimeSeries
andHeatPump
is reduced. See respective classes reduce_memory functions for more information. Type to convert to can be specified by providing to_type as keyword argument. Further parameters of reduce_memory functions cannot be passed here. Call these functions directly to make use of further options. Default: False.to_type (str, optional) – Data type to convert time series data to. This is a trade-off between precision and memory. Default: “float32”.
parameters (None or dict) – Specifies which results to store. By default this is set to None, in which case all available results are stored. To only store certain results provide a dictionary. See function docstring parameters parameter in
to_csv()
for more information.electromobility_attributes (None or list(str)) – Specifies which electromobility attributes to store. By default this is set to None, in which case all attributes are stored. See function docstring attributes parameter in
to_csv
for more information.archive (bool, optional) – Save disk storage capacity by archiving the csv files. The archiving takes place after the generation of the CSVs and therefore temporarily the storage needs are higher. Default: False.
archive_type (str, optional) – Set archive type. Default: “zip”.
drop_unarchived (bool, optional) – Drop the unarchived data if parameter archive is set to True. Default: True.
- reduce_memory(**kwargs)[source]¶
Reduces size of dataframes containing time series to save memory.
Per default, float data is stored as float64. As this precision is barely needed, this function can be used to convert time series data to a data subtype with less memory usage, such as float32.
- Parameters
to_type (str, optional) – Data type to convert time series data to. This is a tradeoff between precision and memory. Default: “float32”.
results_attr_to_reduce (list(str), optional) – See attr_to_reduce parameter in
reduce_memory
for more information.timeseries_attr_to_reduce (list(str), optional) – See attr_to_reduce parameter in
reduce_memory
for more information.
- check_integrity()[source]¶
Method to check the integrity of the EDisGo object.
Checks for consistency of topology (see
edisgo.topology.check_integrity()
), timeseries (seeedisgo.timeseries.check_integrity()
) and the interplay of both.
- resample_timeseries(method: str = 'ffill', freq: str | pd.Timedelta = '15min')[source]¶
Resamples all generator, load and storage time series to a desired resolution.
The following time series are affected by this:
Both up- and down-sampling methods are possible.
- Parameters
method (str, optional) –
Method to choose from to fill missing values when resampling. Possible options are:
- ’ffill’
Propagate last valid observation forward to next valid observation. See pandas.DataFrame.ffill.
- ’bfill’
Use next valid observation to fill gap. See pandas.DataFrame.bfill.
- ’interpolate’
Fill NaN values using an interpolation method. See pandas.DataFrame.interpolate.
Default: ‘ffill’.
freq (str, optional) – Frequency that time series is resampled to. Offset aliases can be found here: https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases. Default: ‘15min’.
- edisgo.edisgo.import_edisgo_from_pickle(filename, path='')[source]¶
Restores EDisGo object from pickle file.
- edisgo.edisgo.import_edisgo_from_files(edisgo_path, import_topology=True, import_timeseries=False, import_results=False, import_electromobility=False, import_heat_pump=False, from_zip_archive=False, **kwargs)[source]¶
Sets up EDisGo object from csv files.
This is the reverse function of
save()
and if not specified differently assumes all data in the default sub-directories created in thesave()
function.- Parameters
edisgo_path (str) – Main directory to restore EDisGo object from. This directory must contain the config files. Further, if not specified differently, it is assumed to be the main directory containing sub-directories with e.g. topology data. In case from_zip_archive is set to True, edisgo_path is the name of the archive.
import_topology (bool) – Indicates whether to import
Topology
object. Per default it is set to True, in which case topology data is imported. The default directory topology data is imported from is the sub-directory ‘topology’. A different directory can be specified through keyword argument topology_directory. Default: True.import_timeseries (bool) – Indicates whether to import
Timeseries
object. Per default it is set to False, in which case timeseries data is not imported. The default directory time series data is imported from is the sub-directory ‘timeseries’. A different directory can be specified through keyword argument timeseries_directory. Default: False.import_results (bool) – Indicates whether to import
Results
object. Per default it is set to False, in which case results data is not imported. The default directory results data is imported from is the sub-directory ‘results’. A different directory can be specified through keyword argument results_directory. Default: False.import_electromobility (bool) – Indicates whether to import
Electromobility
object. Per default it is set to False, in which case electromobility data is not imported. The default directory electromobility data is imported from is the sub-directory ‘electromobility’. A different directory can be specified through keyword argument electromobility_directory. Default: False.import_heat_pump (bool) – Indicates whether to import
HeatPump
object. Per default it is set to False, in which case heat pump data containing information on COP, heat demand time series, etc. is not imported. The default directory heat pump data is imported from is the sub-directory ‘heat_pump’. A different directory can be specified through keyword argument heat_pump_directory. Default: False.from_zip_archive (bool) – Set to True if data needs to be imported from an archive, e.g. a zip archive. Default: False.
topology_directory (str) – Indicates directory
Topology
object is imported from. Per default topology data is imported from edisgo_path sub-directory ‘topology’.timeseries_directory (str) – Indicates directory
Timeseries
object is imported from. Per default time series data is imported from edisgo_path sub-directory ‘timeseries’.results_directory (str) – Indicates directory
Results
object is imported from. Per default results data is imported from edisgo_path sub-directory ‘results’.electromobility_directory (str) – Indicates directory
Electromobility
object is imported from. Per default electromobility data is imported from edisgo_path sub-directory ‘electromobility’.heat_pump_directory (str) – Indicates directory
HeatPump
object is imported from. Per default heat pump data is imported from edisgo_path sub-directory ‘heat_pump’.dtype (str) – Numerical data type for time series and results data to be imported, e.g. “float32”. Per default this is None in which case data type is inferred.
parameters (None or dict) – Specifies which results to restore. By default this is set to None, in which case all available results are restored. To only restore certain results provide a dictionary. See function docstring parameters parameter in
to_csv()
for more information.Results –
--------- –
:param
EDisGo
: Restored EDisGo object.