"""Support for Magic home button.""" from __future__ import annotations from flux_led.aio import AIOWifiLedBulb from flux_led.protocol import RemoteConfig from homeassistant import config_entries from homeassistant.components.button import ( ButtonDeviceClass, ButtonEntity, ButtonEntityDescription, ) from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback from .const import DOMAIN from .coordinator import FluxLedUpdateCoordinator from .entity import FluxBaseEntity _RESTART_KEY = "restart" _UNPAIR_REMOTES_KEY = "unpair_remotes" RESTART_BUTTON_DESCRIPTION = ButtonEntityDescription( key=_RESTART_KEY, name="Restart", device_class=ButtonDeviceClass.RESTART ) UNPAIR_REMOTES_DESCRIPTION = ButtonEntityDescription( key=_UNPAIR_REMOTES_KEY, name="Unpair Remotes", icon="mdi:remote-off" ) async def async_setup_entry( hass: HomeAssistant, entry: config_entries.ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Magic Home button based on a config entry.""" coordinator: FluxLedUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] device = coordinator.device entities: list[FluxButton] = [ FluxButton(coordinator.device, entry, RESTART_BUTTON_DESCRIPTION) ] if device.paired_remotes is not None: entities.append( FluxButton(coordinator.device, entry, UNPAIR_REMOTES_DESCRIPTION) ) async_add_entities(entities) class FluxButton(FluxBaseEntity, ButtonEntity): """Representation of a Flux button.""" _attr_entity_category = EntityCategory.CONFIG def __init__( self, device: AIOWifiLedBulb, entry: config_entries.ConfigEntry, description: ButtonEntityDescription, ) -> None: """Initialize the button.""" self.entity_description = description super().__init__(device, entry) self._attr_name = f"{entry.data.get(CONF_NAME, entry.title)} {description.name}" base_unique_id = entry.unique_id or entry.entry_id self._attr_unique_id = f"{base_unique_id}_{description.key}" async def async_press(self) -> None: """Send out a command.""" if self.entity_description.key == _RESTART_KEY: await self._device.async_reboot() else: await self._device.async_unpair_remotes() await self._device.async_config_remotes(RemoteConfig.OPEN)