From 5c9b515de83bf38db8ae586ae714aac7811c42bb Mon Sep 17 00:00:00 2001 From: paulf81 Date: Tue, 9 Dec 2025 13:23:57 -0700 Subject: [PATCH 1/3] Predetermine LMP names --- hycon/interfaces/hercules_interface.py | 64 +++++++++++++------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/hycon/interfaces/hercules_interface.py b/hycon/interfaces/hercules_interface.py index 9a7398c7..396417f2 100644 --- a/hycon/interfaces/hercules_interface.py +++ b/hycon/interfaces/hercules_interface.py @@ -64,6 +64,9 @@ def __init__(self, h_dict): if self._has_hydrogen_component: self.plant_parameters["hydrogen"] = {} + # Pre-compute LMP keys to avoid string formatting in get_measurements + self._lmp_da_keys = tuple(f"lmp_da_{h:02d}" for h in range(24)) + def check_controls(self, controls_dict): available_controls = [ "wind_power_setpoints", @@ -126,47 +129,42 @@ def get_measurements(self, h_dict): # Handle external signals (parse and pass to individual components) if "external_signals" in h_dict: + external_signals = h_dict["external_signals"] - if "plant_power_reference" in h_dict["external_signals"]: - measurements["plant_power_reference"] = ( - h_dict["external_signals"]["plant_power_reference"] - ) + if "plant_power_reference" in external_signals: + measurements["plant_power_reference"] = external_signals["plant_power_reference"] - if "wind_power_reference" in h_dict["external_signals"] and self._has_wind_component: - measurements["wind_farm"]["power_reference"] = ( - h_dict["external_signals"]["wind_power_reference"] - ) + if "wind_power_reference" in external_signals and self._has_wind_component: + measurements["wind_farm"]["power_reference"] = external_signals[ + "wind_power_reference" + ] - if "solar_power_reference" in h_dict["external_signals"] and self._has_solar_component: - measurements["solar_farm"]["power_reference"] = ( - h_dict["external_signals"]["solar_power_reference"] - ) + if "solar_power_reference" in external_signals and self._has_solar_component: + measurements["solar_farm"]["power_reference"] = external_signals[ + "solar_power_reference" + ] if self._has_battery_component: - if "battery_power_reference" in h_dict["external_signals"]: - measurements["battery"]["power_reference"] = ( - h_dict["external_signals"]["battery_power_reference"] - ) - - if "hydrogen_reference" in h_dict["external_signals"] and self._has_hydrogen_component: - measurements["hydrogen"]["power_reference"] = ( - h_dict["external_signals"]["hydrogen_reference"] - ) - - # Grid price information - if "lmp_da_00" in h_dict["external_signals"]: - measurements["DA_LMP_24hours"] = [ - h_dict["external_signals"]["lmp_da_{:02d}".format(h)] for h in range(24) - ] - if "lmp_da" in h_dict["external_signals"]: - measurements["DA_LMP"] = h_dict["external_signals"]["lmp_da"] - if "lmp_rt" in h_dict["external_signals"]: - measurements["RT_LMP"] = h_dict["external_signals"]["lmp_rt"] + if "battery_power_reference" in external_signals: + measurements["battery"]["power_reference"] = external_signals[ + "battery_power_reference" + ] + + if "hydrogen_reference" in external_signals and self._has_hydrogen_component: + measurements["hydrogen"]["power_reference"] = external_signals["hydrogen_reference"] + + # Grid price information (using pre-computed keys for performance) + if "lmp_da_00" in external_signals: + measurements["DA_LMP_24hours"] = [external_signals[k] for k in self._lmp_da_keys] + if "lmp_da" in external_signals: + measurements["DA_LMP"] = external_signals["lmp_da"] + if "lmp_rt" in external_signals: + measurements["RT_LMP"] = external_signals["lmp_rt"] # Special handling for forecast elements - for k in h_dict["external_signals"].keys(): + for k, v in external_signals.items(): if "forecast" in k: - measurements["forecast"][k] = h_dict["external_signals"][k] + measurements["forecast"][k] = v measurements["total_power"] = total_power From 7910e5ae980d03f7905be79f8e54bbfb1737e621 Mon Sep 17 00:00:00 2001 From: paulf81 Date: Wed, 10 Dec 2025 10:06:12 -0700 Subject: [PATCH 2/3] revert cacheing changes --- hycon/interfaces/hercules_interface.py | 53 ++++++++++++++------------ 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/hycon/interfaces/hercules_interface.py b/hycon/interfaces/hercules_interface.py index 396417f2..5ebc3df9 100644 --- a/hycon/interfaces/hercules_interface.py +++ b/hycon/interfaces/hercules_interface.py @@ -129,42 +129,45 @@ def get_measurements(self, h_dict): # Handle external signals (parse and pass to individual components) if "external_signals" in h_dict: - external_signals = h_dict["external_signals"] - if "plant_power_reference" in external_signals: - measurements["plant_power_reference"] = external_signals["plant_power_reference"] + if "plant_power_reference" in h_dict["external_signals"]: + measurements["plant_power_reference"] = ( + h_dict["external_signals"]["plant_power_reference"] + ) - if "wind_power_reference" in external_signals and self._has_wind_component: - measurements["wind_farm"]["power_reference"] = external_signals[ - "wind_power_reference" - ] + if "wind_power_reference" in h_dict["external_signals"] and self._has_wind_component: + measurements["wind_farm"]["power_reference"] = ( + h_dict["external_signals"]["wind_power_reference"] + ) - if "solar_power_reference" in external_signals and self._has_solar_component: - measurements["solar_farm"]["power_reference"] = external_signals[ - "solar_power_reference" - ] + if "solar_power_reference" in h_dict["external_signals"] and self._has_solar_component: + measurements["solar_farm"]["power_reference"] = ( + h_dict["external_signals"]["solar_power_reference"] + ) if self._has_battery_component: - if "battery_power_reference" in external_signals: - measurements["battery"]["power_reference"] = external_signals[ - "battery_power_reference" - ] + if "battery_power_reference" in h_dict["external_signals"]: + measurements["battery"]["power_reference"] = ( + h_dict["external_signals"]["battery_power_reference"] + ) - if "hydrogen_reference" in external_signals and self._has_hydrogen_component: - measurements["hydrogen"]["power_reference"] = external_signals["hydrogen_reference"] + if "hydrogen_reference" in h_dict["external_signals"] and self._has_hydrogen_component: + measurements["hydrogen"]["power_reference"] = ( + h_dict["external_signals"]["hydrogen_reference"] + ) # Grid price information (using pre-computed keys for performance) - if "lmp_da_00" in external_signals: - measurements["DA_LMP_24hours"] = [external_signals[k] for k in self._lmp_da_keys] - if "lmp_da" in external_signals: - measurements["DA_LMP"] = external_signals["lmp_da"] - if "lmp_rt" in external_signals: - measurements["RT_LMP"] = external_signals["lmp_rt"] + if "lmp_da_00" in h_dict["external_signals"]: + measurements["DA_LMP_24hours"] = [h_dict["external_signals"][k] for k in self._lmp_da_keys] + if "lmp_da" in h_dict["external_signals"]: + measurements["DA_LMP"] = h_dict["external_signals"]["lmp_da"] + if "lmp_rt" in h_dict["external_signals"]: + measurements["RT_LMP"] = h_dict["external_signals"]["lmp_rt"] # Special handling for forecast elements - for k, v in external_signals.items(): + for k in h_dict["external_signals"].keys(): if "forecast" in k: - measurements["forecast"][k] = v + measurements["forecast"][k] = h_dict["external_signals"][k] measurements["total_power"] = total_power From b44d83812473875789f52c92f3a58480ed8d8654 Mon Sep 17 00:00:00 2001 From: paulf81 Date: Wed, 10 Dec 2025 10:13:58 -0700 Subject: [PATCH 3/3] fix long line --- hycon/interfaces/hercules_interface.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hycon/interfaces/hercules_interface.py b/hycon/interfaces/hercules_interface.py index 5ebc3df9..e73ebc3e 100644 --- a/hycon/interfaces/hercules_interface.py +++ b/hycon/interfaces/hercules_interface.py @@ -158,7 +158,9 @@ def get_measurements(self, h_dict): # Grid price information (using pre-computed keys for performance) if "lmp_da_00" in h_dict["external_signals"]: - measurements["DA_LMP_24hours"] = [h_dict["external_signals"][k] for k in self._lmp_da_keys] + measurements["DA_LMP_24hours"] = [ + h_dict["external_signals"][k] for k in self._lmp_da_keys + ] if "lmp_da" in h_dict["external_signals"]: measurements["DA_LMP"] = h_dict["external_signals"]["lmp_da"] if "lmp_rt" in h_dict["external_signals"]: