core/homeassistant/components/hardware/models.py

69 lines
1.4 KiB
Python

"""Models for Hardware."""
from __future__ import annotations
from dataclasses import dataclass
from typing import Protocol
import psutil_home_assistant as ha_psutil
from homeassistant.components import websocket_api
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
@dataclass
class HardwareData:
"""Hardware data."""
hardware_platform: dict[str, HardwareProtocol]
system_status: SystemStatus
@dataclass(slots=True)
class SystemStatus:
"""System status."""
ha_psutil: ha_psutil
remove_periodic_timer: CALLBACK_TYPE | None
subscribers: set[tuple[websocket_api.ActiveConnection, int]]
@dataclass(slots=True)
class BoardInfo:
"""Board info type."""
hassio_board_id: str | None
manufacturer: str
model: str | None
revision: str | None
@dataclass(slots=True, frozen=True)
class USBInfo:
"""USB info type."""
vid: str
pid: str
serial_number: str | None
manufacturer: str | None
description: str | None
@dataclass(slots=True, frozen=True)
class HardwareInfo:
"""Hardware info type."""
name: str | None
board: BoardInfo | None
config_entries: list[str] | None
dongle: USBInfo | None
url: str | None
class HardwareProtocol(Protocol):
"""Define the format of hardware platforms."""
@callback
def async_info(self, hass: HomeAssistant) -> list[HardwareInfo]:
"""Return info."""