Home Assistant Unofficial Reference 2024.12.1
image.py
Go to the documentation of this file.
1 """Platform for image integration."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from functools import partial
8 
9 from devolo_plc_api import wifi_qr_code
10 from devolo_plc_api.device_api import WifiGuestAccessGet
11 
12 from homeassistant.components.image import ImageEntity, ImageEntityDescription
13 from homeassistant.const import EntityCategory
14 from homeassistant.core import HomeAssistant, callback
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 import homeassistant.util.dt as dt_util
17 
18 from . import DevoloHomeNetworkConfigEntry
19 from .const import IMAGE_GUEST_WIFI, SWITCH_GUEST_WIFI
20 from .coordinator import DevoloDataUpdateCoordinator
21 from .entity import DevoloCoordinatorEntity
22 
23 PARALLEL_UPDATES = 0
24 
25 
26 @dataclass(frozen=True, kw_only=True)
28  """Describes devolo image entity."""
29 
30  image_func: Callable[[WifiGuestAccessGet], bytes]
31 
32 
33 IMAGE_TYPES: dict[str, DevoloImageEntityDescription] = {
34  IMAGE_GUEST_WIFI: DevoloImageEntityDescription(
35  key=IMAGE_GUEST_WIFI,
36  entity_category=EntityCategory.DIAGNOSTIC,
37  image_func=partial(wifi_qr_code, omitsize=True),
38  )
39 }
40 
41 
43  hass: HomeAssistant,
44  entry: DevoloHomeNetworkConfigEntry,
45  async_add_entities: AddEntitiesCallback,
46 ) -> None:
47  """Get all devices and sensors and setup them via config entry."""
48  coordinators = entry.runtime_data.coordinators
49 
50  entities: list[ImageEntity] = []
51  entities.append(
53  entry,
54  coordinators[SWITCH_GUEST_WIFI],
55  IMAGE_TYPES[IMAGE_GUEST_WIFI],
56  )
57  )
58  async_add_entities(entities)
59 
60 
61 class DevoloImageEntity(DevoloCoordinatorEntity[WifiGuestAccessGet], ImageEntity):
62  """Representation of a devolo image."""
63 
64  _attr_content_type = "image/svg+xml"
65 
66  def __init__(
67  self,
68  entry: DevoloHomeNetworkConfigEntry,
69  coordinator: DevoloDataUpdateCoordinator[WifiGuestAccessGet],
70  description: DevoloImageEntityDescription,
71  ) -> None:
72  """Initialize entity."""
73  self.entity_description: DevoloImageEntityDescription = description
74  super().__init__(entry, coordinator)
75  ImageEntity.__init__(self, coordinator.hass)
76  self._attr_image_last_updated_attr_image_last_updated = dt_util.utcnow()
77  self._data_data = self.coordinator.data
78 
79  @callback
80  def _handle_coordinator_update(self) -> None:
81  """Handle updated data from the coordinator."""
82  if (
83  self._data_data.ssid != self.coordinator.data.ssid
84  or self._data_data.key != self.coordinator.data.key
85  ):
86  self._data_data = self.coordinator.data
87  self._attr_image_last_updated_attr_image_last_updated = dt_util.utcnow()
89 
90  async def async_image(self) -> bytes | None:
91  """Return bytes of image."""
92  return self.entity_description.image_func(self.coordinator.data)
None __init__(self, DevoloHomeNetworkConfigEntry entry, DevoloDataUpdateCoordinator[WifiGuestAccessGet] coordinator, DevoloImageEntityDescription description)
Definition: image.py:71
None async_setup_entry(HomeAssistant hass, DevoloHomeNetworkConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: image.py:46