From 8573dcf43f56ddd1eff2be4fdedd72cc553852a2 Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Sun, 26 May 2024 18:43:39 +0200 Subject: [PATCH] HeatValve: Automatic configuration implemented --- devices/base.py | 10 ++++++++++ devices/brennenstuhl.py | 9 +++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/devices/base.py b/devices/base.py index e11bff5..7278c48 100644 --- a/devices/base.py +++ b/devices/base.py @@ -27,6 +27,8 @@ class base(mqtt_base): RX_IGNORE_TOPICS = [] RX_IGNORE_KEYS = [] RX_FILTER_DATA_KEYS = [] + # + CFG_DATA = {} def __init__(self, mqtt_client, topic): super().__init__(mqtt_client, topic, default_values=dict.fromkeys(self.RX_KEYS)) @@ -37,7 +39,15 @@ class base(mqtt_base): # self.add_callback(None, None, self.__state_logging__, on_change_only=True) + def __cfg_callback__(self, key, value): + if self.CFG_DATA.get(key) != value: + self.logger.warning("Differing configuration identified: %s=%s --> %s=%s", + repr(key), repr(value), repr(key), repr(self.CFG_DATA.get(key))) + self.send_command(key, self.CFG_DATA.get(key)) + def set(self, key, data, block_callback=[]): + if key in self.CFG_DATA: + self.__cfg_callback__(key, data) if key in self.RX_IGNORE_KEYS: pass # ignore these keys elif key in self.RX_KEYS: diff --git a/devices/brennenstuhl.py b/devices/brennenstuhl.py index 79e0111..6cd1cba 100644 --- a/devices/brennenstuhl.py +++ b/devices/brennenstuhl.py @@ -52,11 +52,16 @@ class brennenstuhl_heatingvalve(base): # RX_KEYS = [KEY_LINKQUALITY, KEY_BATTERY, KEY_HEATING_SETPOINT, KEY_TEMPERATURE] RX_IGNORE_KEYS = [KEY_AWAY_MODE, KEY_CHILD_LOCK, KEY_PRESET, KEY_SYSTEM_MODE, KEY_VALVE_DETECTION, KEY_WINDOW_DETECTION] + # + CFG_DATA = { + KEY_WINDOW_DETECTION: "ON", + KEY_VALVE_DETECTION: "ON", + KEY_SYSTEM_MODE: "heat", + KEY_PRESET: "manual" + } def __init__(self, mqtt_client, topic): super().__init__(mqtt_client, topic) - self.mqtt_client.send(self.topic + '/' + self.TX_TOPIC, json.dumps({self.KEY_WINDOW_DETECTION: "ON", - self.KEY_CHILD_LOCK: "UNLOCK", self.KEY_VALVE_DETECTION: "ON", self.KEY_SYSTEM_MODE: "heat", self.KEY_PRESET: "manual"})) self.add_callback(self.KEY_HEATING_SETPOINT, None, self.__valave_temp_rx__) self.__tx_temperature__ = None self.__rx_temperature__ = None