# from dataclasses import asdict, dataclass # # # @dataclass(frozen=True, slots=True) # class QingpingState: # temperature: float # humidity: float # co2: int # pm25: int # pm10: int # rssi: int | None = None # # def to_dict(self) -> dict: # return asdict(self) # # from dataclasses import asdict, dataclass from datetime import datetime @dataclass(frozen=True, slots=True) class QingpingState: temperature: float | None = None humidity: float | None = None co2: int | None = None pm25: int | None = None pm10: int | None = None battery: int | None = None sample_timestamp: int | None = None sample_received_at: datetime | None = None last_message_at: datetime | None = None wifi_rssi: int | None = None firmware: str | None = None mqtt_connected: bool = False def to_dict(self) -> dict: result = asdict(self) for key in ("sample_received_at", "last_message_at"): if result[key] is not None: result[key] = result[key].isoformat() return result