Home Assistant Unofficial Reference 2024.12.1
update.py
Go to the documentation of this file.
1 """Update entities for Netgear devices."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
9  UpdateDeviceClass,
10  UpdateEntity,
11  UpdateEntityFeature,
12 )
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.core import HomeAssistant, callback
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
17 
18 from .const import DOMAIN, KEY_COORDINATOR_FIRMWARE, KEY_ROUTER
19 from .entity import NetgearRouterCoordinatorEntity
20 from .router import NetgearRouter
21 
22 LOGGER = logging.getLogger(__name__)
23 
24 
26  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
27 ) -> None:
28  """Set up update entities for Netgear component."""
29  router = hass.data[DOMAIN][entry.entry_id][KEY_ROUTER]
30  coordinator = hass.data[DOMAIN][entry.entry_id][KEY_COORDINATOR_FIRMWARE]
31  entities = [NetgearUpdateEntity(coordinator, router)]
32 
33  async_add_entities(entities)
34 
35 
37  """Update entity for a Netgear device."""
38 
39  _attr_device_class = UpdateDeviceClass.FIRMWARE
40  _attr_supported_features = UpdateEntityFeature.INSTALL
41 
42  def __init__(
43  self,
44  coordinator: DataUpdateCoordinator,
45  router: NetgearRouter,
46  ) -> None:
47  """Initialize a Netgear device."""
48  super().__init__(coordinator, router)
49  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{router.serial_number}-update"
50 
51  @property
52  def installed_version(self) -> str | None:
53  """Version currently in use."""
54  if self.coordinator.data is not None:
55  return self.coordinator.data.get("CurrentVersion")
56  return None
57 
58  @property
59  def latest_version(self) -> str | None:
60  """Latest version available for install."""
61  if self.coordinator.data is not None:
62  new_version = self.coordinator.data.get("NewVersion")
63  if new_version is not None and not new_version.startswith(
65  ):
66  return new_version
67  return self.installed_versioninstalled_versioninstalled_versioninstalled_version
68 
69  @property
70  def release_summary(self) -> str | None:
71  """Release summary."""
72  if self.coordinator.data is not None:
73  return self.coordinator.data.get("ReleaseNote")
74  return None
75 
76  async def async_install(
77  self, version: str | None, backup: bool, **kwargs: Any
78  ) -> None:
79  """Install the latest firmware version."""
80  await self._router_router.async_update_new_firmware()
81 
82  @callback
83  def async_update_device(self) -> None:
84  """Update the Netgear device."""
None async_install(self, str|None version, bool backup, **Any kwargs)
Definition: update.py:78
None __init__(self, DataUpdateCoordinator coordinator, NetgearRouter router)
Definition: update.py:46
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: update.py:27