Use correct default value for multi press buttons in the Matter integration (#141630)

* Respect the min 2 constraint for the switch MultiPressMax attribute

* Update test_event.py

* Update generic_switch_multi.json

* Fix issue and update tests
This commit is contained in:
Nick Pesce 2025-03-28 06:11:18 -04:00 committed by Franck Nijhof
parent 45e273897a
commit e4d6e20ebd
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
4 changed files with 21 additions and 9 deletions

View File

@ -69,7 +69,7 @@ class MatterEventEntity(MatterEntity, EventEntity):
max_presses_supported = self.get_matter_attribute_value(
clusters.Switch.Attributes.MultiPressMax
)
max_presses_supported = min(max_presses_supported or 1, 8)
max_presses_supported = min(max_presses_supported or 2, 8)
for i in range(max_presses_supported):
event_types.append(f"multi_press_{i + 1}") # noqa: PERF401
elif feature_map & SwitchFeature.kMomentarySwitch:

View File

@ -72,7 +72,6 @@
"1/59/0": 2,
"1/59/65533": 1,
"1/59/1": 0,
"1/59/2": 2,
"1/59/65531": [0, 1, 65528, 65529, 65531, 65532, 65533],
"1/59/65532": 30,
"1/59/65528": [],
@ -102,7 +101,7 @@
"2/59/0": 2,
"2/59/65533": 1,
"2/59/1": 0,
"2/59/2": 2,
"2/59/2": 4,
"2/59/65531": [0, 1, 65528, 65529, 65531, 65532, 65533],
"2/59/65532": 30,
"2/59/65528": [],

View File

@ -132,6 +132,8 @@
'event_types': list([
'multi_press_1',
'multi_press_2',
'multi_press_3',
'multi_press_4',
'long_press',
'long_release',
]),
@ -172,6 +174,8 @@
'event_types': list([
'multi_press_1',
'multi_press_2',
'multi_press_3',
'multi_press_4',
'long_press',
'long_release',
]),

View File

@ -36,7 +36,7 @@ async def test_generic_switch_node(
assert state
assert state.state == "unknown"
assert state.name == "Mock Generic Switch Button"
# check event_types from featuremap 30
# check event_types from featuremap 14 (0b1110)
assert state.attributes[ATTR_EVENT_TYPES] == [
"initial_press",
"short_release",
@ -76,7 +76,7 @@ async def test_generic_switch_multi_node(
assert state_button_1.state == "unknown"
# name should be 'DeviceName Button (1)' due to the label set to just '1'
assert state_button_1.name == "Mock Generic Switch Button (1)"
# check event_types from featuremap 14
# check event_types from featuremap 30 (0b11110) and MultiPressMax unset (default 2)
assert state_button_1.attributes[ATTR_EVENT_TYPES] == [
"multi_press_1",
"multi_press_2",
@ -84,11 +84,20 @@ async def test_generic_switch_multi_node(
"long_release",
]
# check button 2
state_button_1 = hass.states.get("event.mock_generic_switch_fancy_button")
assert state_button_1
assert state_button_1.state == "unknown"
state_button_2 = hass.states.get("event.mock_generic_switch_fancy_button")
assert state_button_2
assert state_button_2.state == "unknown"
# name should be 'DeviceName Fancy Button' due to the label set to 'Fancy Button'
assert state_button_1.name == "Mock Generic Switch Fancy Button"
assert state_button_2.name == "Mock Generic Switch Fancy Button"
# check event_types from featuremap 30 (0b11110) and MultiPressMax 4
assert state_button_2.attributes[ATTR_EVENT_TYPES] == [
"multi_press_1",
"multi_press_2",
"multi_press_3",
"multi_press_4",
"long_press",
"long_release",
]
# trigger firing a multi press event
await trigger_subscription_callback(