Home Assistant Unofficial Reference 2024.12.1
camera.py
Go to the documentation of this file.
1 """Support for the Environment Canada radar imagery."""
2 
3 from __future__ import annotations
4 
5 import voluptuous as vol
6 
7 from homeassistant.components.camera import Camera
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.core import HomeAssistant
11  AddEntitiesCallback,
12  async_get_current_platform,
13 )
14 from homeassistant.helpers.typing import VolDictType
15 from homeassistant.helpers.update_coordinator import CoordinatorEntity
16 
17 from . import device_info
18 from .const import ATTR_OBSERVATION_TIME, DOMAIN
19 
20 SERVICE_SET_RADAR_TYPE = "set_radar_type"
21 SET_RADAR_TYPE_SCHEMA: VolDictType = {
22  vol.Required("radar_type"): vol.In(["Auto", "Rain", "Snow"]),
23 }
24 
25 
27  hass: HomeAssistant,
28  config_entry: ConfigEntry,
29  async_add_entities: AddEntitiesCallback,
30 ) -> None:
31  """Add a weather entity from a config_entry."""
32  coordinator = hass.data[DOMAIN][config_entry.entry_id]["radar_coordinator"]
33  async_add_entities([ECCamera(coordinator)])
34 
35  platform = async_get_current_platform()
36  platform.async_register_entity_service(
37  SERVICE_SET_RADAR_TYPE,
38  SET_RADAR_TYPE_SCHEMA,
39  "async_set_radar_type",
40  )
41 
42 
44  """Implementation of an Environment Canada radar camera."""
45 
46  _attr_has_entity_name = True
47  _attr_translation_key = "radar"
48 
49  def __init__(self, coordinator):
50  """Initialize the camera."""
51  super().__init__(coordinator)
52  Camera.__init__(self)
53 
54  self.radar_objectradar_object = coordinator.ec_data
55  self._attr_unique_id_attr_unique_id = f"{coordinator.config_entry.unique_id}-radar"
56  self._attr_attribution_attr_attribution = self.radar_objectradar_object.metadata["attribution"]
57  self._attr_entity_registry_enabled_default_attr_entity_registry_enabled_default = False
58  self._attr_device_info_attr_device_info = device_info(coordinator.config_entry)
59 
60  self.content_typecontent_type = "image/gif"
61 
63  self, width: int | None = None, height: int | None = None
64  ) -> bytes | None:
65  """Return bytes of camera image."""
66  self._attr_extra_state_attributes_attr_extra_state_attributes = {
67  ATTR_OBSERVATION_TIME: self.radar_objectradar_object.timestamp,
68  }
69  return self.radar_objectradar_object.image
70 
71  async def async_set_radar_type(self, radar_type: str):
72  """Set the type of radar to retrieve."""
73  self.radar_objectradar_object.precip_type = radar_type.lower()
74  await self.radar_objectradar_object.update()
bytes|None camera_image(self, int|None width=None, int|None height=None)
Definition: camera.py:64
DeviceInfo|None device_info(self)
Definition: entity.py:798
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: camera.py:30
IssData update(pyiss.ISS iss)
Definition: __init__.py:33