1 """Support for EZVIZ light entity."""
3 from __future__
import annotations
7 from pyezviz.constants
import DeviceCatagories, DeviceSwitchType, SupportExt
8 from pyezviz.exceptions
import HTTPError, PyEzvizError
16 percentage_to_ranged_value,
17 ranged_value_to_percentage,
20 from .const
import DATA_COORDINATOR, DOMAIN
21 from .coordinator
import EzvizDataUpdateCoordinator
22 from .entity
import EzvizEntity
25 BRIGHTNESS_RANGE = (1, 255)
29 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
31 """Set up EZVIZ lights based on a config entry."""
32 coordinator: EzvizDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
38 for camera
in coordinator.data
39 for capability, value
in coordinator.data[camera][
"supportExt"].items()
40 if capability ==
str(SupportExt.SupportAlarmLight.value)
46 """Representation of a EZVIZ light."""
48 _attr_translation_key =
"light"
49 _attr_color_mode = ColorMode.BRIGHTNESS
50 _attr_supported_color_modes = {ColorMode.BRIGHTNESS}
54 coordinator: EzvizDataUpdateCoordinator,
57 """Initialize the light."""
58 super().
__init__(coordinator, serial)
61 == DeviceCatagories.BATTERY_CAMERA_DEVICE_CATEGORY.value
68 self.coordinator.data[self.
_serial_serial][
"alarm_light_luminance"],
75 if ATTR_BRIGHTNESS
in kwargs:
77 BRIGHTNESS_RANGE, kwargs[ATTR_BRIGHTNESS]
80 if await self.
hasshasshass.async_add_executor_job(
81 self.coordinator.ezviz_client.set_floodlight_brightness,
87 if await self.
hasshasshass.async_add_executor_job(
88 self.coordinator.ezviz_client.switch_status,
90 DeviceSwitchType.ALARM_LIGHT.value,
96 except (HTTPError, PyEzvizError)
as err:
98 f
"Failed to turn on light {self._attr_name}"
102 """Turn off light."""
104 if await self.
hasshasshass.async_add_executor_job(
105 self.coordinator.ezviz_client.switch_status,
107 DeviceSwitchType.ALARM_LIGHT.value,
113 except (HTTPError, PyEzvizError)
as err:
115 f
"Failed to turn off light {self._attr_name}"
120 """Handle updated data from the coordinator."""
123 if isinstance(self.
datadatadata[
"alarm_light_luminance"], int):
127 self.
datadatadata[
"alarm_light_luminance"],
dict[str, Any] data(self)
None __init__(self, EzvizDataUpdateCoordinator coordinator, str serial)
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None _handle_coordinator_update(self)
None async_write_ha_state(self)
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
float percentage_to_ranged_value(tuple[float, float] low_high_range, float percentage)
int ranged_value_to_percentage(tuple[float, float] low_high_range, float value)