diff --git a/homeassistant/components/volvo/button.py b/homeassistant/components/volvo/button.py index b1f0b067d7b401..2278b85bcab31e 100644 --- a/homeassistant/components/volvo/button.py +++ b/homeassistant/components/volvo/button.py @@ -64,6 +64,11 @@ class VolvoButtonDescription(VolvoEntityDescription, ButtonEntityDescription): api_command="honk-flash", required_command_key="HONK_AND_FLASH", ), + VolvoButtonDescription( + key="lock_reduced_guard", + api_command="lock-reduced-guard", + required_command_key="LOCK_REDUCED_GUARD", + ), ) diff --git a/homeassistant/components/volvo/icons.json b/homeassistant/components/volvo/icons.json index 8cccd7079acfc7..9e41dab45ca175 100644 --- a/homeassistant/components/volvo/icons.json +++ b/homeassistant/components/volvo/icons.json @@ -281,6 +281,9 @@ }, "honk_flash": { "default": "mdi:alarm-light" + }, + "lock_reduced_guard": { + "default": "mdi:lock-minus" } }, "device_tracker": { diff --git a/homeassistant/components/volvo/strings.json b/homeassistant/components/volvo/strings.json index 61d3fc89ced5d6..4f63130fbf0ca2 100644 --- a/homeassistant/components/volvo/strings.json +++ b/homeassistant/components/volvo/strings.json @@ -208,6 +208,9 @@ }, "honk_flash": { "name": "Honk & flash" + }, + "lock_reduced_guard": { + "name": "Lock reduced guard" } }, "device_tracker": { diff --git a/tests/components/volvo/snapshots/test_button.ambr b/tests/components/volvo/snapshots/test_button.ambr index d67fc12f2ce265..1b4a12247cd72c 100644 --- a/tests/components/volvo/snapshots/test_button.ambr +++ b/tests/components/volvo/snapshots/test_button.ambr @@ -143,6 +143,54 @@ 'state': 'unknown', }) # --- +# name: test_button[ex30_2024][button.volvo_ex30_lock_reduced_guard-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'button', + 'entity_category': None, + 'entity_id': 'button.volvo_ex30_lock_reduced_guard', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Lock reduced guard', + 'platform': 'volvo', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'lock_reduced_guard', + 'unique_id': 'yv1abcdefg1234567_lock_reduced_guard', + 'unit_of_measurement': None, + }) +# --- +# name: test_button[ex30_2024][button.volvo_ex30_lock_reduced_guard-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Volvo EX30 Lock reduced guard', + }), + 'context': , + 'entity_id': 'button.volvo_ex30_lock_reduced_guard', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_button[ex30_2024][button.volvo_ex30_start_climatization-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -383,6 +431,54 @@ 'state': 'unknown', }) # --- +# name: test_button[s90_diesel_2018][button.volvo_s90_lock_reduced_guard-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'button', + 'entity_category': None, + 'entity_id': 'button.volvo_s90_lock_reduced_guard', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Lock reduced guard', + 'platform': 'volvo', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'lock_reduced_guard', + 'unique_id': 'yv1abcdefg1234567_lock_reduced_guard', + 'unit_of_measurement': None, + }) +# --- +# name: test_button[s90_diesel_2018][button.volvo_s90_lock_reduced_guard-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Volvo S90 Lock reduced guard', + }), + 'context': , + 'entity_id': 'button.volvo_s90_lock_reduced_guard', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_button[s90_diesel_2018][button.volvo_s90_start_climatization-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -623,6 +719,54 @@ 'state': 'unknown', }) # --- +# name: test_button[xc40_electric_2024][button.volvo_xc40_lock_reduced_guard-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'button', + 'entity_category': None, + 'entity_id': 'button.volvo_xc40_lock_reduced_guard', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Lock reduced guard', + 'platform': 'volvo', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'lock_reduced_guard', + 'unique_id': 'yv1abcdefg1234567_lock_reduced_guard', + 'unit_of_measurement': None, + }) +# --- +# name: test_button[xc40_electric_2024][button.volvo_xc40_lock_reduced_guard-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Volvo XC40 Lock reduced guard', + }), + 'context': , + 'entity_id': 'button.volvo_xc40_lock_reduced_guard', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_button[xc40_electric_2024][button.volvo_xc40_start_climatization-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -863,6 +1007,54 @@ 'state': 'unknown', }) # --- +# name: test_button[xc90_petrol_2019][button.volvo_xc90_lock_reduced_guard-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'button', + 'entity_category': None, + 'entity_id': 'button.volvo_xc90_lock_reduced_guard', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Lock reduced guard', + 'platform': 'volvo', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'lock_reduced_guard', + 'unique_id': 'yv1abcdefg1234567_lock_reduced_guard', + 'unit_of_measurement': None, + }) +# --- +# name: test_button[xc90_petrol_2019][button.volvo_xc90_lock_reduced_guard-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Volvo XC90 Lock reduced guard', + }), + 'context': , + 'entity_id': 'button.volvo_xc90_lock_reduced_guard', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_button[xc90_petrol_2019][button.volvo_xc90_start_climatization-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ diff --git a/tests/components/volvo/test_button.py b/tests/components/volvo/test_button.py index b22ac4077ac067..f86c718460c668 100644 --- a/tests/components/volvo/test_button.py +++ b/tests/components/volvo/test_button.py @@ -43,7 +43,14 @@ async def test_button( @pytest.mark.usefixtures("full_model") @pytest.mark.parametrize( "command", - ["start_climatization", "stop_climatization", "flash", "honk", "honk_flash"], + [ + "start_climatization", + "stop_climatization", + "flash", + "honk", + "honk_flash", + "lock_reduced_guard", + ], ) async def test_button_press( hass: HomeAssistant, @@ -72,7 +79,14 @@ async def test_button_press( @pytest.mark.usefixtures("full_model") @pytest.mark.parametrize( "command", - ["start_climatization", "stop_climatization", "flash", "honk", "honk_flash"], + [ + "start_climatization", + "stop_climatization", + "flash", + "honk", + "honk_flash", + "lock_reduced_guard", + ], ) async def test_button_press_error( hass: HomeAssistant, @@ -99,7 +113,14 @@ async def test_button_press_error( @pytest.mark.usefixtures("full_model") @pytest.mark.parametrize( "command", - ["start_climatization", "stop_climatization", "flash", "honk", "honk_flash"], + [ + "start_climatization", + "stop_climatization", + "flash", + "honk", + "honk_flash", + "lock_reduced_guard", + ], ) async def test_button_press_failure( hass: HomeAssistant,