diff --git a/.coveragerc b/.coveragerc index 804e56ecf557..45b1acefbbae 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 000000000000..cf82a60bfa43 --- /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 ab5a883034de..cf7644c8dfa8 100644 --- a/homeassistant/components/microbees/const.py +++ b/homeassistant/components/microbees/const.py @@ -5,6 +5,7 @@ DOMAIN = "microbees" 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 34878389cb89..b4c997c2576b 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" + } } } }