Fix setting brightness to 0 in HomeKit when the On characteristic is not sent (#129201)
parent
2c8fc67ab1
commit
3b458738e0
|
@ -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]
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in New Issue