From 905c1a0c3228e1360cfe5811f4cee81e499ac04c Mon Sep 17 00:00:00 2001 From: Trefor Southwell <48591903+springfall2008@users.noreply.github.com> Date: Sun, 22 Sep 2024 15:11:00 +0100 Subject: [PATCH] Minor fixes for freeze changes (#1474) * Minor fixes for freeze changes * [pre-commit.ci lite] apply automatic fixes * Region step in 2 hours * [pre-commit.ci lite] apply automatic fixes --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> --- apps/predbat/inverter.py | 4 ++++ apps/predbat/predbat.py | 16 ++++++++++++++-- apps/predbat/web.py | 1 - 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/apps/predbat/inverter.py b/apps/predbat/inverter.py index 932722170..95763f2aa 100644 --- a/apps/predbat/inverter.py +++ b/apps/predbat/inverter.py @@ -1222,6 +1222,10 @@ def write_and_poll_switch(self, name, entity_id, new_value): if isinstance(current_state, str): current_state = current_state.lower() in ["on", "enable", "true"] + if current_state == new_value: + self.base.log("Inverter {} No write needed for {} as {} == {}".format(self.id, name, new_value, current_state)) + return True + retry = 0 while current_state != new_value and retry < 6: retry += 1 diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index ca501fd01..b3a72fe43 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -5429,6 +5429,9 @@ def optimise_charge_limit_price_threads( if region_start and (charge_window[window_n]["start"] > region_end or charge_window[window_n]["end"] < region_start): continue + if charge_window[window_n]["start"] in self.manual_all_times: + continue + if window_n in all_n: if window_prices[window_n] > highest_price_charge: highest_price_charge = window_prices[window_n] @@ -5445,6 +5448,9 @@ def optimise_charge_limit_price_threads( if region_start and (discharge_window[window_n]["start"] > region_end or discharge_window[window_n]["end"] < region_start): continue + if discharge_window[window_n]["start"] in self.manual_all_times: + continue + try_discharge[window_n] = 100 if window_n in all_d: if not self.calculate_discharge_oncharge: @@ -6736,13 +6742,16 @@ def optimise_all_windows(self, best_metric, metric_keep): ) if self.calculate_regions: region_size = int(16 * 60) - while region_size >= 2 * 60: + min_region_size = int(2 * 60) + while region_size >= min_region_size: self.log(">> Region optimisation pass width {}".format(region_size)) - for region in range(0, self.end_record + self.minutes_now, region_size): + hit_end = False + for region in range(0, self.end_record + self.minutes_now, min_region_size): region_end = min(region + region_size, self.end_record + self.minutes_now) if region_end < self.minutes_now: continue + ( self.charge_limit_best, ignore_discharge_limits, @@ -6782,6 +6791,9 @@ def optimise_all_windows(self, best_metric, metric_keep): best_carbon=best_carbon, tried_list=tried_list, ) + # Reached the end of the window + if region_end >= self.end_record + self.minutes_now: + break region_size = int(region_size / 2) # Keep the freeze but not the full discharge as that will be re-introduced later diff --git a/apps/predbat/web.py b/apps/predbat/web.py index 49209daa9..980ed327a 100644 --- a/apps/predbat/web.py +++ b/apps/predbat/web.py @@ -452,7 +452,6 @@ async def html_config_post(self, request): Save the Predbat config from an HTML page """ postdata = await request.post() - self.log("Post data: {}".format(postdata)) for pitem in postdata: new_value = postdata[pitem] if pitem: