diff --git a/doc/features_in_detail.rst b/doc/features_in_detail.rst index f874dd35d..afff615be 100644 --- a/doc/features_in_detail.rst +++ b/doc/features_in_detail.rst @@ -271,21 +271,21 @@ The import and integration of electromobility data is implemented in :py:func:`~ Allocation of charging demand ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The allocation of charging processes to charging stations is implemented in +The allocation of charging processes to charging stations is implemented in :py:func:`~edisgo.io.electromobility_import.distribute_charging_demand`. -After electromobility data is loaded, the charging demand from SimBEV is allocated to potential charging parks -from TracBEV. The allocation of the charging processes to the charging infrastructure is carried out with the -help of the weighting factor of the potential charging parks determined by TracBEV. This involves a random and +After electromobility data is loaded, the charging demand from SimBEV is allocated to potential charging parks +from TracBEV. The allocation of the charging processes to the charging infrastructure is carried out with the +help of the weighting factor of the potential charging parks determined by TracBEV. This involves a random and weighted selection of one charging park per charging process. In the case of private charging infrastructure, a separate charging point is set up for each electric vehicle (EV). All charging processes of the respective EV and charging use case -are assigned to this charging point. The allocation of private charging processes to charging stations is +are assigned to this charging point. The allocation of private charging processes to charging stations is implemented in :py:func:`~edisgo.io.electromobility_import.distribute_private_charging_demand`. For public charging infrastructure, the allocation is made explicitly per charging process. For each charging -process it is determined whether a suitable charging point is already available. For this purpose it is checked +process it is determined whether a suitable charging point is already available. For this purpose it is checked whether the charging point is occupied by another EV in the corresponding period and whether it can provide the -corresponding charging capacity. If no suitable charging point is available, a charging point is determined -randomly and weighted in the same way as for private charging. The allocation of public charging processes to +corresponding charging capacity. If no suitable charging point is available, a charging point is determined +randomly and weighted in the same way as for private charging. The allocation of public charging processes to charging stations is implemented in :py:func:`~edisgo.io.electromobility_import.distribute_public_charging_demand`. .. _charging_strategies-label: @@ -293,13 +293,13 @@ charging stations is implemented in :py:func:`~edisgo.io.electromobility_import. Charging strategies ^^^^^^^^^^^^^^^^^^^^^^^^ -eDisGo right now provides three charging strategy methodologies called 'dumb', 'reduced' and 'residual', that -are implemented in :py:mod:`~edisgo.flex_opt.charging_strategies`. +eDisGo right now provides three charging strategy methodologies called 'dumb', 'reduced' and 'residual', that +are implemented in :py:mod:`~edisgo.flex_opt.charging_strategies`. The aim of the charging strategies 'reduced' and 'residual' is to generate the most grid-friendly charging behavior possible without -restricting the convenience for end users. Therefore, the boundary condition of all charging strategies is that -the charging requirement of each charging process must be fully covered. This means that charging processes can +restricting the convenience for end users. Therefore, the boundary condition of all charging strategies is that +the charging requirement of each charging process must be fully covered. This means that charging processes can only be flexibilised if the EV can be fully charged while it is stationary. Furthermore, only private -charging processes can be used as a flexibility, since the fulfillment of the service is the priority for public +charging processes can be used as a flexibility, since the fulfillment of the service is the priority for public charging processes. 'dumb' @@ -309,7 +309,7 @@ In this charging strategy the cars are charged directly after arrival with the m 'reduced' """""""""""""""""" This is a preventive charging strategy. 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 +charging power. The minimum possible charging power is determined by the parking time and the parameter minimum_charging_capacity_factor. 'residual' diff --git a/doc/usage_details.rst b/doc/usage_details.rst index efd90791f..42795d644 100644 --- a/doc/usage_details.rst +++ b/doc/usage_details.rst @@ -363,10 +363,10 @@ You can access these data as follows: # Access GeoDataFrame with all TracBEV potential charging parks edisgo.electromobility.potential_charging_parks_gdf - + # Access DataFrame with all charging parks that got integrated edisgo.electromobility.integrated_charging_parks_df - + The integrated charging points are also stored in the :class:`~.network.topology.Topology` object and can be accessed as follows: @@ -379,12 +379,12 @@ object and can be accessed as follows: So far, adding electromobility data to an eDisGo object requires electromobility data from `SimBEV `_ (required version: `3083c5a `_) +86076c936940365587c9fba98a5b774e13083c5a>`_) 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, +03e335655770a377166c05293a966052314d864c>`_) 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. .. todo:: Add information on how to retrieve SimBEV and TracBEV data @@ -413,21 +413,21 @@ the example jupyter notebook ) edisgo.set_time_series_reactive_power_control() - + # Resample edisgo timeseries to 15-minute resolution to match with SimBEV and # TracBEV data edisgo.resample_timeseries() - + # Import electromobility data edisgo.import_electromobility( simbev_directory=simbev_path, tracbev_directory=tracbev_path, ) - + # Apply charging strategy edisgo.apply_charging_strategy(strategy="dumb") -Further information on the electromobility integration methodology and the charging +Further information on the electromobility integration methodology and the charging strategies can be found in section :ref:`electromobility-integration-label`. diff --git a/examples/example_grid_reinforcement.py b/examples/example_grid_reinforcement.py index ef671f515..f944d07bf 100644 --- a/examples/example_grid_reinforcement.py +++ b/examples/example_grid_reinforcement.py @@ -44,7 +44,7 @@ def run_example(): setup_logger( loggers=[ {"name": "root", "file_level": None, "stream_level": "warning"}, - {"name": "edisgo", "file_level": None, "stream_level": "info"} + {"name": "edisgo", "file_level": None, "stream_level": "info"}, ] ) diff --git a/tests/conftest.py b/tests/conftest.py index 74e94e8e5..f8449feeb 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -25,8 +25,9 @@ def pytest_configure(config): ) pytest.tracbev_example_scenario_path = os.path.join( - os.path.realpath(os.path.dirname(__file__)), "data", - "tracbev_example_scenario_2" + os.path.realpath(os.path.dirname(__file__)), + "data", + "tracbev_example_scenario_2", ) pytest.simbev_example_scenario_path_1 = os.path.join( diff --git a/tests/test_edisgo.py b/tests/test_edisgo.py index 75e9eb700..d53b70afa 100755 --- a/tests/test_edisgo.py +++ b/tests/test_edisgo.py @@ -1038,7 +1038,8 @@ def test_apply_charging_strategy(self): # Check if all charging points have a valid chargingdemand_kWh > 0 cps = self.edisgo_obj.topology.loads_df[ - self.edisgo_obj.topology.loads_df.type == "charging_point"].index + self.edisgo_obj.topology.loads_df.type == "charging_point" + ].index ts = self.edisgo_obj.timeseries.loads_active_power.loc[:, cps] df = ts.loc[:, (ts <= 0).any(axis=0)] assert df.shape == ts.shape