diff --git a/homeassistant/components/wled/light.py b/homeassistant/components/wled/light.py index c9a074bbdce..46dba23b39e 100644 --- a/homeassistant/components/wled/light.py +++ b/homeassistant/components/wled/light.py @@ -132,27 +132,24 @@ class WLEDMasterLight(WLEDEntity, LightEntity): @wled_exception_handler async def async_turn_off(self, **kwargs: Any) -> None: """Turn off the light.""" - data: dict[str, bool | int] = {ATTR_ON: False} - + transition = None if ATTR_TRANSITION in kwargs: # WLED uses 100ms per unit, so 10 = 1 second. - data[ATTR_TRANSITION] = round(kwargs[ATTR_TRANSITION] * 10) + transition = round(kwargs[ATTR_TRANSITION] * 10) - await self.coordinator.wled.master(**data) # type: ignore[arg-type] + await self.coordinator.wled.master(on=False, transition=transition) @wled_exception_handler async def async_turn_on(self, **kwargs: Any) -> None: """Turn on the light.""" - data: dict[str, bool | int] = {ATTR_ON: True} - + transition = None if ATTR_TRANSITION in kwargs: # WLED uses 100ms per unit, so 10 = 1 second. - data[ATTR_TRANSITION] = round(kwargs[ATTR_TRANSITION] * 10) + transition = round(kwargs[ATTR_TRANSITION] * 10) - if ATTR_BRIGHTNESS in kwargs: - data[ATTR_BRIGHTNESS] = kwargs[ATTR_BRIGHTNESS] - - await self.coordinator.wled.master(**data) # type: ignore[arg-type] + await self.coordinator.wled.master( + on=True, brightness=kwargs.get(ATTR_BRIGHTNESS), transition=transition + ) async def async_effect( self, @@ -171,9 +168,7 @@ class WLEDMasterLight(WLEDEntity, LightEntity): preset: int, ) -> None: """Set a WLED light to a saved preset.""" - data = {ATTR_PRESET: preset} - - await self.coordinator.wled.preset(**data) + await self.coordinator.wled.preset(preset=preset) class WLEDSegmentLight(WLEDEntity, LightEntity): @@ -292,22 +287,22 @@ class WLEDSegmentLight(WLEDEntity, LightEntity): @wled_exception_handler async def async_turn_off(self, **kwargs: Any) -> None: """Turn off the light.""" - data: dict[str, bool | int] = {ATTR_ON: False} - + transition = None if ATTR_TRANSITION in kwargs: # WLED uses 100ms per unit, so 10 = 1 second. - data[ATTR_TRANSITION] = round(kwargs[ATTR_TRANSITION] * 10) + transition = round(kwargs[ATTR_TRANSITION] * 10) # If there is a single segment, control via the master if ( not self._keep_master_light and len(self.coordinator.data.state.segments) == 1 ): - await self.coordinator.wled.master(**data) # type: ignore[arg-type] + await self.coordinator.wled.master(on=False, transition=transition) return - data[ATTR_SEGMENT_ID] = self._segment - await self.coordinator.wled.segment(**data) # type: ignore[arg-type] + await self.coordinator.wled.segment( + segment_id=self._segment, on=False, transition=transition + ) @wled_exception_handler async def async_turn_on(self, **kwargs: Any) -> None: @@ -364,24 +359,14 @@ class WLEDSegmentLight(WLEDEntity, LightEntity): speed: int | None = None, ) -> None: """Set the effect of a WLED light.""" - data: dict[str, bool | int | str | None] = {ATTR_SEGMENT_ID: self._segment} - - if effect is not None: - data[ATTR_EFFECT] = effect - - if intensity is not None: - data[ATTR_INTENSITY] = intensity - - if palette is not None: - data[ATTR_PALETTE] = palette - - if reverse is not None: - data[ATTR_REVERSE] = reverse - - if speed is not None: - data[ATTR_SPEED] = speed - - await self.coordinator.wled.segment(**data) # type: ignore[arg-type] + await self.coordinator.wled.segment( + segment_id=self._segment, + effect=effect, + intensity=intensity, + palette=palette, + reverse=reverse, + speed=speed, + ) @wled_exception_handler async def async_preset( @@ -389,9 +374,7 @@ class WLEDSegmentLight(WLEDEntity, LightEntity): preset: int, ) -> None: """Set a WLED light to a saved preset.""" - data = {ATTR_PRESET: preset} - - await self.coordinator.wled.preset(**data) + await self.coordinator.wled.preset(preset=preset) @callback diff --git a/tests/components/wled/test_light.py b/tests/components/wled/test_light.py index 3ce0e167cb5..a4e3f712547 100644 --- a/tests/components/wled/test_light.py +++ b/tests/components/wled/test_light.py @@ -330,7 +330,7 @@ async def test_light_error( assert state.state == STATE_ON assert "Invalid response from API" in caplog.text assert mock_wled.segment.call_count == 1 - mock_wled.segment.assert_called_with(on=False, segment_id=0) + mock_wled.segment.assert_called_with(on=False, segment_id=0, transition=None) async def test_light_connection_error( @@ -355,7 +355,7 @@ async def test_light_connection_error( assert state.state == STATE_UNAVAILABLE assert "Error communicating with API" in caplog.text assert mock_wled.segment.call_count == 1 - mock_wled.segment.assert_called_with(on=False, segment_id=0) + mock_wled.segment.assert_called_with(on=False, segment_id=0, transition=None) @pytest.mark.parametrize("mock_wled", ["wled/rgbw.json"], indirect=True) @@ -425,6 +425,10 @@ async def test_effect_service( mock_wled.segment.assert_called_with( segment_id=0, effect=9, + intensity=None, + palette=None, + reverse=None, + speed=None, ) await hass.services.async_call( @@ -445,6 +449,8 @@ async def test_effect_service( reverse=True, segment_id=0, speed=100, + effect=None, + palette=None, ) await hass.services.async_call( @@ -467,6 +473,7 @@ async def test_effect_service( reverse=True, segment_id=0, speed=100, + intensity=None, ) await hass.services.async_call( @@ -487,6 +494,8 @@ async def test_effect_service( intensity=200, segment_id=0, speed=100, + palette=None, + reverse=None, ) await hass.services.async_call( @@ -507,6 +516,8 @@ async def test_effect_service( intensity=200, reverse=True, segment_id=0, + palette=None, + speed=None, ) @@ -532,7 +543,9 @@ async def test_effect_service_error( assert state.state == STATE_ON assert "Invalid response from API" in caplog.text assert mock_wled.segment.call_count == 1 - mock_wled.segment.assert_called_with(effect=9, segment_id=0) + mock_wled.segment.assert_called_with( + effect=9, segment_id=0, intensity=None, palette=None, reverse=None, speed=None + ) async def test_preset_service(