1 """Support for WLED switches."""
3 from __future__
import annotations
5 from functools
import partial
13 from .
import WLEDConfigEntry
14 from .const
import ATTR_DURATION, ATTR_TARGET_BRIGHTNESS, ATTR_UDP_PORT
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 switch 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 """Defines a WLED nightlight switch."""
51 _attr_entity_category = EntityCategory.CONFIG
52 _attr_translation_key =
"nightlight"
54 def __init__(self, coordinator: WLEDDataUpdateCoordinator) ->
None:
55 """Initialize WLED nightlight switch."""
56 super().
__init__(coordinator=coordinator)
57 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.data.info.mac_address}_nightlight"
61 """Return the state attributes of the entity."""
62 state = self.coordinator.data.state
64 ATTR_DURATION: state.nightlight.duration,
65 ATTR_TARGET_BRIGHTNESS: state.nightlight.target_brightness,
70 """Return the state of the switch."""
71 return bool(self.coordinator.data.state.nightlight.on)
73 @wled_exception_handler
75 """Turn off the WLED nightlight switch."""
76 await self.coordinator.wled.nightlight(on=
False)
78 @wled_exception_handler
80 """Turn on the WLED nightlight switch."""
81 await self.coordinator.wled.nightlight(on=
True)
85 """Defines a WLED sync send switch."""
87 _attr_entity_category = EntityCategory.CONFIG
88 _attr_translation_key =
"sync_send"
90 def __init__(self, coordinator: WLEDDataUpdateCoordinator) ->
None:
91 """Initialize WLED sync send switch."""
92 super().
__init__(coordinator=coordinator)
93 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.data.info.mac_address}_sync_send"
97 """Return the state attributes of the entity."""
98 return {ATTR_UDP_PORT: self.coordinator.data.info.udp_port}
102 """Return the state of the switch."""
103 return bool(self.coordinator.data.state.sync.send)
105 @wled_exception_handler
107 """Turn off the WLED sync send switch."""
108 await self.coordinator.wled.sync(send=
False)
110 @wled_exception_handler
112 """Turn on the WLED sync send switch."""
113 await self.coordinator.wled.sync(send=
True)
117 """Defines a WLED sync receive switch."""
119 _attr_entity_category = EntityCategory.CONFIG
120 _attr_translation_key =
"sync_receive"
122 def __init__(self, coordinator: WLEDDataUpdateCoordinator) ->
None:
123 """Initialize WLED sync receive switch."""
124 super().
__init__(coordinator=coordinator)
125 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.data.info.mac_address}_sync_receive"
129 """Return the state attributes of the entity."""
130 return {ATTR_UDP_PORT: self.coordinator.data.info.udp_port}
134 """Return the state of the switch."""
135 return bool(self.coordinator.data.state.sync.receive)
137 @wled_exception_handler
139 """Turn off the WLED sync receive switch."""
140 await self.coordinator.wled.sync(receive=
False)
142 @wled_exception_handler
144 """Turn on the WLED sync receive switch."""
145 await self.coordinator.wled.sync(receive=
True)
149 """Defines a WLED reverse effect switch."""
151 _attr_entity_category = EntityCategory.CONFIG
152 _attr_translation_key =
"reverse"
155 def __init__(self, coordinator: WLEDDataUpdateCoordinator, segment: int) ->
None:
156 """Initialize WLED reverse effect switch."""
157 super().
__init__(coordinator=coordinator)
165 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.data.info.mac_address}_reverse_{segment}"
170 """Return True if entity is available."""
172 self.coordinator.data.state.segments[self.
_segment_segment]
176 return super().available
180 """Return the state of the switch."""
181 return self.coordinator.data.state.segments[self.
_segment_segment].reverse
183 @wled_exception_handler
185 """Turn off the WLED reverse effect switch."""
186 await self.coordinator.wled.segment(segment_id=self.
_segment_segment, reverse=
False)
188 @wled_exception_handler
190 """Turn on the WLED reverse effect switch."""
191 await self.coordinator.wled.segment(segment_id=self.
_segment_segment, reverse=
True)
196 coordinator: WLEDDataUpdateCoordinator,
197 current_ids: set[int],
198 async_add_entities: AddEntitiesCallback,
200 """Update segments."""
203 for segment
in coordinator.data.state.segments.values()
204 if segment.segment_id
is not None
207 new_entities: list[WLEDReverseSwitch] = []
210 for segment_id
in segment_ids - current_ids:
211 current_ids.add(segment_id)
dict[str, Any]|None extra_state_attributes(self)
None async_turn_off(self, **Any kwargs)
None __init__(self, WLEDDataUpdateCoordinator coordinator)
None async_turn_on(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None __init__(self, WLEDDataUpdateCoordinator coordinator, int segment)
None async_turn_off(self, **Any kwargs)
string _attr_translation_key
_attr_translation_placeholders
None __init__(self, WLEDDataUpdateCoordinator coordinator)
None async_turn_off(self, **Any kwargs)
dict[str, Any]|None extra_state_attributes(self)
None async_turn_on(self, **Any kwargs)
dict[str, Any]|None extra_state_attributes(self)
None __init__(self, WLEDDataUpdateCoordinator coordinator)
None async_turn_on(self, **Any kwargs)
None async_turn_off(self, **Any kwargs)
None async_update_segments(WLEDDataUpdateCoordinator coordinator, set[int] current_ids, AddEntitiesCallback async_add_entities)
None async_setup_entry(HomeAssistant hass, WLEDConfigEntry entry, AddEntitiesCallback async_add_entities)