Home Assistant Unofficial Reference 2024.12.1
update.py
Go to the documentation of this file.
1 """Support for the QNAP QSW update."""
2 
3 from __future__ import annotations
4 
5 from typing import Any, Final
6 
7 from aioqsw.const import (
8  QSD_DESCRIPTION,
9  QSD_FIRMWARE_CHECK,
10  QSD_FIRMWARE_INFO,
11  QSD_VERSION,
12 )
13 
15  UpdateDeviceClass,
16  UpdateEntity,
17  UpdateEntityDescription,
18  UpdateEntityFeature,
19 )
20 from homeassistant.config_entries import ConfigEntry
21 from homeassistant.const import EntityCategory
22 from homeassistant.core import HomeAssistant, callback
23 from homeassistant.helpers.entity_platform import AddEntitiesCallback
24 
25 from .const import DOMAIN, QSW_COORD_FW, QSW_UPDATE
26 from .coordinator import QswFirmwareCoordinator
27 from .entity import QswFirmwareEntity
28 
29 UPDATE_TYPES: Final[tuple[UpdateEntityDescription, ...]] = (
31  device_class=UpdateDeviceClass.FIRMWARE,
32  entity_category=EntityCategory.CONFIG,
33  key=QSW_UPDATE,
34  ),
35 )
36 
37 
39  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
40 ) -> None:
41  """Add QNAP QSW updates from a config_entry."""
42  coordinator: QswFirmwareCoordinator = hass.data[DOMAIN][entry.entry_id][
43  QSW_COORD_FW
44  ]
46  QswUpdate(coordinator, description, entry) for description in UPDATE_TYPES
47  )
48 
49 
51  """Define a QNAP QSW update."""
52 
53  _attr_supported_features = UpdateEntityFeature.INSTALL
54  entity_description: UpdateEntityDescription
55 
56  def __init__(
57  self,
58  coordinator: QswFirmwareCoordinator,
59  description: UpdateEntityDescription,
60  entry: ConfigEntry,
61  ) -> None:
62  """Initialize."""
63  super().__init__(coordinator, entry)
64  self._attr_unique_id_attr_unique_id = f"{entry.unique_id}_{description.key}"
65  self.entity_descriptionentity_description = description
66 
67  self._attr_installed_version_attr_installed_version = self.get_device_valueget_device_value(
68  QSD_FIRMWARE_INFO, QSD_VERSION
69  )
70  self._async_update_attrs_async_update_attrs()
71 
72  @callback
73  def _handle_coordinator_update(self) -> None:
74  """Update attributes when the coordinator updates."""
75  self._async_update_attrs_async_update_attrs()
77 
78  @callback
79  def _async_update_attrs(self) -> None:
80  """Update attributes."""
81  self._attr_latest_version_attr_latest_version = self.get_device_valueget_device_value(
82  QSD_FIRMWARE_CHECK, QSD_VERSION
83  )
84  self._attr_release_summary_attr_release_summary = self.get_device_valueget_device_value(
85  QSD_FIRMWARE_CHECK, QSD_DESCRIPTION
86  )
87 
88  async def async_install(
89  self, version: str | None, backup: bool, **kwargs: Any
90  ) -> None:
91  """Install an update."""
92  await self.coordinator.async_refresh()
93  await self.coordinator.qsw.live_update()
94 
95  self._attr_installed_version_attr_installed_version = self.latest_versionlatest_version
96  self.async_write_ha_stateasync_write_ha_state()
Any get_device_value(self, str key, str subkey)
Definition: entity.py:149
None __init__(self, QswFirmwareCoordinator coordinator, UpdateEntityDescription description, ConfigEntry entry)
Definition: update.py:61
None async_install(self, str|None version, bool backup, **Any kwargs)
Definition: update.py:90
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: update.py:40