1 """Light platform for Evil Genius Light."""
3 from __future__
import annotations
6 from typing
import Any, cast
14 from .const
import DOMAIN
15 from .coordinator
import EvilGeniusUpdateCoordinator
16 from .entity
import EvilGeniusEntity
17 from .util
import update_when_done
20 FIB_NO_EFFECT =
"Solid Color"
25 config_entry: ConfigEntry,
26 async_add_entities: AddEntitiesCallback,
28 """Set up the Evil Genius light platform."""
29 coordinator: EvilGeniusUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
34 """Evil Genius Labs light."""
37 _attr_supported_features = LightEntityFeature.EFFECT
38 _attr_supported_color_modes = {ColorMode.RGB}
39 _attr_color_mode = ColorMode.RGB
41 def __init__(self, coordinator: EvilGeniusUpdateCoordinator) ->
None:
42 """Initialize the Evil Genius light."""
47 for pattern
in self.coordinator.data[
"pattern"][
"options"]
48 if pattern != FIB_NO_EFFECT
54 """Return if light is on."""
55 return cast(int, self.coordinator.data[
"power"][
"value"]) == 1
59 """Return brightness."""
60 return cast(int, self.coordinator.data[
"brightness"][
"value"])
64 """Return the rgb color value [int, int, int]."""
66 "tuple[int, int, int]",
69 for val
in self.coordinator.data[
"solidColor"][
"value"].split(
",")
75 """Return current effect."""
78 self.coordinator.data[
"pattern"][
"options"][
79 self.coordinator.data[
"pattern"][
"value"]
82 if value == FIB_NO_EFFECT:
92 if (brightness := kwargs.get(light.ATTR_BRIGHTNESS))
is not None:
93 async
with asyncio.timeout(5):
94 await self.coordinator.client.set_path_value(
"brightness", brightness)
97 if (rgb_color := kwargs.get(light.ATTR_RGB_COLOR))
is not None:
98 async
with asyncio.timeout(5):
99 await self.coordinator.client.set_rgb_color(*rgb_color)
101 elif (effect := kwargs.get(light.ATTR_EFFECT))
is not None:
102 if effect == HA_NO_EFFECT:
103 effect = FIB_NO_EFFECT
104 async
with asyncio.timeout(5):
105 await self.coordinator.client.set_path_value(
106 "pattern", self.coordinator.data[
"pattern"][
"options"].index(effect)
109 async
with asyncio.timeout(5):
110 await self.coordinator.client.set_path_value(
"power", 1)
114 """Turn light off."""
115 async
with asyncio.timeout(5):
116 await self.coordinator.client.set_path_value(
"power", 0)
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None __init__(self, EvilGeniusUpdateCoordinator coordinator)
tuple[int, int, int] rgb_color(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)