Home Assistant Unofficial Reference 2024.12.1
update.py
Go to the documentation of this file.
1 """Update platform for IronOS integration."""
2 
3 from __future__ import annotations
4 
6  UpdateDeviceClass,
7  UpdateEntity,
8  UpdateEntityDescription,
9  UpdateEntityFeature,
10 )
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from . import IRON_OS_KEY, IronOSConfigEntry, IronOSLiveDataCoordinator
15 from .coordinator import IronOSFirmwareUpdateCoordinator
16 from .entity import IronOSBaseEntity
17 
18 UPDATE_DESCRIPTION = UpdateEntityDescription(
19  key="firmware",
20  device_class=UpdateDeviceClass.FIRMWARE,
21 )
22 
23 
25  hass: HomeAssistant,
26  entry: IronOSConfigEntry,
27  async_add_entities: AddEntitiesCallback,
28 ) -> None:
29  """Set up IronOS update platform."""
30 
31  coordinator = entry.runtime_data
32 
34  [IronOSUpdate(coordinator, hass.data[IRON_OS_KEY], UPDATE_DESCRIPTION)]
35  )
36 
37 
39  """Representation of an IronOS update entity."""
40 
41  _attr_supported_features = UpdateEntityFeature.RELEASE_NOTES
42 
43  def __init__(
44  self,
45  coordinator: IronOSLiveDataCoordinator,
46  firmware_update: IronOSFirmwareUpdateCoordinator,
47  entity_description: UpdateEntityDescription,
48  ) -> None:
49  """Initialize the sensor."""
50  self.firmware_updatefirmware_update = firmware_update
51  super().__init__(coordinator, entity_description)
52 
53  @property
54  def installed_version(self) -> str | None:
55  """IronOS version on the device."""
56 
57  return self.coordinator.device_info.build
58 
59  @property
60  def title(self) -> str | None:
61  """Title of the IronOS release."""
62 
63  return f"IronOS {self.firmware_update.data.name}"
64 
65  @property
66  def release_url(self) -> str | None:
67  """URL to the full release notes of the latest IronOS version available."""
68 
69  return self.firmware_updatefirmware_update.data.html_url
70 
71  @property
72  def latest_version(self) -> str | None:
73  """Latest IronOS version available for install."""
74 
75  return self.firmware_updatefirmware_update.data.tag_name
76 
77  async def async_release_notes(self) -> str | None:
78  """Return the release notes."""
79 
80  return self.firmware_updatefirmware_update.data.body
81 
82  async def async_added_to_hass(self) -> None:
83  """When entity is added to hass.
84 
85  Register extra update listener for the firmware update coordinator.
86  """
87  await super().async_added_to_hass()
88  self.async_on_removeasync_on_remove(
89  self.firmware_updatefirmware_update.async_add_listener(self._handle_coordinator_update)
90  )
91 
92  @property
93  def available(self) -> bool:
94  """Return if entity is available."""
95  return (
96  self.installed_versioninstalled_versioninstalled_versioninstalled_version is not None
97  and self.firmware_updatefirmware_update.last_update_success
98  )
None __init__(self, IronOSLiveDataCoordinator coordinator, IronOSFirmwareUpdateCoordinator firmware_update, UpdateEntityDescription entity_description)
Definition: update.py:48
None async_on_remove(self, CALLBACK_TYPE func)
Definition: entity.py:1331
Callable[[], None] async_add_listener(self, CALLBACK_TYPE update_callback, Any context=None)
None async_setup_entry(HomeAssistant hass, IronOSConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: update.py:28