@@ -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