Home Assistant Unofficial Reference 2024.12.1
update.py
Go to the documentation of this file.
1 """Update platform for Tessie integration."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from tessie_api import schedule_software_update
8 
9 from homeassistant.components.update import UpdateEntity, UpdateEntityFeature
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 
13 from . import TessieConfigEntry
14 from .const import TessieUpdateStatus
15 from .entity import TessieEntity
16 from .models import TessieVehicleData
17 
18 PARALLEL_UPDATES = 0
19 
20 
22  hass: HomeAssistant,
23  entry: TessieConfigEntry,
24  async_add_entities: AddEntitiesCallback,
25 ) -> None:
26  """Set up the Tessie Update platform from a config entry."""
27  data = entry.runtime_data
28 
29  async_add_entities(TessieUpdateEntity(vehicle) for vehicle in data.vehicles)
30 
31 
33  """Tessie Updates entity."""
34 
35  _attr_supported_features = UpdateEntityFeature.PROGRESS
36 
37  def __init__(
38  self,
39  vehicle: TessieVehicleData,
40  ) -> None:
41  """Initialize the Update."""
42  super().__init__(vehicle, "update")
43 
44  @property
45  def supported_features(self) -> UpdateEntityFeature:
46  """Flag supported features."""
47  if self.getget("vehicle_state_software_update_status") in (
48  TessieUpdateStatus.AVAILABLE,
49  TessieUpdateStatus.SCHEDULED,
50  ):
51  return self._attr_supported_features_attr_supported_features | UpdateEntityFeature.INSTALL
52  return self._attr_supported_features_attr_supported_features
53 
54  @property
55  def installed_version(self) -> str:
56  """Return the current app version."""
57  # Discard build from version number
58  return self.coordinator.data["vehicle_state_car_version"].split(" ")[0]
59 
60  @property
61  def latest_version(self) -> str | None:
62  """Return the latest version."""
63  if self.getget("vehicle_state_software_update_status") in (
64  TessieUpdateStatus.AVAILABLE,
65  TessieUpdateStatus.SCHEDULED,
66  TessieUpdateStatus.INSTALLING,
67  TessieUpdateStatus.DOWNLOADING,
68  TessieUpdateStatus.WIFI_WAIT,
69  ):
70  return self.getget("vehicle_state_software_update_version")
71  return self.installed_versioninstalled_versioninstalled_versioninstalled_version
72 
73  @property
74  def in_progress(self) -> bool:
75  """Update installation progress."""
76  return (
77  self.getget("vehicle_state_software_update_status")
78  == TessieUpdateStatus.INSTALLING
79  )
80 
81  @property
82  def update_percentage(self) -> int | None:
83  """Update installation progress."""
84  if (
85  self.getget("vehicle_state_software_update_status")
86  == TessieUpdateStatus.INSTALLING
87  ):
88  return self.getget("vehicle_state_software_update_install_perc")
89  return None
90 
91  async def async_install(
92  self, version: str | None, backup: bool, **kwargs: Any
93  ) -> None:
94  """Install an update."""
95  await self.runrun(schedule_software_update, in_seconds=0)
96  self.setset(
97  ("vehicle_state_software_update_status", TessieUpdateStatus.INSTALLING)
98  )
Any get(self, str|None key=None, Any|None default=None)
Definition: entity.py:52
None run(self, Callable[..., Awaitable[dict[str, Any]]] func, **Any kargs)
Definition: entity.py:96
None __init__(self, TessieVehicleData vehicle)
Definition: update.py:40
None async_install(self, str|None version, bool backup, **Any kwargs)
Definition: update.py:93
None async_setup_entry(HomeAssistant hass, TessieConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: update.py:25