Matter SmokeCoAlarm SelfTestRequest (#150497)

This commit is contained in:
Ludovic BOUÉ
2025-08-12 19:10:55 +02:00
committed by GitHub
parent c1e5a7efc9
commit 2ebe0a929e
5 changed files with 93 additions and 0 deletions

View File

@@ -143,4 +143,16 @@ DISCOVERY_SCHEMAS = [
value_contains=clusters.ActivatedCarbonFilterMonitoring.Commands.ResetCondition.command_id, value_contains=clusters.ActivatedCarbonFilterMonitoring.Commands.ResetCondition.command_id,
allow_multi=True, allow_multi=True,
), ),
MatterDiscoverySchema(
platform=Platform.BUTTON,
entity_description=MatterButtonEntityDescription(
key="SmokeCoAlarmSelfTestRequest",
translation_key="self_test_request",
entity_category=EntityCategory.DIAGNOSTIC,
command=clusters.SmokeCoAlarm.Commands.SelfTestRequest,
),
entity_class=MatterCommandButton,
required_attributes=(clusters.SmokeCoAlarm.Attributes.AcceptedCommandList,),
value_contains=clusters.SmokeCoAlarm.Commands.SelfTestRequest.command_id,
),
] ]

View File

@@ -17,6 +17,9 @@
}, },
"stop": { "stop": {
"default": "mdi:stop" "default": "mdi:stop"
},
"self_test_request": {
"default": "mdi:refresh-auto"
} }
}, },
"fan": { "fan": {

View File

@@ -111,6 +111,9 @@
}, },
"reset_filter_condition": { "reset_filter_condition": {
"name": "Reset filter condition" "name": "Reset filter condition"
},
"self_test_request": {
"name": "Self-test"
} }
}, },
"climate": { "climate": {

View File

@@ -2038,6 +2038,54 @@
'state': 'unknown', 'state': 'unknown',
}) })
# --- # ---
# name: test_buttons[smoke_detector][button.smoke_sensor_self_test-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'button.smoke_sensor_self_test',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Self-test',
'platform': 'matter',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'self_test_request',
'unique_id': '00000000000004D2-0000000000000001-MatterNodeDevice-1-SmokeCoAlarmSelfTestRequest-92-65529',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[smoke_detector][button.smoke_sensor_self_test-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'Smoke sensor Self-test',
}),
'context': <ANY>,
'entity_id': 'button.smoke_sensor_self_test',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[switch_unit][button.mock_switchunit_identify-entry] # name: test_buttons[switch_unit][button.mock_switchunit_identify-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({

View File

@@ -80,3 +80,30 @@ async def test_operational_state_buttons(
endpoint_id=1, endpoint_id=1,
command=clusters.OperationalState.Commands.Pause(), command=clusters.OperationalState.Commands.Pause(),
) )
@pytest.mark.parametrize("node_fixture", ["smoke_detector"])
async def test_smoke_detector_self_test(
hass: HomeAssistant,
matter_client: MagicMock,
matter_node: MatterNode,
) -> None:
"""Test button entity is created for a Matter SmokeCoAlarm Cluster."""
state = hass.states.get("button.smoke_sensor_self_test")
assert state
assert state.attributes["friendly_name"] == "Smoke sensor Self-test"
# test press action
await hass.services.async_call(
"button",
"press",
{
"entity_id": "button.smoke_sensor_self_test",
},
blocking=True,
)
assert matter_client.send_device_command.call_count == 1
assert matter_client.send_device_command.call_args == call(
node_id=matter_node.node_id,
endpoint_id=1,
command=clusters.SmokeCoAlarm.Commands.SelfTestRequest(),
)