1 """Support for LED selects."""
3 from __future__
import annotations
5 from functools
import partial
7 from wled
import LiveDataOverride
14 from .
import WLEDConfigEntry
15 from .coordinator
import WLEDDataUpdateCoordinator
16 from .entity
import WLEDEntity
17 from .helpers
import wled_exception_handler
24 entry: WLEDConfigEntry,
25 async_add_entities: AddEntitiesCallback,
27 """Set up WLED select based on a config entry."""
28 coordinator = entry.runtime_data
38 update_segments = partial(
39 async_update_segments,
44 coordinator.async_add_listener(update_segments)
49 """Defined a WLED Live Override select."""
51 _attr_entity_category = EntityCategory.CONFIG
52 _attr_translation_key =
"live_override"
54 def __init__(self, coordinator: WLEDDataUpdateCoordinator) ->
None:
55 """Initialize WLED ."""
56 super().
__init__(coordinator=coordinator)
58 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.data.info.mac_address}_live_override"
63 """Return the current selected live override."""
64 return str(self.coordinator.data.state.live_data_override.value)
66 @wled_exception_handler
68 """Set WLED state to the selected live override state."""
69 await self.coordinator.wled.live(live=LiveDataOverride(
int(option)))
73 """Defined a WLED Preset select."""
75 _attr_translation_key =
"preset"
77 def __init__(self, coordinator: WLEDDataUpdateCoordinator) ->
None:
78 """Initialize WLED ."""
79 super().
__init__(coordinator=coordinator)
81 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.data.info.mac_address}_preset"
83 preset.name
for preset
in self.coordinator.data.presets.values()
88 """Return True if entity is available."""
89 return len(self.coordinator.data.presets) > 0
and super().available
93 """Return the current selected preset."""
94 if not self.coordinator.data.state.preset_id:
96 if preset := self.coordinator.data.presets.get(
97 self.coordinator.data.state.preset_id
102 @wled_exception_handler
104 """Set WLED segment to the selected preset."""
105 await self.coordinator.wled.preset(preset=option)
109 """Define a WLED Playlist select."""
111 _attr_translation_key =
"playlist"
113 def __init__(self, coordinator: WLEDDataUpdateCoordinator) ->
None:
114 """Initialize WLED playlist."""
115 super().
__init__(coordinator=coordinator)
119 playlist.name
for playlist
in self.coordinator.data.playlists.values()
124 """Return True if entity is available."""
125 return len(self.coordinator.data.playlists) > 0
and super().available
129 """Return the currently selected playlist."""
130 if not self.coordinator.data.state.playlist_id:
132 if playlist := self.coordinator.data.playlists.get(
133 self.coordinator.data.state.playlist_id
138 @wled_exception_handler
140 """Set WLED segment to the selected playlist."""
141 await self.coordinator.wled.playlist(playlist=option)
145 """Defines a WLED Palette select."""
147 _attr_entity_category = EntityCategory.CONFIG
148 _attr_translation_key =
"color_palette"
151 def __init__(self, coordinator: WLEDDataUpdateCoordinator, segment: int) ->
None:
152 """Initialize WLED ."""
153 super().
__init__(coordinator=coordinator)
161 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.data.info.mac_address}_palette_{segment}"
163 palette.name
for palette
in self.coordinator.data.palettes.values()
169 """Return True if entity is available."""
171 self.coordinator.data.state.segments[self.
_segment_segment]
175 return super().available
179 """Return the current selected color palette."""
180 return self.coordinator.data.palettes[
181 int(self.coordinator.data.state.segments[self.
_segment_segment].palette_id)
184 @wled_exception_handler
186 """Set WLED segment to the selected color palette."""
187 await self.coordinator.wled.segment(segment_id=self.
_segment_segment, palette=option)
192 coordinator: WLEDDataUpdateCoordinator,
193 current_ids: set[int],
194 async_add_entities: AddEntitiesCallback,
196 """Update segments."""
199 for segment
in coordinator.data.state.segments.values()
200 if segment.segment_id
is not None
203 new_entities: list[WLEDPaletteSelect] = []
206 for segment_id
in segment_ids - current_ids:
207 current_ids.add(segment_id)
None __init__(self, WLEDDataUpdateCoordinator coordinator)
None async_select_option(self, str option)
None __init__(self, WLEDDataUpdateCoordinator coordinator, int segment)
None async_select_option(self, str option)
str|None current_option(self)
_attr_translation_placeholders
string _attr_translation_key
None __init__(self, WLEDDataUpdateCoordinator coordinator)
str|None current_option(self)
None async_select_option(self, str option)
None async_select_option(self, str option)
None __init__(self, WLEDDataUpdateCoordinator coordinator)
str|None current_option(self)
None async_setup_entry(HomeAssistant hass, WLEDConfigEntry entry, AddEntitiesCallback async_add_entities)
None async_update_segments(WLEDDataUpdateCoordinator coordinator, set[int] current_ids, AddEntitiesCallback async_add_entities)