"""The Teslemetry integration models.""" import asyncio from dataclasses import dataclass, field from tesla_fleet_api.const import Scope from tesla_fleet_api.teslemetry import EnergySite, Vehicle from teslemetry_stream import TeslemetryStream, TeslemetryStreamVehicle from homeassistant.config_entries import ConfigEntry from homeassistant.helpers.device_registry import DeviceInfo from .coordinator import ( TeslemetryEnergyHistoryCoordinator, TeslemetryEnergySiteInfoCoordinator, TeslemetryEnergySiteLiveCoordinator, TeslemetryMetadataCoordinator, TeslemetryVehicleDataCoordinator, ) @dataclass class TeslemetryData: """Data for the Teslemetry integration.""" vehicles: list[TeslemetryVehicleData] energysites: list[TeslemetryEnergyData] scopes: list[Scope] stream: TeslemetryStream | None metadata_coordinator: TeslemetryMetadataCoordinator @dataclass class TeslemetryVehicleData: """Data for a vehicle in the Teslemetry integration.""" api: Vehicle config_entry: ConfigEntry coordinator: TeslemetryVehicleDataCoordinator poll: bool stream: TeslemetryStream stream_vehicle: TeslemetryStreamVehicle vin: str firmware: str device: DeviceInfo wakelock: asyncio.Lock = field(default_factory=asyncio.Lock) @dataclass class TeslemetryEnergyData: """Data for a vehicle in the Teslemetry integration.""" api: EnergySite live_coordinator: TeslemetryEnergySiteLiveCoordinator | None info_coordinator: TeslemetryEnergySiteInfoCoordinator history_coordinator: TeslemetryEnergyHistoryCoordinator | None id: int device: DeviceInfo