49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
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" |