Skip to content

Commit 90a9fc0

Browse files
Merge branch 'main' into fix/3ph-freeze-export-5082
2 parents 68ad0c8 + 0480541 commit 90a9fc0

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

‎apps/predbat/execute.py‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,11 @@ def execute_plan(self):
609609
else:
610610
# If there is a previous set charge window, but its more than the set window minutes in the future but we are not close to it then we can leave it enabled for now
611611
# saves register writes and avoids turning off the window before the inverter knows it finished
612-
if (inverter.charge_start_time_minutes != inverter.charge_end_time_minutes) and (inverter.charge_start_time_minutes - self.minutes_now) > self.set_window_minutes:
612+
# Only for an inverter with no charge enable switch, where turning the charge off means rewriting the
613+
# window itself (#2993). With a switch it is one write that leaves the times alone, and leaving it on
614+
# arms every other slot the inverter has: on a GivEnergy 3-phase the unused slots, held at 00:00-00:00,
615+
# are live for the first minute of the day and charged from the grid at full rate (#5371)
616+
if (not inverter.inv_has_charge_enable_time) and (inverter.charge_start_time_minutes != inverter.charge_end_time_minutes) and (inverter.charge_start_time_minutes - self.minutes_now) > self.set_window_minutes:
613617
self.log(
614618
"Inverter {} leaving charge window as already set and more than set_window_minutes {} away (now {} charge start time {})".format(
615619
inverter.id, self.set_window_minutes, self.time_abs_str(self.minutes_now), self.time_abs_str(inverter.charge_start_time_minutes)

‎apps/predbat/tests/test_execute.py‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2394,18 +2394,52 @@ def run_execute_tests(my_predbat):
23942394
inverter_charge_time_minutes_start=12 * 60,
23952395
minutes_now=0,
23962396
)
2397+
# The inverter still holds a window that finished, which now reads as tomorrow's, and the next planned
2398+
# charge is hours away. With a charge enable switch the switch goes off between windows: left on it arms
2399+
# every other slot the inverter has, and a GivEnergy 3-phase unit's unused 00:00-00:00 slots are live for
2400+
# the first minute of the day (#5371)
23972401
failed |= run_execute_test(
23982402
my_predbat,
23992403
"charge_midnight2d",
24002404
charge_window_best=charge_window_best7d,
24012405
charge_limit_best=charge_limit_best,
2406+
assert_charge_time_enable=False,
2407+
set_charge_window=True,
2408+
set_export_window=True,
2409+
assert_status="Demand",
2410+
inverter_charge_time_minutes_start=30 + 24 * 60,
2411+
)
2412+
# With no switch, turning the charge off means rewriting the window, so it is left alone as before (#2993)
2413+
for inverter in my_predbat.inverters:
2414+
inverter.charge_time_enable = True
2415+
failed |= run_execute_test(
2416+
my_predbat,
2417+
"charge_midnight2d_no_enable_switch",
2418+
charge_window_best=charge_window_best7d,
2419+
charge_limit_best=charge_limit_best,
24022420
assert_charge_time_enable=True,
24032421
set_charge_window=True,
24042422
set_export_window=True,
24052423
assert_status="Demand",
24062424
assert_charge_start_time_minutes=30 + 24 * 60,
24072425
assert_charge_end_time_minutes=-1,
24082426
inverter_charge_time_minutes_start=30 + 24 * 60,
2427+
has_charge_enable_time=False,
2428+
)
2429+
# And the switch comes back on once the next window is close enough to program
2430+
failed |= run_execute_test(
2431+
my_predbat,
2432+
"charge_midnight2d_window_close",
2433+
charge_window_best=charge_window_best7d,
2434+
charge_limit_best=charge_limit_best,
2435+
assert_charge_time_enable=True,
2436+
set_charge_window=True,
2437+
set_export_window=True,
2438+
assert_status="Demand",
2439+
assert_charge_start_time_minutes=22 * 60,
2440+
assert_charge_end_time_minutes=23 * 60,
2441+
inverter_charge_time_minutes_start=30 + 24 * 60,
2442+
minutes_now=22 * 60 - 10,
24092443
)
24102444

24112445
for inverter in my_predbat.inverters:

0 commit comments

Comments
 (0)