from dataclasses import asdict, dataclass from datetime import datetime @dataclass(frozen=True, slots=True) class ExhaustState: mqtt_connected: bool = False device_online: bool = False last_message_at: datetime | None = None firmware: str | None = None uptime_seconds: int | None = None wifi_rssi: int | None = None def to_dict(self) -> dict: result = asdict(self) if result["last_message_at"] is not None: result["last_message_at"] = ( result["last_message_at"].isoformat() ) return result