Select onoff and brightness color modes last for light groups (#51054)

pull/51081/head
Erik Montnemery 2021-05-25 17:49:24 +02:00 committed by GitHub
parent c0234df136
commit d2804433d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 82 additions and 1 deletions

View File

@ -27,6 +27,8 @@ from homeassistant.components.light import (
ATTR_TRANSITION,
ATTR_WHITE_VALUE,
ATTR_XY_COLOR,
COLOR_MODE_BRIGHTNESS,
COLOR_MODE_ONOFF,
PLATFORM_SCHEMA,
SUPPORT_EFFECT,
SUPPORT_FLASH,
@ -386,8 +388,12 @@ class LightGroup(GroupEntity, light.LightEntity):
self._color_mode = None
all_color_modes = list(_find_state_attributes(on_states, ATTR_COLOR_MODE))
if all_color_modes:
# Report the most common color mode.
# Report the most common color mode, select brightness and onoff last
color_mode_count = Counter(itertools.chain(all_color_modes))
if COLOR_MODE_ONOFF in color_mode_count:
color_mode_count[COLOR_MODE_ONOFF] = -1
if COLOR_MODE_BRIGHTNESS in color_mode_count:
color_mode_count[COLOR_MODE_BRIGHTNESS] = 0
self._color_mode = color_mode_count.most_common(1)[0][0]
self._supported_color_modes = None

View File

@ -26,6 +26,7 @@ from homeassistant.components.light import (
COLOR_MODE_BRIGHTNESS,
COLOR_MODE_COLOR_TEMP,
COLOR_MODE_HS,
COLOR_MODE_ONOFF,
COLOR_MODE_RGBW,
COLOR_MODE_RGBWW,
DOMAIN as LIGHT_DOMAIN,
@ -856,6 +857,80 @@ async def test_color_mode(hass, enable_custom_integrations):
assert state.attributes[ATTR_COLOR_MODE] == COLOR_MODE_HS
async def test_color_mode2(hass, enable_custom_integrations):
"""Test onoff color_mode and brightness are given lowest priority."""
platform = getattr(hass.components, "test.light")
platform.init(empty=True)
platform.ENTITIES.append(platform.MockLight("test1", STATE_ON))
platform.ENTITIES.append(platform.MockLight("test2", STATE_ON))
platform.ENTITIES.append(platform.MockLight("test3", STATE_ON))
platform.ENTITIES.append(platform.MockLight("test4", STATE_ON))
platform.ENTITIES.append(platform.MockLight("test5", STATE_ON))
platform.ENTITIES.append(platform.MockLight("test6", STATE_ON))
entity = platform.ENTITIES[0]
entity.supported_color_modes = {COLOR_MODE_COLOR_TEMP}
entity.color_mode = COLOR_MODE_COLOR_TEMP
entity = platform.ENTITIES[1]
entity.supported_color_modes = {COLOR_MODE_BRIGHTNESS}
entity.color_mode = COLOR_MODE_BRIGHTNESS
entity = platform.ENTITIES[2]
entity.supported_color_modes = {COLOR_MODE_BRIGHTNESS}
entity.color_mode = COLOR_MODE_BRIGHTNESS
entity = platform.ENTITIES[3]
entity.supported_color_modes = {COLOR_MODE_ONOFF}
entity.color_mode = COLOR_MODE_ONOFF
entity = platform.ENTITIES[4]
entity.supported_color_modes = {COLOR_MODE_ONOFF}
entity.color_mode = COLOR_MODE_ONOFF
entity = platform.ENTITIES[5]
entity.supported_color_modes = {COLOR_MODE_ONOFF}
entity.color_mode = COLOR_MODE_ONOFF
assert await async_setup_component(
hass,
LIGHT_DOMAIN,
{
LIGHT_DOMAIN: [
{"platform": "test"},
{
"platform": DOMAIN,
"entities": [
"light.test1",
"light.test2",
"light.test3",
"light.test4",
"light.test5",
"light.test6",
],
},
]
},
)
await hass.async_block_till_done()
await hass.async_start()
await hass.async_block_till_done()
state = hass.states.get("light.light_group")
assert state.attributes[ATTR_COLOR_MODE] == COLOR_MODE_COLOR_TEMP
await hass.services.async_call(
"light",
"turn_off",
{"entity_id": ["light.test1"]},
blocking=True,
)
await hass.async_block_till_done()
state = hass.states.get("light.light_group")
assert state.attributes[ATTR_COLOR_MODE] == COLOR_MODE_BRIGHTNESS
async def test_supported_features(hass):
"""Test supported features reporting."""
await async_setup_component(