Skip to content

Commit eb4f984

Browse files
committed
Refactor control data handling in optimize method to use current step index instead of hour, improving accuracy for AC and DC charge demands and discharge allowance logging.
1 parent 3a4d0e8 commit eb4f984

File tree

1 file changed

+97
-34
lines changed

1 file changed

+97
-34
lines changed

src/interfaces/optimization_interface.py

Lines changed: 97 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -87,65 +87,128 @@ def examine_response_to_control_data(self, optimized_response_in):
8787
Examines the optimized response data for control parameters.
8888
Returns tuple: (ac_charge, dc_charge, discharge_allowed, response_error)
8989
"""
90-
current_hour = datetime.now(self.time_zone).hour
90+
# current_hour = datetime.now(self.time_zone).hour
91+
# ac_charge_demand_relative = None
92+
# dc_charge_demand_relative = None
93+
# discharge_allowed = None
94+
# response_error = False
95+
96+
# if "ac_charge" in optimized_response_in:
97+
# ac_charge_demand_relative = optimized_response_in["ac_charge"]
98+
# self.last_control_data[0]["ac_charge_demand"] = ac_charge_demand_relative[
99+
# current_hour
100+
# ]
101+
# self.last_control_data[1]["ac_charge_demand"] = ac_charge_demand_relative[
102+
# current_hour + 1 if current_hour < 23 else 0
103+
# ]
104+
# ac_charge_demand_relative = ac_charge_demand_relative[current_hour]
105+
# logger.debug(
106+
# "[OPT] AC charge demand for current hour %s:00 -> %s %%",
107+
# current_hour,
108+
# ac_charge_demand_relative * 100,
109+
# )
110+
# if "dc_charge" in optimized_response_in:
111+
# dc_charge_demand_relative = optimized_response_in["dc_charge"]
112+
# self.last_control_data[0]["dc_charge_demand"] = dc_charge_demand_relative[
113+
# current_hour
114+
# ]
115+
# self.last_control_data[1]["dc_charge_demand"] = dc_charge_demand_relative[
116+
# current_hour + 1 if current_hour < 23 else 0
117+
# ]
118+
# dc_charge_demand_relative = dc_charge_demand_relative[current_hour]
119+
# logger.debug(
120+
# "[OPT] DC charge demand for current hour %s:00 -> %s %%",
121+
# current_hour,
122+
# dc_charge_demand_relative * 100,
123+
# )
124+
# if "discharge_allowed" in optimized_response_in:
125+
# discharge_allowed = optimized_response_in["discharge_allowed"]
126+
# self.last_control_data[0]["discharge_allowed"] = discharge_allowed[
127+
# current_hour
128+
# ]
129+
# self.last_control_data[1]["discharge_allowed"] = discharge_allowed[
130+
# current_hour + 1 if current_hour < 23 else 0
131+
# ]
132+
# discharge_allowed = bool(discharge_allowed[current_hour])
133+
# logger.debug(
134+
# "[OPT] Discharge allowed for current hour %s:00 %s",
135+
# current_hour,
136+
# discharge_allowed,
137+
# )
138+
139+
now = datetime.now(self.time_zone)
140+
# Calculate the current step index based on time_frame_base (in seconds)
141+
steps_per_hour = 3600 // self.time_frame_base
142+
current_step = now.hour * steps_per_hour + now.minute // (
143+
self.time_frame_base // 60
144+
)
145+
# Calculate the datetime for the current step: today midnight + step number * time_frame_base (in seconds)
146+
today_midnight = now.replace(hour=0, minute=0, second=0, microsecond=0)
147+
current_step_time = today_midnight + timedelta(
148+
seconds=current_step * self.time_frame_base
149+
)
150+
151+
next_step = (
152+
current_step + 1
153+
if current_step
154+
< len(optimized_response_in.get("discharge_allowed", [])) - 1
155+
else 0
156+
)
157+
91158
ac_charge_demand_relative = None
92159
dc_charge_demand_relative = None
93160
discharge_allowed = None
94161
response_error = False
95162

96163
if "ac_charge" in optimized_response_in:
97-
ac_charge_demand_relative = optimized_response_in["ac_charge"]
98-
self.last_control_data[0]["ac_charge_demand"] = ac_charge_demand_relative[
99-
current_hour
100-
]
101-
self.last_control_data[1]["ac_charge_demand"] = ac_charge_demand_relative[
102-
current_hour + 1 if current_hour < 23 else 0
103-
]
104-
ac_charge_demand_relative = ac_charge_demand_relative[current_hour]
164+
ac_charge = optimized_response_in["ac_charge"]
165+
self.last_control_data[0]["ac_charge_demand"] = ac_charge[current_step]
166+
self.last_control_data[1]["ac_charge_demand"] = ac_charge[next_step]
167+
ac_charge_demand_relative = ac_charge[current_step]
105168
logger.debug(
106-
"[OPT] AC charge demand for current hour %s:00 -> %s %%",
107-
current_hour,
169+
"[OPT] AC charge demand for current step %s (%s) -> %s %%",
170+
current_step,
171+
current_step_time.strftime("%Y-%m-%d %H:%M"),
108172
ac_charge_demand_relative * 100,
109173
)
110174
if "dc_charge" in optimized_response_in:
111-
dc_charge_demand_relative = optimized_response_in["dc_charge"]
112-
self.last_control_data[0]["dc_charge_demand"] = dc_charge_demand_relative[
113-
current_hour
114-
]
115-
self.last_control_data[1]["dc_charge_demand"] = dc_charge_demand_relative[
116-
current_hour + 1 if current_hour < 23 else 0
117-
]
118-
dc_charge_demand_relative = dc_charge_demand_relative[current_hour]
175+
dc_charge = optimized_response_in["dc_charge"]
176+
self.last_control_data[0]["dc_charge_demand"] = dc_charge[current_step]
177+
self.last_control_data[1]["dc_charge_demand"] = dc_charge[next_step]
178+
dc_charge_demand_relative = dc_charge[current_step]
119179
logger.debug(
120-
"[OPT] DC charge demand for current hour %s:00 -> %s %%",
121-
current_hour,
180+
"[OPT] DC charge demand for current step %s (%s) -> %s %%",
181+
current_step,
182+
current_step_time.strftime("%Y-%m-%d %H:%M"),
122183
dc_charge_demand_relative * 100,
123184
)
124185
if "discharge_allowed" in optimized_response_in:
125-
discharge_allowed = optimized_response_in["discharge_allowed"]
126-
self.last_control_data[0]["discharge_allowed"] = discharge_allowed[
127-
current_hour
186+
discharge_allowed_arr = optimized_response_in["discharge_allowed"]
187+
self.last_control_data[0]["discharge_allowed"] = discharge_allowed_arr[
188+
current_step
128189
]
129-
self.last_control_data[1]["discharge_allowed"] = discharge_allowed[
130-
current_hour + 1 if current_hour < 23 else 0
190+
self.last_control_data[1]["discharge_allowed"] = discharge_allowed_arr[
191+
next_step
131192
]
132-
discharge_allowed = bool(discharge_allowed[current_hour])
193+
discharge_allowed = bool(discharge_allowed_arr[current_step])
133194
logger.debug(
134-
"[OPT] Discharge allowed for current hour %s:00 %s",
135-
current_hour,
195+
"[OPT] Discharge allowed for current step %s (%s): %s",
196+
current_step,
197+
current_step_time.strftime("%Y-%m-%d %H:%M"),
136198
discharge_allowed,
137199
)
138200

201+
current_hour = datetime.now(self.time_zone).hour
139202
if (
140203
"start_solution" in optimized_response_in
141204
and len(optimized_response_in["start_solution"]) > 1
142205
):
143206
self.set_last_start_solution(optimized_response_in["start_solution"])
144-
logger.debug(
145-
"[OPT] Start solution for current hour %s:00 %s",
146-
current_hour,
147-
self.get_last_start_solution(),
148-
)
207+
# logger.debug(
208+
# "[OPT] Start solution for current hour %s:00 %s",
209+
# current_hour,
210+
# self.get_last_start_solution(),
211+
# )
149212
else:
150213
logger.error("[OPT] No control data in optimized response")
151214
response_error = True

0 commit comments

Comments
 (0)