diff --git a/homeassistant/components/group/light.py b/homeassistant/components/group/light.py index 4357085ef8a..9567735c9eb 100644 --- a/homeassistant/components/group/light.py +++ b/homeassistant/components/group/light.py @@ -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 diff --git a/tests/components/group/test_light.py b/tests/components/group/test_light.py index 14489450610..06ad1b1101b 100644 --- a/tests/components/group/test_light.py +++ b/tests/components/group/test_light.py @@ -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(