1 """Support for Modern Forms Fan lights."""
3 from __future__
import annotations
7 from aiomodernforms.const
import LIGHT_POWER_OFF, LIGHT_POWER_ON
8 import voluptuous
as vol
16 percentage_to_ranged_value,
17 ranged_value_to_percentage,
20 from .
import modernforms_exception_handler
27 SERVICE_CLEAR_LIGHT_SLEEP_TIMER,
28 SERVICE_SET_LIGHT_SLEEP_TIMER,
30 from .coordinator
import ModernFormsDataUpdateCoordinator
31 from .entity
import ModernFormsDeviceEntity
33 BRIGHTNESS_RANGE = (1, 255)
38 config_entry: ConfigEntry,
39 async_add_entities: AddEntitiesCallback,
41 """Set up a Modern Forms platform from config entry."""
43 coordinator: ModernFormsDataUpdateCoordinator = hass.data[DOMAIN][
48 if not coordinator.data.info.light_type:
51 platform = entity_platform.async_get_current_platform()
53 platform.async_register_entity_service(
54 SERVICE_SET_LIGHT_SLEEP_TIMER,
56 vol.Required(ATTR_SLEEP_TIME): vol.All(
57 vol.Coerce(int), vol.Range(min=1, max=1440)
60 "async_set_light_sleep_timer",
63 platform.async_register_entity_service(
64 SERVICE_CLEAR_LIGHT_SLEEP_TIMER,
66 "async_clear_light_sleep_timer",
72 entry_id=config_entry.entry_id, coordinator=coordinator
79 """Defines a Modern Forms light."""
81 _attr_color_mode = ColorMode.BRIGHTNESS
82 _attr_supported_color_modes = {ColorMode.BRIGHTNESS}
83 _attr_translation_key =
"light"
86 self, entry_id: str, coordinator: ModernFormsDataUpdateCoordinator
88 """Initialize Modern Forms light."""
91 coordinator=coordinator,
97 """Return the brightness of this light between 1..255."""
100 BRIGHTNESS_RANGE, self.coordinator.data.state.light_brightness
106 """Return the state of the light."""
107 return bool(self.coordinator.data.state.light_on)
109 @modernforms_exception_handler
111 """Turn off the light."""
112 await self.coordinator.modern_forms.light(on=LIGHT_POWER_OFF)
114 @modernforms_exception_handler
116 """Turn on the light."""
117 data = {OPT_ON: LIGHT_POWER_ON}
119 if ATTR_BRIGHTNESS
in kwargs:
121 BRIGHTNESS_RANGE, kwargs[ATTR_BRIGHTNESS]
124 await self.coordinator.modern_forms.light(**data)
126 @modernforms_exception_handler
131 """Set a Modern Forms light sleep timer."""
132 await self.coordinator.modern_forms.light(sleep=sleep_time * 60)
134 @modernforms_exception_handler
138 """Clear a Modern Forms light sleep timer."""
139 await self.coordinator.modern_forms.light(sleep=CLEAR_TIMER)
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)