Home Assistant Unofficial Reference 2024.12.1
light.py
Go to the documentation of this file.
1 """Support for EZVIZ light entity."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from pyezviz.constants import DeviceCatagories, DeviceSwitchType, SupportExt
8 from pyezviz.exceptions import HTTPError, PyEzvizError
9 
10 from homeassistant.components.light import ATTR_BRIGHTNESS, ColorMode, LightEntity
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.core import HomeAssistant, callback
13 from homeassistant.exceptions import HomeAssistantError
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16  percentage_to_ranged_value,
17  ranged_value_to_percentage,
18 )
19 
20 from .const import DATA_COORDINATOR, DOMAIN
21 from .coordinator import EzvizDataUpdateCoordinator
22 from .entity import EzvizEntity
23 
24 PARALLEL_UPDATES = 1
25 BRIGHTNESS_RANGE = (1, 255)
26 
27 
29  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
30 ) -> None:
31  """Set up EZVIZ lights based on a config entry."""
32  coordinator: EzvizDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
33  DATA_COORDINATOR
34  ]
35 
37  EzvizLight(coordinator, camera)
38  for camera in coordinator.data
39  for capability, value in coordinator.data[camera]["supportExt"].items()
40  if capability == str(SupportExt.SupportAlarmLight.value)
41  if value == "1"
42  )
43 
44 
46  """Representation of a EZVIZ light."""
47 
48  _attr_translation_key = "light"
49  _attr_color_mode = ColorMode.BRIGHTNESS
50  _attr_supported_color_modes = {ColorMode.BRIGHTNESS}
51 
52  def __init__(
53  self,
54  coordinator: EzvizDataUpdateCoordinator,
55  serial: str,
56  ) -> None:
57  """Initialize the light."""
58  super().__init__(coordinator, serial)
59  self.battery_cam_typebattery_cam_type = bool(
60  self.datadatadata["device_category"]
61  == DeviceCatagories.BATTERY_CAMERA_DEVICE_CATEGORY.value
62  )
63  self._attr_unique_id_attr_unique_id = f"{serial}_Light"
64  self._attr_is_on_attr_is_on = self.datadatadata["switches"][DeviceSwitchType.ALARM_LIGHT.value]
65  self._attr_brightness_attr_brightness = round(
67  BRIGHTNESS_RANGE,
68  self.coordinator.data[self._serial_serial]["alarm_light_luminance"],
69  )
70  )
71 
72  async def async_turn_on(self, **kwargs: Any) -> None:
73  """Turn on light."""
74  try:
75  if ATTR_BRIGHTNESS in kwargs:
77  BRIGHTNESS_RANGE, kwargs[ATTR_BRIGHTNESS]
78  )
79 
80  if await self.hasshasshass.async_add_executor_job(
81  self.coordinator.ezviz_client.set_floodlight_brightness,
82  self._serial_serial,
83  data,
84  ):
85  self._attr_brightness_attr_brightness = kwargs[ATTR_BRIGHTNESS]
86 
87  if await self.hasshasshass.async_add_executor_job(
88  self.coordinator.ezviz_client.switch_status,
89  self._serial_serial,
90  DeviceSwitchType.ALARM_LIGHT.value,
91  1,
92  ):
93  self._attr_is_on_attr_is_on = True
94  self.async_write_ha_stateasync_write_ha_state()
95 
96  except (HTTPError, PyEzvizError) as err:
97  raise HomeAssistantError(
98  f"Failed to turn on light {self._attr_name}"
99  ) from err
100 
101  async def async_turn_off(self, **kwargs: Any) -> None:
102  """Turn off light."""
103  try:
104  if await self.hasshasshass.async_add_executor_job(
105  self.coordinator.ezviz_client.switch_status,
106  self._serial_serial,
107  DeviceSwitchType.ALARM_LIGHT.value,
108  0,
109  ):
110  self._attr_is_on_attr_is_on = False
111  self.async_write_ha_stateasync_write_ha_state()
112 
113  except (HTTPError, PyEzvizError) as err:
114  raise HomeAssistantError(
115  f"Failed to turn off light {self._attr_name}"
116  ) from err
117 
118  @callback
119  def _handle_coordinator_update(self) -> None:
120  """Handle updated data from the coordinator."""
121  self._attr_is_on_attr_is_on = self.datadatadata["switches"].get(DeviceSwitchType.ALARM_LIGHT.value)
122 
123  if isinstance(self.datadatadata["alarm_light_luminance"], int):
124  self._attr_brightness_attr_brightness = round(
126  BRIGHTNESS_RANGE,
127  self.datadatadata["alarm_light_luminance"],
128  )
129  )
130 
None __init__(self, EzvizDataUpdateCoordinator coordinator, str serial)
Definition: light.py:56
None async_turn_off(self, **Any kwargs)
Definition: light.py:101
None async_turn_on(self, **Any kwargs)
Definition: light.py:72
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: light.py:30
float percentage_to_ranged_value(tuple[float, float] low_high_range, float percentage)
Definition: percentage.py:81
int ranged_value_to_percentage(tuple[float, float] low_high_range, float value)
Definition: percentage.py:64