Some lights only support hs, like the lidl christmas lights (#44059)

pull/44175/head
Robert Svensson 2020-12-09 19:02:44 +01:00 committed by Franck Nijhof
parent 9cfeb44b56
commit 0e871c3390
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
2 changed files with 64 additions and 4 deletions

View File

@ -114,7 +114,9 @@ class DeconzBaseLight(DeconzDevice, LightEntity):
if self._device.ct is not None:
self._features |= SUPPORT_COLOR_TEMP
if self._device.xy is not None:
if self._device.xy is not None or (
self._device.hue is not None and self._device.sat is not None
):
self._features |= SUPPORT_COLOR
if self._device.effect is not None:
@ -141,8 +143,10 @@ class DeconzBaseLight(DeconzDevice, LightEntity):
@property
def hs_color(self):
"""Return the hs color value."""
if self._device.colormode in ("xy", "hs") and self._device.xy:
return color_util.color_xy_to_hs(*self._device.xy)
if self._device.colormode in ("xy", "hs"):
if self._device.xy:
return color_util.color_xy_to_hs(*self._device.xy)
return (self._device.hue / 65535 * 360, self._device.sat / 255 * 100)
return None
@property
@ -163,7 +167,11 @@ class DeconzBaseLight(DeconzDevice, LightEntity):
data["ct"] = kwargs[ATTR_COLOR_TEMP]
if ATTR_HS_COLOR in kwargs:
data["xy"] = color_util.color_hs_to_xy(*kwargs[ATTR_HS_COLOR])
if self._device.xy is not None:
data["xy"] = color_util.color_hs_to_xy(*kwargs[ATTR_HS_COLOR])
else:
data["hue"] = int(kwargs[ATTR_HS_COLOR][0] / 360 * 65535)
data["sat"] = int(kwargs[ATTR_HS_COLOR][1] / 100 * 255)
if ATTR_BRIGHTNESS in kwargs:
data["bri"] = kwargs[ATTR_BRIGHTNESS]

View File

@ -353,3 +353,55 @@ async def test_configuration_tool(hass):
await setup_deconz_integration(hass, get_state_response=data)
assert len(hass.states.async_all()) == 0
async def test_lidl_christmas_light(hass):
"""Test that lights or groups entities are created."""
data = deepcopy(DECONZ_WEB_REQUEST)
data["lights"] = {
"0": {
"etag": "87a89542bf9b9d0aa8134919056844f8",
"hascolor": True,
"lastannounced": None,
"lastseen": "2020-12-05T22:57Z",
"manufacturername": "_TZE200_s8gkrkxk",
"modelid": "TS0601",
"name": "xmas light",
"state": {
"bri": 25,
"colormode": "hs",
"effect": "none",
"hue": 53691,
"on": True,
"reachable": True,
"sat": 141,
},
"swversion": None,
"type": "Color dimmable light",
"uniqueid": "58:8e:81:ff:fe:db:7b:be-01",
}
}
config_entry = await setup_deconz_integration(hass, get_state_response=data)
gateway = get_gateway_from_config_entry(hass, config_entry)
xmas_light_device = gateway.api.lights["0"]
assert len(hass.states.async_all()) == 1
with patch.object(xmas_light_device, "_request", return_value=True) as set_callback:
await hass.services.async_call(
LIGHT_DOMAIN,
SERVICE_TURN_ON,
{
ATTR_ENTITY_ID: "light.xmas_light",
ATTR_HS_COLOR: (20, 30),
},
blocking=True,
)
await hass.async_block_till_done()
set_callback.assert_called_with(
"put",
"/lights/0/state",
json={"on": True, "hue": 3640, "sat": 76},
)
assert hass.states.get("light.xmas_light")