From c5d62ccc7edf99b8da58a3a0f3057c153fee4bf8 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 23 Dec 2021 00:23:57 +0100 Subject: [PATCH] Add input_button support to HomeKit (#62590) --- homeassistant/components/homekit/accessories.py | 1 + homeassistant/components/homekit/config_flow.py | 1 + homeassistant/components/homekit/type_switches.py | 6 ++++-- tests/components/homekit/test_get_accessories.py | 1 + tests/components/homekit/test_type_switches.py | 11 +++++++---- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/homekit/accessories.py b/homeassistant/components/homekit/accessories.py index 6af4b4a8d89..23f546910f1 100644 --- a/homeassistant/components/homekit/accessories.py +++ b/homeassistant/components/homekit/accessories.py @@ -198,6 +198,7 @@ def get_accessory(hass, driver, state, aid, config): # noqa: C901 "automation", "button", "input_boolean", + "input_button", "remote", "scene", "script", diff --git a/homeassistant/components/homekit/config_flow.py b/homeassistant/components/homekit/config_flow.py index f47ecdf5dbb..8d2f17a3878 100644 --- a/homeassistant/components/homekit/config_flow.py +++ b/homeassistant/components/homekit/config_flow.py @@ -85,6 +85,7 @@ SUPPORTED_DOMAINS = [ "fan", "humidifier", "input_boolean", + "input_button", "input_select", "light", "lock", diff --git a/homeassistant/components/homekit/type_switches.py b/homeassistant/components/homekit/type_switches.py index ec6813a82f1..cd0d4243726 100644 --- a/homeassistant/components/homekit/type_switches.py +++ b/homeassistant/components/homekit/type_switches.py @@ -12,7 +12,7 @@ from pyhap.const import ( CATEGORY_SWITCH, ) -from homeassistant.components import button +from homeassistant.components import button, input_button from homeassistant.components.input_select import ATTR_OPTIONS, SERVICE_SELECT_OPTION from homeassistant.components.switch import DOMAIN from homeassistant.components.vacuum import ( @@ -70,7 +70,7 @@ VALVE_TYPE: dict[str, ValveInfo] = { } -ACTIVATE_ONLY_SWITCH_DOMAINS = {"button", "scene", "script"} +ACTIVATE_ONLY_SWITCH_DOMAINS = {"button", "input_button", "scene", "script"} ACTIVATE_ONLY_RESET_SECONDS = 10 @@ -152,6 +152,8 @@ class Switch(HomeAccessory): params = {} elif self._domain == button.DOMAIN: service = button.SERVICE_PRESS + elif self._domain == input_button.DOMAIN: + service = input_button.SERVICE_PRESS else: service = SERVICE_TURN_ON if value else SERVICE_TURN_OFF diff --git a/tests/components/homekit/test_get_accessories.py b/tests/components/homekit/test_get_accessories.py index 0f843c387ab..31f7b0f3bcc 100644 --- a/tests/components/homekit/test_get_accessories.py +++ b/tests/components/homekit/test_get_accessories.py @@ -272,6 +272,7 @@ def test_type_sensors(type_name, entity_id, state, attrs): ("Switch", "automation.test", "on", {}, {}), ("Switch", "button.test", STATE_UNKNOWN, {}, {}), ("Switch", "input_boolean.test", "on", {}, {}), + ("Switch", "input_button.test", STATE_UNKNOWN, {}, {}), ("Switch", "remote.test", "on", {}, {}), ("Switch", "scene.test", "on", {}, {}), ("Switch", "script.test", "on", {}, {}), diff --git a/tests/components/homekit/test_type_switches.py b/tests/components/homekit/test_type_switches.py index 54eae42ca1d..c1340e1d34e 100644 --- a/tests/components/homekit/test_type_switches.py +++ b/tests/components/homekit/test_type_switches.py @@ -451,10 +451,13 @@ async def test_input_select_switch(hass, hk_driver, events, domain): assert acc.select_chars["option3"].value is False -async def test_button_switch(hass, hk_driver, events): - """Test switch accessory from a button entity.""" - domain = "button" - entity_id = "button.test" +@pytest.mark.parametrize( + "domain", + ["button", "input_button"], +) +async def test_button_switch(hass, hk_driver, events, domain): + """Test switch accessory from a (input) button entity.""" + entity_id = f"{domain}.test" hass.states.async_set(entity_id, None) await hass.async_block_till_done()