@@ -260,19 +260,31 @@ def _coordinate_charging_when_next_price_minimum_is_unreachable(self, average_po
260
260
Args:
261
261
average_power_consumption: The average rate of power consumption during the charging period.
262
262
"""
263
- energy_rate_after_price_drops_after_average , energy_rate_before_price_rises_over_average = (
264
- self ._coordinate_charging_when_next_price_minimum_is_unreachable_first_charge ()
263
+ energy_rate_after_price_drops_over_average , energy_rate_before_price_rises_over_average = (
264
+ self ._get_energy_rates_before_and_after_price_spike ()
265
265
)
266
266
267
+ max_soc = StateOfCharge .from_percentage (100 )
268
+ self .log .info (f"Charging the inverter to { max_soc } " )
269
+ with self ._protocol_amount_of_energy_bought ():
270
+ self ._charge_inverter (max_soc )
271
+
272
+ self .log .info (
273
+ f"The energy rates before the price spike is at { energy_rate_before_price_rises_over_average .timestamp } "
274
+ f"--> Waiting until then..."
275
+ )
276
+ pause .until (energy_rate_before_price_rises_over_average .timestamp )
277
+
267
278
self .log .info ("Waking up to determine the optimal charging time around the price spike" )
268
- if energy_rate_after_price_drops_after_average < energy_rate_before_price_rises_over_average :
279
+ if energy_rate_after_price_drops_over_average < energy_rate_before_price_rises_over_average :
269
280
self ._coordinate_charging_when_next_price_minimum_is_unreachable_second_charge_after_spike_cheaper_than_before (
270
281
average_power_consumption ,
271
- energy_rate_after_price_drops_after_average ,
282
+ energy_rate_after_price_drops_over_average ,
272
283
energy_rate_before_price_rises_over_average ,
273
284
)
285
+ # TODO
274
286
275
- def _coordinate_charging_when_next_price_minimum_is_unreachable_first_charge (
287
+ def _get_energy_rates_before_and_after_price_spike (
276
288
self ,
277
289
) -> tuple [EnergyRate , EnergyRate ]:
278
290
upcoming_energy_rates = self ._get_upcoming_energy_rates ()
@@ -289,10 +301,7 @@ def _coordinate_charging_when_next_price_minimum_is_unreachable_first_charge(
289
301
f"--> Will charge now to { self .target_max_soc } and then wait until "
290
302
f"{ energy_rate_before_price_rises_over_average .timestamp } "
291
303
)
292
- with self ._protocol_amount_of_energy_bought ():
293
- self ._charge_inverter (self .target_max_soc )
294
- self .log .info (f"Waiting until { energy_rate_before_price_rises_over_average .timestamp } ..." )
295
- pause .until (energy_rate_before_price_rises_over_average .timestamp )
304
+
296
305
return energy_rate_after_price_drops_after_average , energy_rate_before_price_rises_over_average
297
306
298
307
def _coordinate_charging_when_next_price_minimum_is_unreachable_second_charge_after_spike_cheaper_than_before (
@@ -301,9 +310,11 @@ def _coordinate_charging_when_next_price_minimum_is_unreachable_second_charge_af
301
310
energy_rate_after_price_drops_after_average : EnergyRate ,
302
311
energy_rate_before_price_rises_over_average : EnergyRate ,
303
312
) -> None :
304
- self .log .debug (
313
+ # Current time: Right before the price spike
314
+ self .log .info (
305
315
"The energy rate after the price drops below the average is lower than the rate before "
306
- "--> Checking whether it is necessary to charge to reach that point in time"
316
+ "--> Checking whether it is necessary to charge to reach that point in time "
317
+ f"({ energy_rate_after_price_drops_after_average .timestamp } )"
307
318
)
308
319
current_state_of_charge = self .inverter .get_state_of_charge ()
309
320
self .log .debug (f"The current state of charge is { current_state_of_charge } " )
@@ -332,7 +343,7 @@ def _coordinate_charging_when_next_price_minimum_is_unreachable_second_charge_af
332
343
self .log .debug (f"The current state of charge is { current_state_of_charge } " )
333
344
minimum_of_soc_until_next_price_minimum , _ = (
334
345
self .sun_forecast_handler .calculate_min_and_max_of_soc_in_timeframe (
335
- energy_rate_after_price_drops_after_average .timestamp ,
346
+ energy_rate_after_price_drops_after_average .timestamp , # = now
336
347
self .next_price_minimum .timestamp ,
337
348
average_power_consumption ,
338
349
current_state_of_charge ,
@@ -381,13 +392,6 @@ def _coordinate_charging_next_price_minimum_is_reachable(
381
392
382
393
self .log .info (f"The calculated target state of charge is { charging_target_soc } " )
383
394
384
- if charging_target_soc > self .target_max_soc :
385
- self .log .info (
386
- "The target state of charge is more than the maximum allowed charge set in the environment "
387
- f"--> Setting it to { self .target_max_soc } "
388
- )
389
- charging_target_soc = self .target_max_soc
390
-
391
395
with self ._protocol_amount_of_energy_bought ():
392
396
self ._charge_inverter (charging_target_soc )
393
397
@@ -451,6 +455,13 @@ def _charge_inverter(self, target_state_of_charge: StateOfCharge) -> None:
451
455
"""
452
456
charging_progress_check_interval = timedelta (minutes = 5 )
453
457
458
+ if target_state_of_charge > self .target_max_soc :
459
+ self .log .info (
460
+ "The target state of charge is higher than the maximum allowed charge set in the environment "
461
+ f"--> Setting it to { self .target_max_soc } "
462
+ )
463
+ target_state_of_charge = self .target_max_soc
464
+
454
465
if self .inverter .get_state_of_charge ().in_percentage >= target_state_of_charge .in_percentage :
455
466
self .log .info (
456
467
"The current state of charge is higher or equal to the target state of charge" "--> Will not charge"
0 commit comments