From 36884d40c181686fbf363e0e4183479fa357e90e Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Mon, 30 Oct 2023 09:05:19 +0100 Subject: [PATCH] Ignore delayed heating valve setpoints - values set by user in the last two seconds --- function/modules.py | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/function/modules.py b/function/modules.py index 29d8b8b..f0368c8 100644 --- a/function/modules.py +++ b/function/modules.py @@ -17,6 +17,7 @@ import devices from function.helpers import day_state import logging import task +import time try: from config import APP_NAME as ROOT_LOGGER_NAME @@ -152,10 +153,35 @@ class heating_function(common_base): AWAY_REDUCTION = 5 SUMMER_TEMPERATURE = 5 + class value_timeout_list(object): + MAX_DELAY = 3 + + def __init__(self): + self.__data__ = [] + self.__time__ = [] + + def __cleanup__(self): + now = time.time() + for i, tm in enumerate(self.__time__): + if tm + self.MAX_DELAY < now: + del (self.__data__[i]) + del (self.__time__[i]) + + def new(self, item): + self.__cleanup__() + self.__data__.append(item) + self.__time__.append(time.time()) + + def is_valid_value(self, data): + self.__cleanup__() + return data not in self.__data__ + def __init__(self, heating_valve, default_temperature, **kwargs): self.heating_valve = heating_valve self.default_temperature = default_temperature # + self.valve_value = self.value_timeout_list() + # super().__init__({ self.KEY_USER_TEMPERATURE_SETPOINT: kwargs.get(self.KEY_USER_TEMPERATURE_SETPOINT, self.default_temperature), self.KEY_TEMPERATURE_SETPOINT: kwargs.get(self.KEY_TEMPERATURE_SETPOINT, self.default_temperature), @@ -241,11 +267,13 @@ class heating_function(common_base): self.set(self.KEY_TEMPERATURE_SETPOINT, data) def set_heating_setpoint(self, device, key, data): + self.valve_value.new(data) self.heating_valve.set_heating_setpoint(data) def get_radiator_setpoint(self, device, key, data): - if self[self.KEY_BOOST_TIMER] == 0 and not self[self.KEY_AWAY_MODE] and not self[self.KEY_SUMMER_MODE]: - self.set(self.KEY_USER_TEMPERATURE_SETPOINT, data, block_callback=[self.set_heating_setpoint]) + if self.valve_value.is_valid_value(data): + if self[self.KEY_BOOST_TIMER] == 0 and not self[self.KEY_AWAY_MODE] and not self[self.KEY_SUMMER_MODE]: + self.set(self.KEY_USER_TEMPERATURE_SETPOINT, data, block_callback=[self.set_heating_setpoint]) def get_radiator_temperature(self, device, key, data): self.set(self.KEY_TEMPERATURE_CURRENT, data)