Source code for nwp500.models.device

from __future__ import annotations

from typing import Annotated, Self

from pydantic import BeforeValidator

from .._base import NavienBaseModel
from ..converters import enum_validator
from ..enums import ConnectionStatus, DeviceType

ConnectionStatusField = Annotated[
    ConnectionStatus, BeforeValidator(enum_validator(ConnectionStatus))
]


[docs] class DeviceInfo(NavienBaseModel): """Device information from API.""" home_seq: int = 0 mac_address: str = "" additional_value: str = "" device_type: DeviceType | int = DeviceType.NPF700_WIFI device_name: str = "Unknown" connected: ConnectionStatusField = ConnectionStatus.DISCONNECTED install_type: str | None = None
[docs] class Location(NavienBaseModel): """Location information for a device.""" state: str | None = None city: str | None = None address: str | None = None latitude: float | None = None longitude: float | None = None altitude: float | None = None
[docs] class Device(NavienBaseModel): """Complete device information including location.""" device_info: DeviceInfo location: Location
[docs] def with_info(self, info: DeviceInfo) -> Self: """Return a new Device instance with updated DeviceInfo.""" return self.model_copy(update={"device_info": info})
[docs] class FirmwareInfo(NavienBaseModel): """Firmware information for a device.""" mac_address: str = "" additional_value: str = "" device_type: DeviceType | int = DeviceType.NPF700_WIFI cur_sw_code: int = 0 cur_version: int = 0 downloaded_version: int | None = None device_group: str | None = None