From b723c804b88bcae433f755e2a6a58aed681f6b68 Mon Sep 17 00:00:00 2001 From: Trefor Southwell <48591903+springfall2008@users.noreply.github.com> Date: Sun, 7 Jan 2024 15:35:22 +0000 Subject: [PATCH 1/2] Calculate region feature Fix threshold value issue after region pass: https://github.com/springfall2008/batpred/issues/590 --- apps/predbat/predbat.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index 256f212d7..a579cbf41 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -6547,7 +6547,7 @@ def optimise_charge_limit_price( pv_forecast_minute10_step, end_record=None, region_start=None, - region_end=None, + region_end=None ): """ Pick an import price threshold which gives the best results @@ -6626,10 +6626,11 @@ def optimise_charge_limit_price( # This price band setting for charge try_charge_limit = best_limits.copy() for window_n in range(0, record_charge_windows): + if region_start: - if charge_window[window_n]["start"] > region_end or charge_window[window_n]["end"] < region_start: + if charge_window[window_n]['start'] > region_end or charge_window[window_n]['end'] < region_start: continue - + if window_n in all_n: if window_prices[window_n] > highest_price_charge: highest_price_charge = window_prices[window_n] @@ -6645,7 +6646,7 @@ def optimise_charge_limit_price( for window_n in all_d: if region_start: - if discharge_window[window_n]["start"] > region_end or discharge_window[window_n]["end"] < region_start: + if discharge_window[window_n]['start'] > region_end or discharge_window[window_n]['end'] < region_start: continue hit_charge = self.hit_charge_window( self.charge_window_best, self.discharge_window_best[window_n]["start"], self.discharge_window_best[window_n]["end"] @@ -7712,9 +7713,9 @@ def optimise_all_windows(self, load_minutes_step, load_minutes_step10, pv_foreca ) if self.calculate_regions: self.end_record = self.record_length(self.charge_window_best, self.charge_limit_best, best_price) - for region in range(0, self.end_record, 4 * 60): - region_end = min(region + 4 * 60, self.end_record) - self.charge_limit_best, ignore_discharge_limits, best_price, best_price_discharge = self.optimise_charge_limit_price( + for region in range(0, self.end_record, 4*60): + region_end = min(region + 4*60, self.end_record) + self.charge_limit_best, ignore_discharge_limits, region_best_price, region_best_price_discharge = self.optimise_charge_limit_price( price_set, price_links, window_index, @@ -7729,9 +7730,10 @@ def optimise_all_windows(self, load_minutes_step, load_minutes_step10, pv_foreca pv_forecast_minute10_step, end_record=self.end_record, region_start=region + self.minutes_now, - region_end=region_end + self.minutes_now, + region_end=region_end + self.minutes_now ) + # Set the new end record and blackout period based on the levelling self.end_record = self.record_length(self.charge_window_best, self.charge_limit_best, best_price) self.optimise_charge_windows_reset(reset_all=False) From c444450ec2f37311c2299d2b29f26d82a10d4bb5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Sun, 7 Jan 2024 15:36:50 +0000 Subject: [PATCH 2/2] [pre-commit.ci lite] apply automatic fixes --- apps/predbat/predbat.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index a579cbf41..7314a731c 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -6547,7 +6547,7 @@ def optimise_charge_limit_price( pv_forecast_minute10_step, end_record=None, region_start=None, - region_end=None + region_end=None, ): """ Pick an import price threshold which gives the best results @@ -6626,11 +6626,10 @@ def optimise_charge_limit_price( # This price band setting for charge try_charge_limit = best_limits.copy() for window_n in range(0, record_charge_windows): - if region_start: - if charge_window[window_n]['start'] > region_end or charge_window[window_n]['end'] < region_start: + if charge_window[window_n]["start"] > region_end or charge_window[window_n]["end"] < region_start: continue - + if window_n in all_n: if window_prices[window_n] > highest_price_charge: highest_price_charge = window_prices[window_n] @@ -6646,7 +6645,7 @@ def optimise_charge_limit_price( for window_n in all_d: if region_start: - if discharge_window[window_n]['start'] > region_end or discharge_window[window_n]['end'] < region_start: + if discharge_window[window_n]["start"] > region_end or discharge_window[window_n]["end"] < region_start: continue hit_charge = self.hit_charge_window( self.charge_window_best, self.discharge_window_best[window_n]["start"], self.discharge_window_best[window_n]["end"] @@ -7713,8 +7712,8 @@ def optimise_all_windows(self, load_minutes_step, load_minutes_step10, pv_foreca ) if self.calculate_regions: self.end_record = self.record_length(self.charge_window_best, self.charge_limit_best, best_price) - for region in range(0, self.end_record, 4*60): - region_end = min(region + 4*60, self.end_record) + for region in range(0, self.end_record, 4 * 60): + region_end = min(region + 4 * 60, self.end_record) self.charge_limit_best, ignore_discharge_limits, region_best_price, region_best_price_discharge = self.optimise_charge_limit_price( price_set, price_links, @@ -7730,10 +7729,9 @@ def optimise_all_windows(self, load_minutes_step, load_minutes_step10, pv_foreca pv_forecast_minute10_step, end_record=self.end_record, region_start=region + self.minutes_now, - region_end=region_end + self.minutes_now + region_end=region_end + self.minutes_now, ) - # Set the new end record and blackout period based on the levelling self.end_record = self.record_length(self.charge_window_best, self.charge_limit_best, best_price) self.optimise_charge_windows_reset(reset_all=False)