Permanent setpoint sending disabled and time limited retries added to valve class
This commit is contained in:
parent
b728a472e7
commit
6638f2de69
@ -3,6 +3,8 @@
|
||||
#
|
||||
from devices.base import base
|
||||
import json
|
||||
import task
|
||||
import time
|
||||
|
||||
|
||||
class brennenstuhl_heatingvalve(base):
|
||||
@ -42,6 +44,10 @@ class brennenstuhl_heatingvalve(base):
|
||||
KEY_VALVE_DETECTION = "valve_detection"
|
||||
KEY_WINDOW_DETECTION = "window_detection"
|
||||
#
|
||||
RETRY_CYCLE_TIME = 2.5
|
||||
MAX_TX_RETRIES = 20
|
||||
RETRY_TIMEOUT = RETRY_CYCLE_TIME * MAX_TX_RETRIES
|
||||
#
|
||||
TX_TYPE = base.TX_DICT
|
||||
#
|
||||
RX_KEYS = [KEY_LINKQUALITY, KEY_BATTERY, KEY_HEATING_SETPOINT, KEY_TEMPERATURE]
|
||||
@ -51,11 +57,38 @@ class brennenstuhl_heatingvalve(base):
|
||||
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
|
||||
self.__tx_timestamp__ = 0
|
||||
#
|
||||
self.task = task.periodic(self.RETRY_CYCLE_TIME, self.__task__)
|
||||
self.task.run()
|
||||
|
||||
def __state_logging__(self, inst, key, data):
|
||||
if key in [self.KEY_HEATING_SETPOINT, self.KEY_CHILD_LOCK, self.KEY_WINDOW_DETECTION, self.KEY_VALVE_DETECTION]:
|
||||
self.logger.info("State change of '%s' to '%s'", key, repr(data))
|
||||
|
||||
def send_command(self, key, data):
|
||||
if key == self.KEY_HEATING_SETPOINT:
|
||||
self.__tx_temperature__ = data
|
||||
self.__tx_timestamp__ = time.time()
|
||||
base.send_command(self, key, data)
|
||||
|
||||
def __valave_temp_rx__(self, inst, key, data):
|
||||
if key == self.KEY_HEATING_SETPOINT:
|
||||
self.__rx_temperature__ = data
|
||||
|
||||
def __task__(self, rt):
|
||||
if self.__tx_temperature__ is not None and self.__tx_timestamp__ is not None: # Already send a setpoint
|
||||
if self.__tx_temperature__ != self.__rx_temperature__: # Setpoint and valve feedback are unequal
|
||||
if time.time() - self.__tx_timestamp__ < self.RETRY_TIMEOUT: # Timeout condition allows resend of setpoint
|
||||
self.logger.warning("Setpoint not yet acknoledged by device. Sending setpoint again")
|
||||
self.set_heating_setpoint(self.__tx_temperature__)
|
||||
return
|
||||
else:
|
||||
self.__tx_timestamp__ = None # Disable resend logic, if setpoint and valve setpoint are equal
|
||||
|
||||
#
|
||||
# RX
|
||||
#
|
||||
|
@ -208,17 +208,12 @@ class heating_function(common_base):
|
||||
# cyclic task initialisation
|
||||
self.ct = task.periodic(1, self.cyclic_task)
|
||||
self.ct.run()
|
||||
self.ct2 = task.periodic(15 * 60, self.cyclic_task_tx_setpoint)
|
||||
self.ct2.run()
|
||||
|
||||
def timer_expired(self, device, data, key):
|
||||
self.set(self.KEY_TEMPERATURE_SETPOINT, self[self.KEY_USER_TEMPERATURE_SETPOINT])
|
||||
self.heating_valve.logger.info('Timer expired. returning to regular temperature setpoint %.1f°C.',
|
||||
self[self.KEY_TEMPERATURE_SETPOINT])
|
||||
|
||||
def cyclic_task_tx_setpoint(self, rt):
|
||||
self.heating_valve.set_heating_setpoint(self.get(self.KEY_TEMPERATURE_SETPOINT))
|
||||
|
||||
def cyclic_task(self, rt):
|
||||
timer_value = self[self.KEY_BOOST_TIMER] - self.ct.cycle_time
|
||||
if self[self.KEY_BOOST_TIMER] <= 0:
|
||||
|
Loading…
x
Reference in New Issue
Block a user