work: добавил каркас под управление вытяжкой!

This commit is contained in:
2026-09-20 18:24:17 +03:00
parent 9fd1b3976d
commit 32f3fc754f
7 changed files with 489 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
from dataclasses import dataclass
@dataclass(frozen=True, slots=True)
class ExhaustConfig:
mqtt_host: str
mqtt_port: int = 1883
# Topic устройства в Tasmota
topic: str = "exhaust"
# Длительность виртуального нажатия кнопки
pulse_ms: int = 300
# Соответствие реле функциям Elica.
# Если после приезда платы каналы окажутся другими,
# меняем только конфигурацию.
power_relay: int = 1
speed_relay: int = 2
light_relay: int = 3
timer_relay: int = 4
@property
def command_prefix(self) -> str:
return f"cmnd/{self.topic}"
@property
def state_prefix(self) -> str:
return f"stat/{self.topic}"
@property
def telemetry_prefix(self) -> str:
return f"tele/{self.topic}"
@property
def lwt_topic(self) -> str:
return f"{self.telemetry_prefix}/LWT"
@property
def state_topic(self) -> str:
return f"{self.telemetry_prefix}/STATE"
@property
def status2_topic(self) -> str:
return f"{self.state_prefix}/STATUS2"
@property
def result_topic(self) -> str:
return f"{self.state_prefix}/RESULT"