Home Assistant Unofficial Reference 2024.12.1
image.py
Go to the documentation of this file.
1 """Support for Fully Kiosk Browser image."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable, Coroutine
6 from dataclasses import dataclass
7 from typing import Any
8 
9 from fullykiosk import FullyKiosk, FullyKioskError
10 
11 from homeassistant.components.image import ImageEntity, ImageEntityDescription
12 from homeassistant.core import HomeAssistant
13 from homeassistant.exceptions import HomeAssistantError
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 import homeassistant.util.dt as dt_util
16 
17 from . import FullyKioskConfigEntry
18 from .coordinator import FullyKioskDataUpdateCoordinator
19 from .entity import FullyKioskEntity
20 
21 
22 @dataclass(frozen=True, kw_only=True)
24  """Fully Kiosk Browser image entity description."""
25 
26  image_fn: Callable[[FullyKiosk], Coroutine[Any, Any, bytes]]
27 
28 
29 IMAGES: tuple[FullyImageEntityDescription, ...] = (
31  key="screenshot",
32  translation_key="screenshot",
33  image_fn=lambda fully: fully.getScreenshot(),
34  ),
35 )
36 
37 
39  hass: HomeAssistant,
40  entry: FullyKioskConfigEntry,
41  async_add_entities: AddEntitiesCallback,
42 ) -> None:
43  """Set up the Fully Kiosk Browser image entities."""
44  coordinator = entry.runtime_data
46  FullyImageEntity(coordinator, description) for description in IMAGES
47  )
48 
49 
51  """Implement the image entity for Fully Kiosk Browser."""
52 
53  entity_description: FullyImageEntityDescription
54  _attr_content_type = "image/png"
55 
56  def __init__(
57  self,
58  coordinator: FullyKioskDataUpdateCoordinator,
59  description: FullyImageEntityDescription,
60  ) -> None:
61  """Initialize the entity."""
62  FullyKioskEntity.__init__(self, coordinator)
63  ImageEntity.__init__(self, coordinator.hass)
64  self.entity_descriptionentity_description = description
65  self._attr_unique_id_attr_unique_id = f"{coordinator.data['deviceID']}-{description.key}"
66 
67  async def async_image(self) -> bytes | None:
68  """Return bytes of image."""
69  try:
70  image_bytes = await self.entity_descriptionentity_description.image_fn(self.coordinator.fully)
71  except FullyKioskError as err:
72  raise HomeAssistantError(err) from err
73  else:
74  self._attr_image_last_updated_attr_image_last_updated = dt_util.utcnow()
75  return image_bytes
None __init__(self, FullyKioskDataUpdateCoordinator coordinator, FullyImageEntityDescription description)
Definition: image.py:60
None async_setup_entry(HomeAssistant hass, FullyKioskConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: image.py:42