Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
c5ed655399
|
|||
007ce16618
|
17
src/box.py
17
src/box.py
@ -10,6 +10,7 @@ class Context:
|
||||
maintenance_mode: bool = field(default=False)
|
||||
overwrite_window: bool = field(default=False)
|
||||
window_state: dict = field(default_factory=dict)
|
||||
feedback: dict = field(default_factory=dict)
|
||||
mode: str = field(default='off')
|
||||
output_temperature: str = field(default='0')
|
||||
|
||||
@ -31,7 +32,6 @@ class Box:
|
||||
self.context = Context(high_temperature=config.DEFAULT_HIGH_TEMPERATURE,
|
||||
output_temperature=config.DEFAULT_HIGH_TEMPERATURE,
|
||||
mode='high',
|
||||
feedback={},
|
||||
window_state={ k: 'closed' for k in self.windows.keys() })
|
||||
|
||||
self.mqtt_client = None
|
||||
@ -73,6 +73,7 @@ class Box:
|
||||
|
||||
try:
|
||||
# match topic to find operation to be executed
|
||||
send_command = True
|
||||
match topic_key.split('/'):
|
||||
case [ primary_key, sub_key ] if primary_key == 'window':
|
||||
self.context.window_state[sub_key] = CONVERTERS["window_contact_input"][self.windows[sub_key]["converter"]](payload)
|
||||
@ -91,9 +92,11 @@ class Box:
|
||||
case [ primary_key ] if primary_key == 'maintenance_mode':
|
||||
self.context.maintenance_mode = payload.lower() == 'true'
|
||||
case [ primary_key ] if primary_key == 'status':
|
||||
send_command = False
|
||||
pass
|
||||
case [ primary_key ] if primary_key == 'feedback':
|
||||
self.context.feedback = json.loads(payload)
|
||||
send_command = False
|
||||
case _:
|
||||
raise Error(f"Unexcepted topic_key: {topic_key}, {payload}")
|
||||
|
||||
@ -101,12 +104,14 @@ class Box:
|
||||
self._calculate_output_temperature()
|
||||
|
||||
|
||||
# publish output temperature
|
||||
result_message = CONVERTERS["target_temperature_output"][self.output_converter](self.context.output_temperature)
|
||||
publish_topic = self.output_topic
|
||||
self.mqtt_client.publish(publish_topic, result_message)
|
||||
logger.info(f"[Box {self.id}] Result published on '{publish_topic}': {result_message}")
|
||||
if send_command:
|
||||
# publish output temperature
|
||||
result_message = CONVERTERS["target_temperature_output"][self.output_converter](self.context.output_temperature)
|
||||
publish_topic = self.output_topic
|
||||
self.mqtt_client.publish(publish_topic, result_message)
|
||||
logger.info(f"[Box {self.id}] Result published on '{publish_topic}': {result_message}")
|
||||
|
||||
# send context in any case
|
||||
context_topic = f"{self.config.CONTEXT_TOPIC_PREFIX}{self.id}"
|
||||
self.mqtt_client.publish(context_topic, str(self.context))
|
||||
except Exception as e:
|
||||
|
Reference in New Issue
Block a user