Home Assistant Unofficial Reference 2024.12.1
image.py
Go to the documentation of this file.
1 """Ecovacs image entities."""
2 
3 from deebot_client.capabilities import CapabilityMap
4 from deebot_client.device import Device
5 from deebot_client.events.map import CachedMapInfoEvent, MapChangedEvent
6 
7 from homeassistant.components.image import ImageEntity
8 from homeassistant.core import HomeAssistant
9 from homeassistant.helpers.entity import EntityDescription
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 
12 from . import EcovacsConfigEntry
13 from .entity import EcovacsEntity
14 
15 
17  hass: HomeAssistant,
18  config_entry: EcovacsConfigEntry,
19  async_add_entities: AddEntitiesCallback,
20 ) -> None:
21  """Add entities for passed config_entry in HA."""
22  controller = config_entry.runtime_data
23  entities = [
24  EcovacsMap(device, caps, hass)
25  for device in controller.devices
26  if (caps := device.capabilities.map)
27  ]
28 
29  if entities:
30  async_add_entities(entities)
31 
32 
33 class EcovacsMap(
34  EcovacsEntity[CapabilityMap],
35  ImageEntity,
36 ):
37  """Ecovacs map."""
38 
39  _attr_content_type = "image/svg+xml"
40 
41  def __init__(
42  self,
43  device: Device,
44  capability: CapabilityMap,
45  hass: HomeAssistant,
46  ) -> None:
47  """Initialize entity."""
48  super().__init__(device, capability, hass=hass)
49  self._attr_extra_state_attributes_attr_extra_state_attributes = {}
50 
51  entity_description = EntityDescription(
52  key="map",
53  translation_key="map",
54  )
55 
56  def image(self) -> bytes | None:
57  """Return bytes of image or None."""
58  if svg := self._device_device.map.get_svg_map():
59  return svg.encode()
60 
61  return None
62 
63  async def async_added_to_hass(self) -> None:
64  """Set up the event listeners now that hass is ready."""
65  await super().async_added_to_hass()
66 
67  async def on_info(event: CachedMapInfoEvent) -> None:
68  self._attr_extra_state_attributes_attr_extra_state_attributes["map_name"] = event.name
69 
70  async def on_changed(event: MapChangedEvent) -> None:
71  self._attr_image_last_updated_attr_image_last_updated = event.when
72  self.async_write_ha_stateasync_write_ha_state()
73 
74  self._subscribe_subscribe(self._capability_capability.cached_info.event, on_info)
75  self._subscribe_subscribe(self._capability_capability.changed.event, on_changed)
76 
77  async def async_update(self) -> None:
78  """Update the entity.
79 
80  Only used by the generic entity update service.
81  """
82  await super().async_update()
83  self._device_device.map.refresh()
None _subscribe(self, type[EventT] event_type, Callable[[EventT], Coroutine[Any, Any, None]] callback)
Definition: entity.py:87
None __init__(self, Device device, CapabilityMap capability, HomeAssistant hass)
Definition: image.py:46
None async_setup_entry(HomeAssistant hass, EcovacsConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: image.py:20