Skip to content

Commit c2396bd

Browse files
committed
Update import function to match new R4MU data
1 parent cbe5f14 commit c2396bd

3 files changed

Lines changed: 107 additions & 61 deletions

File tree

edisgo/flex_opt/charging_strategies.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,12 @@ def charging_strategy(
277277
].itertuples():
278278
flex_band = residual_load[start : end + 1]
279279

280-
# get k time steps with the lowest residual load in the parking
281-
# time
282-
idx = np.argpartition(flex_band, k)[:k] + start
283-
284280
try:
281+
# ?????????
282+
# get k time steps with the lowest residual load in the parking
283+
# time
284+
idx = np.argpartition(flex_band, k)[:k] + start
285+
285286
dummy_ts[cp_id].iloc[idx] += cap
286287

287288
residual_load[idx] += cap
@@ -290,8 +291,8 @@ def charging_strategy(
290291
logger.warning(
291292
f"Charging process with index {_} could not be "
292293
f"respected. The charging takes place within the "
293-
f"time steps {idx}, while the time series consists of "
294-
f"{maximum_ts} time steps."
294+
f"time steps {flex_band}, while the time series consists of "
295+
f"{flex_band} time steps."
295296
)
296297
edisgo_obj.timeseries.add_component_time_series(
297298
"loads_active_power",

edisgo/io/electromobility_import.py

Lines changed: 99 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -394,13 +394,16 @@ def read_gpkg_potential_charging_parks_from_R4MU_data(
394394

395395
gpkg_files = [f for f in os.listdir(data_dir) if f.endswith(".gpkg")]
396396
gpkg_data = {f: gpd.read_file(os.path.join(data_dir, f)) for f in gpkg_files}
397-
398-
charging_processes_gdf = charging_processes_from_R4MU_data(
399-
edisgo_obj=edisgo_obj, gpkg_data=gpkg_data
400-
)
401397
charging_parks_gdf = charging_parks_from_R4MU_data(
402398
gpkg_data=gpkg_data, edisgo_obj=edisgo_obj
403399
)
400+
401+
charging_processes_gdf = charging_processes_from_R4MU_data(
402+
edisgo_obj=edisgo_obj,
403+
gpkg_data=gpkg_data,
404+
charging_parks_gdf=charging_parks_gdf,
405+
)
406+
404407
return charging_parks_gdf.to_crs(
405408
epsg=edisgo_obj.topology.grid_district["srid"]
406409
), charging_processes_gdf.to_crs(epsg=edisgo_obj.topology.grid_district["srid"])
@@ -411,10 +414,7 @@ def get_grid_charging_capacity(edisgo_obj, charging_processes_gdf):
411414

412415

413416
def get_park_end_timesteps(edisgo_obj, charging_processes_gdf):
414-
return (
415-
charging_processes_gdf.park_start_timesteps
416-
+ charging_processes_gdf.park_time_timesteps
417-
)
417+
return charging_processes_gdf.event_start + charging_processes_gdf.event_time
418418

419419

420420
def assure_minimum_potential_charging_parks(
@@ -1246,6 +1246,7 @@ def import_electromobility_from_R4MU_data(
12461246
potential_charging_parks_gdf,
12471247
)
12481248
integrate_charging_parks_from_R4MU_data(edisgo_obj)
1249+
print(edisgo_obj.electromobility.charging_processes_df)
12491250

12501251

12511252
def integrate_charging_parks_from_R4MU_data(edisgo_obj: EDisGo):
@@ -1265,7 +1266,7 @@ def integrate_charging_parks_from_R4MU_data(edisgo_obj: EDisGo):
12651266
designated_charging_parks = [
12661267
cp
12671268
for cp in charging_parks
1268-
if (cp.designated_charging_point_capacity > 0) and cp.within_grid
1269+
# if (cp.designated_charging_point_capacity > 0) and cp.within_grid
12691270
]
12701271

12711272
charging_park_ids = [_.id for _ in designated_charging_parks]
@@ -1279,9 +1280,13 @@ def integrate_charging_parks_from_R4MU_data(edisgo_obj: EDisGo):
12791280
geolocation=cp.geometry,
12801281
sector=cp.use_case,
12811282
add_ts=False,
1282-
p_set=cp.grid_connection_capacity,
1283+
p_set=edisgo_obj.electromobility.potential_charging_parks_gdf.loc[
1284+
cp.id
1285+
].p_nom
1286+
/ 1000,
12831287
)
12841288
for cp in designated_charging_parks
1289+
if edisgo_obj.electromobility.potential_charging_parks_gdf.loc[cp.id].p_nom > 0
12851290
]
12861291

12871292
edisgo_obj.electromobility.integrated_charging_parks_df = pd.DataFrame(
@@ -1292,13 +1297,13 @@ def integrate_charging_parks_from_R4MU_data(edisgo_obj: EDisGo):
12921297

12931298
# delete all charging processes from list whith charging parks not in edisgo
12941299
# charging parks because they are outside the grid
1295-
edisgo_obj.electromobility.charging_processes_df = (
1296-
edisgo_obj.electromobility.charging_processes_df[
1297-
edisgo_obj.electromobility.charging_processes_df.charging_park_id.isin(
1298-
edisgo_obj.electromobility.integrated_charging_parks_df.index
1299-
)
1300-
]
1301-
)
1300+
# edisgo_obj.electromobility.charging_processes_df = (
1301+
# edisgo_obj.electromobility.charging_processes_df[
1302+
# edisgo_obj.electromobility.charging_processes_df.charging_park_id.isin(
1303+
# edisgo_obj.electromobility.integrated_charging_parks_df.index
1304+
# )
1305+
# ]
1306+
# )
13021307

13031308

13041309
def charging_parks_from_R4MU_data(
@@ -1330,22 +1335,34 @@ def charging_parks_from_R4MU_data(
13301335
pd.concat(charging_parks_gdfs, ignore_index=True)
13311336
)
13321337
charging_parks_gdf.geometry = charging_parks_gdf.geometry.centroid
1338+
charging_parks_gdf = charging_parks_gdf.to_crs(
1339+
epsg=edisgo_obj.topology.grid_district["srid"]
1340+
)
1341+
charging_parks_gdf = charging_parks_gdf[
1342+
charging_parks_gdf.geometry.within(edisgo_obj.topology.grid_district["geom"])
1343+
]
1344+
charging_parks_gdf = charging_parks_gdf.dropna(subset=["location_id"])
1345+
charging_parks_gdf = charging_parks_gdf[charging_parks_gdf["charging_points"] > 0]
13331346
mapping_charging_parks = {
13341347
"probability": "user_centric_weight",
1335-
"required_points": "ags",
1348+
"average_charging_capacity": "nominal_charging_capacity_kW",
13361349
"use_case": "use_case",
13371350
"charging_park_id": "id",
1351+
"location_id": "charging_park_id",
13381352
}
13391353
charging_parks_gdf = charging_parks_gdf.rename(columns=mapping_charging_parks)
1340-
charging_parks_gdf = charging_parks_gdf.to_crs(
1341-
epsg=edisgo_obj.topology.grid_district["srid"]
1354+
charging_parks_gdf["p_nom"] = (
1355+
charging_parks_gdf["charging_points"]
1356+
* charging_parks_gdf["nominal_charging_capacity_kW"]
13421357
)
1343-
return charging_parks_gdf.to_crs(epsg=edisgo_obj.topology.grid_district["srid"])
1358+
charging_parks_gdf = charging_parks_gdf.set_index("charging_park_id", drop=False)
1359+
return charging_parks_gdf
13441360

13451361

13461362
def charging_processes_from_R4MU_data(
13471363
edisgo_obj: EDisGo,
13481364
gpkg_data: dict[str, gpd.GeoDataFrame],
1365+
charging_parks_gdf: gpd.GeoDataFrame,
13491366
):
13501367
"""
13511368
Get charging processes from R4MU data.
@@ -1370,55 +1387,83 @@ def charging_processes_from_R4MU_data(
13701387
"energy": "chargingdemand_kWh",
13711388
"use_case": "use_case",
13721389
"id": "car_id",
1373-
"station_charging_capacity": "nominal_charging_capacity_kW",
13741390
"charging_use_case": "destination",
1375-
"assigned_location": "charging_park_id",
1391+
"location_id": "charging_park_id",
13761392
"event_start": "park_start_timesteps",
13771393
"event_time": "park_time_timesteps",
13781394
}
13791395

1380-
charging_processes_gdf = charging_processes_gdf.rename(columns=column_mapping)
1381-
charging_processes_gdf["charging_point_id"] = (
1382-
charging_processes_gdf.charging_park_id
1396+
charging_capacity = dict(
1397+
zip(
1398+
charging_parks_gdf.charging_park_id.dropna(),
1399+
charging_parks_gdf.nominal_charging_capacity_kW.dropna(),
1400+
)
1401+
)
1402+
charging_processes_gdf["nominal_charging_capacity_kW"] = charging_processes_gdf[
1403+
"location_id"
1404+
]
1405+
charging_processes_gdf["nominal_charging_capacity_kW"] = (
1406+
charging_processes_gdf["location_id"].map(charging_capacity).dropna()
13831407
)
1408+
charging_processes_gdf["charging_point_id"] = charging_processes_gdf.location_id
13841409
charging_processes_gdf["grid_charging_capacity_kW"] = get_grid_charging_capacity(
13851410
edisgo_obj, charging_processes_gdf
13861411
)
13871412
charging_processes_gdf["park_end_timesteps"] = get_park_end_timesteps(
13881413
edisgo_obj, charging_processes_gdf
13891414
)
13901415
charging_processes_gdf = charging_processes_gdf.rename(columns=column_mapping)
1391-
return charging_processes_gdf.to_crs(epsg=edisgo_obj.topology.grid_district["srid"])
1392-
1416+
use_case_mapping = {
1417+
1: "home",
1418+
2: "home",
1419+
3: "work",
1420+
4: "hpc",
1421+
5: "retail",
1422+
6: "street",
1423+
7: "depot",
1424+
}
13931425

1394-
def distribute_charging_demand_from_R4MU_data(edisgo_obj: EDisGo, data_dir: str):
1395-
# Load all CSV files that end with "-events.csv"
1396-
events_files = [f for f in os.listdir(data_dir) if f.endswith("-events.csv")]
1397-
if not events_files:
1398-
raise FileNotFoundError(
1399-
"No files ending with '-events.csv' found in the directory."
1400-
)
1426+
charging_processes_gdf["use_case"] = (
1427+
charging_processes_gdf["charging_park_id"]
1428+
.astype(str)
1429+
.str[0]
1430+
.astype(int)
1431+
.map(use_case_mapping)
1432+
)
1433+
charging_processes_gdf = charging_processes_gdf.dropna(
1434+
subset=["nominal_charging_capacity_kW"]
1435+
)
1436+
return charging_processes_gdf.to_crs(epsg=edisgo_obj.topology.grid_district["srid"])
14011437

1402-
# Process each events file and concatenate them into a single DataFrame
1403-
events_dfs = []
1404-
for events_file in events_files:
1405-
events_df = pd.read_csv(os.path.join(data_dir, events_file))
1406-
# events_df = get_ags_from_geometry(events_df)
1407-
column_mapping = {
1408-
"energy": "chargingdemand_kWh",
1409-
"use_case": "use_case",
1410-
"id": "car_id",
1411-
"station_charging_capacity": "nominal_charging_capacity_kW",
1412-
"charging_use_case": "destination",
1413-
"assigned_location": "charging_park_id",
1414-
}
1415-
events_df = events_df.rename(columns=column_mapping)
1416-
events_df["charging_point_id"] = events_df.charging_park_id
1417-
events_dfs.append(events_df)
14181438

1419-
# Concatenate all DataFrames into one
1420-
all_events_df = pd.concat(events_dfs, ignore_index=True)
1421-
edisgo_obj.electromobility.charging_processes_df = all_events_df
1439+
# def distribute_charging_demand_from_R4MU_data(edisgo_obj: EDisGo, data_dir: str):
1440+
# # Load all CSV files that end with "-events.csv"
1441+
# events_files = [f for f in os.listdir(data_dir) if f.endswith("-events.csv")]
1442+
# if not events_files:
1443+
# raise FileNotFoundError(
1444+
# "No files ending with '-events.csv' found in the directory."
1445+
# )
1446+
1447+
# # Process each events file and concatenate them into a single DataFrame
1448+
# events_dfs = []
1449+
# for events_file in events_files:
1450+
# events_df = pd.read_csv(os.path.join(data_dir, events_file))
1451+
# # events_df = get_ags_from_geometry(events_df)
1452+
# column_mapping = {
1453+
# "energy": "chargingdemand_kWh",
1454+
# "use_case": "use_case",
1455+
# "id": "car_id",
1456+
# "station_charging_capacity": "nominal_charging_capacity_kW",
1457+
# "charging_use_case": "destination",
1458+
# "assigned_location": "charging_park_id",
1459+
# }
1460+
# events_df = events_df.rename(columns=column_mapping)
1461+
# events_df["charging_point_id"] = events_df.charging_park_id
1462+
# events_dfs.append(events_df)
1463+
1464+
# # Concatenate all DataFrames into one
1465+
# all_events_df = pd.concat(events_dfs, ignore_index=True)
1466+
# edisgo_obj.electromobility.charging_processes_df = all_events_df
14221467

14231468

14241469
def import_electromobility_from_oedb(

edisgo/opf/eDisGo_OPF.jl/Main.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ catch e
2020
end
2121

2222

23-
23+
println("Julia version: ", VERSION)
2424
PowerModels.logger_config!("debug")
2525
json_str = readline(stdin)
2626
ding0_grid = ARGS[1]

0 commit comments

Comments
 (0)