From 10236c266fcffee9f9dbdeda36c97394ace0dcd6 Mon Sep 17 00:00:00 2001 From: Trefor Southwell <48591903+springfall2008@users.noreply.github.com> Date: Sun, 7 Jan 2024 11:14:13 +0000 Subject: [PATCH 1/3] Potential fix for too many freeze charges https://github.com/springfall2008/batpred/issues/586 --- apps/predbat/predbat.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index 42c1fcc2d..c00c8d9c5 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -3746,7 +3746,7 @@ def run_prediction(self, charge_limit, charge_window, discharge_window, discharg discharge_window_n = self.in_charge_window(discharge_window, minute_absolute) # Add in standing charge, only for the final plan when we save the results - if (minute_absolute % (24 * 60)) < step and save: + if (minute_absolute % (24 * 60)) < step and (save in ['best', 'base', 'base10', 'best10']): metric += self.metric_standing_charge # Outside the recording window? @@ -5375,9 +5375,7 @@ def rate_min_forward_calc(self, rates): for minute in range(self.minutes_now, self.forecast_minutes + 24 * 60 + self.minutes_now): rate_min_forward[minute] = min(rate_array[minute:]) - self.log( - "Rate min forward looking: now {}, and at end of forecast {}".format(self.dp2(rate_min_forward[self.minutes_now]), self.dp2(rate_min_forward[self.forecast_minutes])) - ) + self.log("Rate min forward looking: now {} at end of forecast {}".format(rate_min_forward[self.minutes_now], self.dp2(rate_min_forward[self.forecast_minutes]))) return rate_min_forward @@ -6907,8 +6905,8 @@ def optimise_charge_limit( if self.set_charge_freeze and try_soc == self.reserve: metric += 0.1 - # Preference to 100% - if try_soc == self.soc_max: + # Very minor preference to 100% or 0% so that slots are contigous + if (try_soc == self.soc_max) or (try_soc == 0): metric -= 0.01 self.debug_enable = was_debug @@ -7897,20 +7895,22 @@ def optimise_all_windows(self, load_minutes_step, load_minutes_step10, pv_foreca # Log set of charge and discharge windows if self.calculate_best_charge: self.log( - "Best charge windows best_metric {} best_cost {} metric_keep {} windows {}".format( + "Best charge windows best_metric {} best_cost {} metric_keep {} end_record {} windows {}".format( self.dp2(best_metric), self.dp2(best_cost), self.dp2(best_keep), + self.time_abs_str(self.end_record + self.minutes_now), self.window_as_text(self.charge_window_best, self.charge_limit_best, ignore_min=True), ) ) if self.calculate_best_discharge: self.log( - "Best discharge windows best_metric {} best_cost {} metric_keep {} windows {}".format( + "Best discharge windows best_metric {} best_cost {} metric_keep {} end_record {} windows {}".format( self.dp2(best_metric), self.dp2(best_cost), self.dp2(best_keep), + self.time_abs_str(self.end_record + self.minutes_now), self.window_as_text(self.discharge_window_best, self.discharge_limits_best, ignore_max=True), ) ) @@ -8558,7 +8558,7 @@ def calculate_plan(self, recompute=True): self.discharge_limits_best, load_minutes_step, pv_forecast_minute_step, - end_record=self.end_record, + end_record=self.end_record ) # Work out record windows @@ -8583,8 +8583,7 @@ def calculate_plan(self, recompute=True): self.discharge_limits_best, load_minutes_step, pv_forecast_minute_step, - end_record=self.end_record, - save="debug", + end_record=self.end_record ) # Initial charge slot filter if self.set_charge_window: @@ -8716,6 +8715,7 @@ def reset_inverter(self): if self.set_discharge_window or (self.inverter_needs_reset_force in ["set_read_only", "mode"]): inverter.adjust_discharge_rate(inverter.battery_rate_max_discharge * 60 * 1000) inverter.adjust_force_discharge(False) + self.inverter_needs_reset = False self.inverter_needs_reset_force = "" @@ -10631,4 +10631,4 @@ def run_time_loop_balance(self, cb_args): except Exception as e: self.log("ERROR: Exception raised {}".format(e)) self.record_status("ERROR: Exception raised {}".format(e)) - raise e + raise e \ No newline at end of file From 53e47006c78a2a372c1d062369d980864e2e1931 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 11:16:15 +0000 Subject: [PATCH 2/3] [pre-commit.ci lite] apply automatic fixes --- apps/predbat/predbat.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index c00c8d9c5..09435c020 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -3746,7 +3746,7 @@ def run_prediction(self, charge_limit, charge_window, discharge_window, discharg discharge_window_n = self.in_charge_window(discharge_window, minute_absolute) # Add in standing charge, only for the final plan when we save the results - if (minute_absolute % (24 * 60)) < step and (save in ['best', 'base', 'base10', 'best10']): + if (minute_absolute % (24 * 60)) < step and (save in ["best", "base", "base10", "best10"]): metric += self.metric_standing_charge # Outside the recording window? @@ -8558,7 +8558,7 @@ def calculate_plan(self, recompute=True): self.discharge_limits_best, load_minutes_step, pv_forecast_minute_step, - end_record=self.end_record + end_record=self.end_record, ) # Work out record windows @@ -8583,7 +8583,7 @@ def calculate_plan(self, recompute=True): self.discharge_limits_best, load_minutes_step, pv_forecast_minute_step, - end_record=self.end_record + end_record=self.end_record, ) # Initial charge slot filter if self.set_charge_window: @@ -8715,7 +8715,6 @@ def reset_inverter(self): if self.set_discharge_window or (self.inverter_needs_reset_force in ["set_read_only", "mode"]): inverter.adjust_discharge_rate(inverter.battery_rate_max_discharge * 60 * 1000) inverter.adjust_force_discharge(False) - self.inverter_needs_reset = False self.inverter_needs_reset_force = "" @@ -10631,4 +10630,4 @@ def run_time_loop_balance(self, cb_args): except Exception as e: self.log("ERROR: Exception raised {}".format(e)) self.record_status("ERROR: Exception raised {}".format(e)) - raise e \ No newline at end of file + raise e From 9f642dc92ff422eadd79d0b817985d8a5a649f4a Mon Sep 17 00:00:00 2001 From: Trefor Southwell <48591903+springfall2008@users.noreply.github.com> Date: Sun, 7 Jan 2024 11:18:16 +0000 Subject: [PATCH 3/3] Update predbat.py --- apps/predbat/predbat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index 09435c020..9ff3aa0c1 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -6905,7 +6905,7 @@ def optimise_charge_limit( if self.set_charge_freeze and try_soc == self.reserve: metric += 0.1 - # Very minor preference to 100% or 0% so that slots are contigous + # Very minor preference to 100% or 0% so that slots are contiguous if (try_soc == self.soc_max) or (try_soc == 0): metric -= 0.01