1 """Update entities for Ubiquiti network devices."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
8 from typing
import Any, TypeVar
11 from aiounifi.interfaces.api_handlers
import ItemEvent
12 from aiounifi.interfaces.devices
import Devices
13 from aiounifi.models.device
import Device, DeviceUpgradeRequest
18 UpdateEntityDescription,
24 from .
import UnifiConfigEntry
27 UnifiEntityDescription,
28 async_device_available_fn,
29 async_device_device_info_fn,
32 LOGGER = logging.getLogger(__name__)
34 _DataT = TypeVar(
"_DataT", bound=Device)
35 _HandlerT = TypeVar(
"_HandlerT", bound=Devices)
39 """Control upgrade of device."""
40 await api.request(DeviceUpgradeRequest.create(obj_id))
43 @dataclass(frozen=True, kw_only=True)
45 UpdateEntityDescription, UnifiEntityDescription[_HandlerT, _DataT]
47 """Class describing UniFi update entity."""
49 control_fn: Callable[[aiounifi.Controller, str], Coroutine[Any, Any,
None]]
50 state_fn: Callable[[aiounifi.Controller, _DataT], bool]
53 ENTITY_DESCRIPTIONS: tuple[UnifiUpdateEntityDescription, ...] = (
54 UnifiUpdateEntityDescription[Devices, Device](
56 device_class=UpdateDeviceClass.FIRMWARE,
57 api_handler_fn=
lambda api: api.devices,
58 available_fn=async_device_available_fn,
59 control_fn=async_device_control_fn,
60 device_info_fn=async_device_device_info_fn,
61 object_fn=
lambda api, obj_id: api.devices[obj_id],
62 state_fn=
lambda api, device: device.state == 4,
63 unique_id_fn=
lambda hub, obj_id: f
"device_update-{obj_id}",
70 config_entry: UnifiConfigEntry,
71 async_add_entities: AddEntitiesCallback,
73 """Set up update entities for UniFi Network integration."""
74 config_entry.runtime_data.entity_loader.register_platform(
76 UnifiDeviceUpdateEntity,
82 """Representation of a UniFi device update entity."""
84 entity_description: UnifiUpdateEntityDescription[_HandlerT, _DataT]
88 """Initiate entity state."""
90 if self.
hubhub.is_admin:
96 self, version: str |
None, backup: bool, **kwargs: Any
98 """Install an update."""
103 """Update entity state.
105 Update in_progress, installed_version and latest_version.
109 obj = description.object_fn(self.
apiapi, self.
_obj_id_obj_id)
None async_update_state(self, ItemEvent event, str obj_id)
None async_initiate_state(self)
None async_update_state(self, ItemEvent event, str obj_id)
None async_install(self, str|None version, bool backup, **Any kwargs)
None async_setup_entry(HomeAssistant hass, UnifiConfigEntry config_entry, AddEntitiesCallback async_add_entities)
None async_device_control_fn(aiounifi.Controller api, str obj_id)