From d2537dacc66b02aac83fed2ed166205c8f0bfa9b Mon Sep 17 00:00:00 2001 From: shbatm Date: Sat, 7 Jan 2023 13:40:34 -0600 Subject: [PATCH] Add beep button entity to ISY994 Insteon devices (#85367) Co-authored-by: J. Nick Koston --- .coveragerc | 1 + homeassistant/components/isy994/button.py | 30 +++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/.coveragerc b/.coveragerc index eb391a32754..60920bc831b 100644 --- a/.coveragerc +++ b/.coveragerc @@ -596,6 +596,7 @@ omit = homeassistant/components/iss/sensor.py homeassistant/components/isy994/__init__.py homeassistant/components/isy994/binary_sensor.py + homeassistant/components/isy994/button.py homeassistant/components/isy994/climate.py homeassistant/components/isy994/cover.py homeassistant/components/isy994/entity.py diff --git a/homeassistant/components/isy994/button.py b/homeassistant/components/isy994/button.py index 81f914e1e03..0325c501d63 100644 --- a/homeassistant/components/isy994/button.py +++ b/homeassistant/components/isy994/button.py @@ -2,6 +2,7 @@ from __future__ import annotations from pyisy import ISY +from pyisy.constants import PROTO_INSTEON from pyisy.nodes import Node from homeassistant.components.button import ButtonEntity @@ -23,9 +24,11 @@ async def async_setup_entry( hass_isy_data = hass.data[ISY994_DOMAIN][config_entry.entry_id] isy: ISY = hass_isy_data[ISY994_ISY] uuid = isy.configuration["uuid"] - entities: list[ISYNodeQueryButtonEntity] = [] + entities: list[ISYNodeQueryButtonEntity | ISYNodeBeepButtonEntity] = [] for node in hass_isy_data[ISY994_NODES][Platform.BUTTON]: entities.append(ISYNodeQueryButtonEntity(node, f"{uuid}_{node.address}")) + if node.protocol == PROTO_INSTEON: + entities.append(ISYNodeBeepButtonEntity(node, f"{uuid}_{node.address}")) # Add entity to query full system entities.append(ISYNodeQueryButtonEntity(isy, uuid)) @@ -53,4 +56,27 @@ class ISYNodeQueryButtonEntity(ButtonEntity): async def async_press(self) -> None: """Press the button.""" - self.hass.async_create_task(self._node.query()) + await self._node.query() + + +class ISYNodeBeepButtonEntity(ButtonEntity): + """Representation of a device beep button entity.""" + + _attr_should_poll = False + _attr_entity_category = EntityCategory.DIAGNOSTIC + _attr_has_entity_name = True + + def __init__(self, node: Node, base_unique_id: str) -> None: + """Initialize a beep Insteon device button entity.""" + self._node = node + + # Entity class attributes + self._attr_name = "Beep" + self._attr_unique_id = f"{base_unique_id}_beep" + self._attr_device_info = DeviceInfo( + identifiers={(ISY994_DOMAIN, base_unique_id)} + ) + + async def async_press(self) -> None: + """Press the button.""" + await self._node.beep()