From 1109aba211bc32f3f75e319581a812c1c35660b8 Mon Sep 17 00:00:00 2001 From: Federico D'Amico <48856240+FedDam@users.noreply.github.com> Date: Tue, 27 Feb 2024 19:41:42 +0100 Subject: [PATCH] Add button platform to microBees (#111141) * add button platform to microBees * use list comprehension for async_add_entities * add a transaltion_key and fix list comprehension * add panic button * remove BUTTON_PRODUCT_IDS --- .coveragerc | 1 + homeassistant/components/microbees/button.py | 53 +++++++++++++++++++ homeassistant/components/microbees/const.py | 1 + homeassistant/components/microbees/icons.json | 8 +++ 4 files changed, 63 insertions(+) create mode 100644 homeassistant/components/microbees/button.py diff --git a/.coveragerc b/.coveragerc index 804e56ecf557d7..45b1acefbbae33 100644 --- a/.coveragerc +++ b/.coveragerc @@ -766,6 +766,7 @@ omit = homeassistant/components/microbees/__init__.py homeassistant/components/microbees/api.py homeassistant/components/microbees/application_credentials.py + homeassistant/components/microbees/button.py homeassistant/components/microbees/const.py homeassistant/components/microbees/coordinator.py homeassistant/components/microbees/entity.py diff --git a/homeassistant/components/microbees/button.py b/homeassistant/components/microbees/button.py new file mode 100644 index 00000000000000..cf82a60bfa436c --- /dev/null +++ b/homeassistant/components/microbees/button.py @@ -0,0 +1,53 @@ +"""Button integration microBees.""" +from typing import Any + +from homeassistant.components.button import ButtonEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from .const import DOMAIN +from .coordinator import MicroBeesUpdateCoordinator +from .entity import MicroBeesActuatorEntity + +BUTTON_TRANSLATIONS = {51: "button_gate", 91: "button_panic"} + + +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback +) -> None: + """Set up the microBees button platform.""" + coordinator: MicroBeesUpdateCoordinator = hass.data[DOMAIN][ + entry.entry_id + ].coordinator + async_add_entities( + MBButton(coordinator, bee_id, button.id) + for bee_id, bee in coordinator.data.bees.items() + if bee.productID in BUTTON_TRANSLATIONS + for button in bee.actuators + ) + + +class MBButton(MicroBeesActuatorEntity, ButtonEntity): + """Representation of a microBees button.""" + + def __init__( + self, + coordinator: MicroBeesUpdateCoordinator, + bee_id: int, + actuator_id: int, + ) -> None: + """Initialize the microBees button.""" + super().__init__(coordinator, bee_id, actuator_id) + self._attr_translation_key = BUTTON_TRANSLATIONS.get(self.bee.productID) + + @property + def name(self) -> str: + """Name of the switch.""" + return self.actuator.name + + async def async_press(self, **kwargs: Any) -> None: + """Turn on the button.""" + await self.coordinator.microbees.sendCommand( + self.actuator.id, self.actuator.configuration.actuator_timing * 1000 + ) diff --git a/homeassistant/components/microbees/const.py b/homeassistant/components/microbees/const.py index ab5a883034de4e..cf7644c8dfa84c 100644 --- a/homeassistant/components/microbees/const.py +++ b/homeassistant/components/microbees/const.py @@ -5,6 +5,7 @@ OAUTH2_AUTHORIZE = "https://dev.microbees.com/oauth/authorize" OAUTH2_TOKEN = "https://dev.microbees.com/oauth/token" PLATFORMS = [ + Platform.BUTTON, Platform.LIGHT, Platform.SENSOR, Platform.SWITCH, diff --git a/homeassistant/components/microbees/icons.json b/homeassistant/components/microbees/icons.json index 34878389cb89bc..b4c997c2576bba 100644 --- a/homeassistant/components/microbees/icons.json +++ b/homeassistant/components/microbees/icons.json @@ -7,6 +7,14 @@ "socket_it": { "default": "mdi:power-socket-it" } + }, + "button": { + "button_gate": { + "default": "mdi:gate" + }, + "button_panic": { + "default": "mdi:alert-octagram" + } } } }