"""Button platform for IronOS integration.""" from dataclasses import dataclass from enum import StrEnum from typing import override from pynecil import CharSetting from homeassistant.components.button import ButtonEntity, ButtonEntityDescription from homeassistant.const import EntityCategory from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from . import IronOSConfigEntry from .coordinator import IronOSCoordinators from .entity import IronOSBaseEntity PARALLEL_UPDATES = 0 @dataclass(frozen=True, kw_only=True) class IronOSButtonEntityDescription(ButtonEntityDescription): """Describes IronOS button entity.""" characteristic: CharSetting class IronOSButton(StrEnum): """Button controls for IronOS device.""" SETTINGS_RESET = "settings_reset" SETTINGS_SAVE = "settings_save" BUTTON_DESCRIPTIONS: tuple[IronOSButtonEntityDescription, ...] = ( IronOSButtonEntityDescription( key=IronOSButton.SETTINGS_RESET, translation_key=IronOSButton.SETTINGS_RESET, characteristic=CharSetting.SETTINGS_RESET, entity_registry_enabled_default=False, entity_category=EntityCategory.CONFIG, ), IronOSButtonEntityDescription( key=IronOSButton.SETTINGS_SAVE, translation_key=IronOSButton.SETTINGS_SAVE, characteristic=CharSetting.SETTINGS_SAVE, entity_category=EntityCategory.CONFIG, ), ) async def async_setup_entry( hass: HomeAssistant, entry: IronOSConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up button entities from a config entry.""" coordinators = entry.runtime_data async_add_entities( IronOSButtonEntity(coordinators, description) for description in BUTTON_DESCRIPTIONS ) class IronOSButtonEntity(IronOSBaseEntity, ButtonEntity): """Implementation of a IronOS button entity.""" entity_description: IronOSButtonEntityDescription def __init__( self, coordinators: IronOSCoordinators, entity_description: IronOSButtonEntityDescription, ) -> None: """Initialize the select entity.""" super().__init__(coordinators.live_data, entity_description) self.settings = coordinators.settings @override async def async_press(self) -> None: """Handle the button press.""" await self.settings.write(self.entity_description.characteristic, True)