From 3e0b88fc1e6df1dedffc0d63186890ca618e4ffc Mon Sep 17 00:00:00 2001 From: Kilian Helfenbein Date: Wed, 5 Feb 2025 10:21:00 +0100 Subject: [PATCH 1/2] Catch missing home battery efficiency within function --- edisgo/flex_opt/battery_storage_operation.py | 19 +++++++++++++++++++ edisgo/io/storage_import.py | 8 +++++++- examples/edisgo_simple_example.ipynb | 2 +- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/edisgo/flex_opt/battery_storage_operation.py b/edisgo/flex_opt/battery_storage_operation.py index 64447a8fd..d63acc89f 100644 --- a/edisgo/flex_opt/battery_storage_operation.py +++ b/edisgo/flex_opt/battery_storage_operation.py @@ -164,6 +164,25 @@ def apply_reference_operation( if storage_units_names is None: storage_units_names = edisgo_obj.topology.storage_units_df.index + if edisgo_obj.topology.storage_units_df.efficiency_store.isna().all(): + logger.warning( + "The efficiency of storage units charge is not specified in the " + "storage_units_df. By default, it is set to 95%. To change this behavior, " + "first set the 'efficiency_store' parameter in topology.storage_units_df." + ) + + edisgo_obj.topology.storage_units_df["efficiency_store"] = 0.95 + + if edisgo_obj.topology.storage_units_df.efficiency_dispatch.isna().all(): + logger.warning( + "The efficiency of storage units discharge is not specified in the " + "storage_units_df. By default, it is set to 95%. To change this behavior, " + "first set the 'efficiency_dispatch' parameter in " + "topology.storage_units_df." + ) + + edisgo_obj.topology.storage_units_df["efficiency_dispatch"] = 0.95 + storage_units = edisgo_obj.topology.storage_units_df.loc[storage_units_names] soe_df = pd.DataFrame(index=edisgo_obj.timeseries.timeindex) diff --git a/edisgo/io/storage_import.py b/edisgo/io/storage_import.py index 2ba1716cf..e5031ed24 100644 --- a/edisgo/io/storage_import.py +++ b/edisgo/io/storage_import.py @@ -73,7 +73,13 @@ def home_batteries_oedb( ) batteries_df = pd.read_sql(sql=query.statement, con=engine, index_col=None) - return _home_batteries_grid_integration(edisgo_obj, batteries_df) + names = _home_batteries_grid_integration(edisgo_obj, batteries_df) + + edisgo_obj.topology.storage_units_df.building_id = ( + edisgo_obj.topology.storage_units_df.building_id.astype(int) + ) + + return names def _home_batteries_grid_integration(edisgo_obj, batteries_df): diff --git a/examples/edisgo_simple_example.ipynb b/examples/edisgo_simple_example.ipynb index c7ee79ce1..31b493ead 100644 --- a/examples/edisgo_simple_example.ipynb +++ b/examples/edisgo_simple_example.ipynb @@ -892,7 +892,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.11.0" }, "toc": { "base_numbering": 1, From ae803f2288d3289a025cc6354e0282a2d29d2cda Mon Sep 17 00:00:00 2001 From: Kilian Helfenbein Date: Thu, 6 Feb 2025 12:53:24 +0100 Subject: [PATCH 2/2] only set efficiency for relevant storage units --- edisgo/flex_opt/battery_storage_operation.py | 24 ++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/edisgo/flex_opt/battery_storage_operation.py b/edisgo/flex_opt/battery_storage_operation.py index d63acc89f..086dec1f8 100644 --- a/edisgo/flex_opt/battery_storage_operation.py +++ b/edisgo/flex_opt/battery_storage_operation.py @@ -164,16 +164,30 @@ def apply_reference_operation( if storage_units_names is None: storage_units_names = edisgo_obj.topology.storage_units_df.index - if edisgo_obj.topology.storage_units_df.efficiency_store.isna().all(): + if ( + edisgo_obj.topology.storage_units_df.loc[ + storage_units_names, "efficiency_store" + ] + .isna() + .all() + ): logger.warning( "The efficiency of storage units charge is not specified in the " "storage_units_df. By default, it is set to 95%. To change this behavior, " "first set the 'efficiency_store' parameter in topology.storage_units_df." ) - edisgo_obj.topology.storage_units_df["efficiency_store"] = 0.95 + edisgo_obj.topology.storage_units_df.loc[ + storage_units_names, "efficiency_store" + ] = 0.95 - if edisgo_obj.topology.storage_units_df.efficiency_dispatch.isna().all(): + if ( + edisgo_obj.topology.storage_units_df.loc[ + storage_units_names, "efficiency_dispatch" + ] + .isna() + .all() + ): logger.warning( "The efficiency of storage units discharge is not specified in the " "storage_units_df. By default, it is set to 95%. To change this behavior, " @@ -181,7 +195,9 @@ def apply_reference_operation( "topology.storage_units_df." ) - edisgo_obj.topology.storage_units_df["efficiency_dispatch"] = 0.95 + edisgo_obj.topology.storage_units_df.loc[ + storage_units_names, "efficiency_dispatch" + ] = 0.95 storage_units = edisgo_obj.topology.storage_units_df.loc[storage_units_names] soe_df = pd.DataFrame(index=edisgo_obj.timeseries.timeindex)