estimated time to swap calculation

This commit is contained in:
Lucas Tan 2025-07-20 23:07:48 +01:00
parent d3dbd9c9f3
commit 7c5d3f5b1d
3 changed files with 22 additions and 3 deletions

View File

@ -2,7 +2,7 @@ import pandas as pd
def format_dataframe( def format_dataframe(
bess_soc_for_cycle, bess_data, load_profiles_since_start, swap_time bess_soc_for_cycle, bess_data, load_profiles_since_start, swap_time, current_time
): ):
"""Formats the DataFrame for display in the dashboard.""" """Formats the DataFrame for display in the dashboard."""
# Create a DataFrame for sites # Create a DataFrame for sites
@ -15,6 +15,7 @@ def format_dataframe(
"Current Load (kW)", "Current Load (kW)",
"SoC (%)", "SoC (%)",
"Predicted Swap Time", "Predicted Swap Time",
"Estimated Time To Swap",
"Cycle Discharge Profile", "Cycle Discharge Profile",
"Load Profile Since Start", "Load Profile Since Start",
] ]
@ -26,6 +27,12 @@ def format_dataframe(
current_load = bess_data["units"][index]["current_load_kW"] current_load = bess_data["units"][index]["current_load_kW"]
unit_name = bess_data["units"][index]["name"] unit_name = bess_data["units"][index]["name"]
predicted_swap_time = swap_time.get(unit_name, "N/A") predicted_swap_time = swap_time.get(unit_name, "N/A")
# calculate estimated time to swap
if isinstance(predicted_swap_time, float):
estimated_time_to_swap = predicted_swap_time - current_time
estimated_time_to_swap = pd.to_timedelta(estimated_time_to_swap, unit="s")
else:
estimated_time_to_swap = "N/A"
# convert predicted_swap_time to a readable format # convert predicted_swap_time to a readable format
if isinstance(predicted_swap_time, float): if isinstance(predicted_swap_time, float):
predicted_swap_time = pd.to_datetime( predicted_swap_time = pd.to_datetime(
@ -43,6 +50,7 @@ def format_dataframe(
"Current Load (kW)": current_load, "Current Load (kW)": current_load,
"SoC (%)": soc * 100, # Convert to percentage "SoC (%)": soc * 100, # Convert to percentage
"Predicted Swap Time": predicted_swap_time, "Predicted Swap Time": predicted_swap_time,
"Estimated Time To Swap": estimated_time_to_swap,
"Cycle Discharge Profile": bess_soc_for_cycle[unit_name][ "Cycle Discharge Profile": bess_soc_for_cycle[unit_name][
"SoC" "SoC"
].tolist(), ].tolist(),

View File

@ -91,6 +91,13 @@ if st.session_state.running:
"%Y-%m-%d %H:%M:%S" "%Y-%m-%d %H:%M:%S"
), ),
) )
st.metric(
"Current Time",
value=pd.to_datetime(
main.c["sim_start_time"] + main.sim_i * main.dt, unit="s"
).strftime("%Y-%m-%d %H:%M:%S"),
)
st.metric( st.metric(
"Time Elapsed in DD:HH:MM:SS", "Time Elapsed in DD:HH:MM:SS",
value=str(pd.to_timedelta(main.sim_i * main.dt, unit="s")), value=str(pd.to_timedelta(main.sim_i * main.dt, unit="s")),

View File

@ -122,11 +122,15 @@ def simulation_loop():
# format data for display # format data for display
status_df = format_dataframe( status_df = format_dataframe(
bess_soc_for_cycle, bess_data, load_profiles_since_start, swap_times bess_soc_for_cycle,
bess_data,
load_profiles_since_start,
swap_times,
timestamps[i],
) )
# small sleep to allow dashboard to refresh / release GIL # small sleep to allow dashboard to refresh / release GIL
time.sleep(0.1) time.sleep(0.01)
### <<< CONTROL ADDED >>> Control functions ### <<< CONTROL ADDED >>> Control functions