diff --git a/homeassistant/components/homekit/type_lights.py b/homeassistant/components/homekit/type_lights.py index 6b57a03153c..cde80178c5e 100644 --- a/homeassistant/components/homekit/type_lights.py +++ b/homeassistant/components/homekit/type_lights.py @@ -171,8 +171,9 @@ class Light(HomeAccessory): events = [] service = SERVICE_TURN_ON params: dict[str, Any] = {ATTR_ENTITY_ID: self.entity_id} + has_on = CHAR_ON in char_values - if CHAR_ON in char_values: + if has_on: if not char_values[CHAR_ON]: service = SERVICE_TURN_OFF events.append(f"Set state to {char_values[CHAR_ON]}") @@ -180,7 +181,10 @@ class Light(HomeAccessory): brightness_pct = None if CHAR_BRIGHTNESS in char_values: if char_values[CHAR_BRIGHTNESS] == 0: - events[-1] = "Set state to 0" + if has_on: + events[-1] = "Set state to 0" + else: + events.append("Set state to 0") service = SERVICE_TURN_OFF else: brightness_pct = char_values[CHAR_BRIGHTNESS] diff --git a/tests/components/homekit/test_type_lights.py b/tests/components/homekit/test_type_lights.py index d365165aca4..a45e4988c36 100644 --- a/tests/components/homekit/test_type_lights.py +++ b/tests/components/homekit/test_type_lights.py @@ -226,6 +226,24 @@ async def test_light_brightness( assert len(events) == 3 assert events[-1].data[ATTR_VALUE] == f"Set state to 0, brightness at 0{PERCENTAGE}" + hk_driver.set_characteristics( + { + HAP_REPR_CHARS: [ + { + HAP_REPR_AID: acc.aid, + HAP_REPR_IID: char_brightness_iid, + HAP_REPR_VALUE: 0, + }, + ] + }, + "mock_addr", + ) + await _wait_for_light_coalesce(hass) + assert call_turn_off + assert call_turn_off[0].data[ATTR_ENTITY_ID] == entity_id + assert len(events) == 4 + assert events[-1].data[ATTR_VALUE] == f"Set state to 0, brightness at 0{PERCENTAGE}" + # 0 is a special case for homekit, see "Handle Brightness" # in update_state hass.states.async_set(