From 7b0ada6f419d8542d490b3128acc7fe580fe6da8 Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Wed, 11 Jan 2023 08:17:37 +0100 Subject: [PATCH] bug-fix: radiator function --- devices/__init__.py | 17 ++++++++--------- function/modules.py | 33 ++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/devices/__init__.py b/devices/__init__.py index 42d08e4..6b3a64b 100644 --- a/devices/__init__.py +++ b/devices/__init__.py @@ -744,15 +744,6 @@ class nodered_gui_radiator(nodered_gui_timer): # RX_KEYS = [KEY_TEMPERATURE, KEY_SETPOINT_TEMP, KEY_SETPOINT_TO_DEFAULT, KEY_BOOST, KEY_AWAY, KEY_SUMMER] - def __init__(self, mqtt_client, topic): - super().__init__(mqtt_client, topic) - self[self.KEY_ENABLE] = True - self.add_callback(self.KEY_AWAY, None, self.enable_gui) - self.add_callback(self.KEY_SUMMER, None, self.enable_gui) - - def enable_gui(self, device, key, data): - self.pack(self.KEY_ENABLE, not self.get(self.KEY_AWAY) and not self.get(self.KEY_SUMMER)) - # # TX # @@ -788,6 +779,14 @@ class nodered_gui_radiator(nodered_gui_timer): self.logger.debug("Sending %s with content %s", key, str(data)) self.set_summer(data) + def set_enable(self, data): + """data: [True, False]""" + self.pack(self.KEY_ENABLE, data) + + def set_enable_mcb(self, device, key, data): + self.logger.debug("Sending %s with content %s", key, str(data)) + self.set_enable(data) + class brennenstuhl_heatingvalve(base): KEY_LINKQUALITY = "linkquality" diff --git a/function/modules.py b/function/modules.py index 0cac65f..7c9f72b 100644 --- a/function/modules.py +++ b/function/modules.py @@ -178,30 +178,34 @@ class radiator_function(object): self.boost_timer = None self.gui_heating.set_timer('-') + def update_states(self, away_mode=None, summer_mode=None): + if away_mode is not None: + self.__away_mode__ = away_mode + if summer_mode is not None: + self.__summer_mode__ = summer_mode + self.gui_heating.set_away(self.__away_mode__) + self.gui_heating.set_summer(self.__summer_mode__) + self.gui_heating.set_enable(not self.__away_mode__ and not self.__summer_mode__) + def away_mode(self, device, key, value): - self.__away_mode__ = value - self.gui_heating.set_away(value) if value is True: - self.__summer_mode__ = False - self.gui_heating.set_summer(False) self.cancel_boost() + self.update_states(away_mode=value, summer_mode=False) self.heating_valve.set_heating_setpoint(self.default_temperature - self.AWAY_REDUCTION) else: + self.update_states(away_mode=value) self.heating_valve.set_heating_setpoint(self.default_temperature) def summer_mode(self, device, key, value): - self.__summer_mode__ = value - self.gui_heating.set_summer(value) if value is True: - self.__away_mode__ = False - self.gui_heating.set_away(False) self.cancel_boost() + self.update_states(away_mode=False, summer_mode=value) self.heating_valve.set_heating_setpoint(self.SUMMER_TEMPERATURE) else: + self.update_states(summer_mode=value) self.heating_valve.set_heating_setpoint(self.default_temperature) def boost(self, device, key, data): - self.cancel_boost() if self.boost_timer is None: self.heating_valve.logger.info('Starting boost mode with setpoint %.1f°C.', self.BOOST_TEMPERATURE) self.boost_timer = 15*60 @@ -210,19 +214,18 @@ class radiator_function(object): self.boost_timer += 15 * 60 if self.boost_timer > 60 * 60: self.boost_timer = 60 * 60 + self.update_states(away_mode=False, summer_mode=False) def setpoint_to_default(self, device, key, data): - self.heating_valve.set_heating_setpoint(self.default_temperature) + self.set_heating_setpoint(device, key, self.default_temperature) def set_heating_setpoint(self, device, key, data): - self.cancel_boost() self.heating_valve.set_heating_setpoint(data) + self.cancel_boost() + self.update_states(away_mode=False, summer_mode=False) def get_radiator_setpoint(self, device, key, data): self.gui_heating.set_setpoint_temperature(data) - if self.__away_mode__: - self.away_mode(device, self.gui_heating.KEY_AWAY, True) - if self.__summer_mode__: - self.summer_mode(device, self.gui_heating.KEY_SUMMER, True) + self.update_states() if self.boost_timer is None and not self.__away_mode__ and not self.__summer_mode__: self.regular_temp_setpoint = data