Fix setting brightness to 0 in HomeKit when the On characteristic is not sent (#129201)

pull/127762/head^2
J. Nick Koston 2024-10-26 03:29:15 -10:00 committed by GitHub
parent 2c8fc67ab1
commit 3b458738e0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 2 deletions

View File

@ -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]

View File

@ -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(