1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-31 20:54:23 +01:00
Files
2026-04-30 21:14:48 +02:00

94 lines
2.8 KiB
Python

"""Button platform for Sensibo integration."""
from dataclasses import dataclass
from typing import Any
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 SensiboConfigEntry
from .coordinator import SensiboDataUpdateCoordinator
from .entity import SensiboDeviceBaseEntity, async_handle_api_call
PARALLEL_UPDATES = 0
@dataclass(frozen=True, kw_only=True)
class SensiboButtonEntityDescription(ButtonEntityDescription):
"""Class describing Sensibo Button entities."""
data_key: str
DEVICE_BUTTON_TYPES = SensiboButtonEntityDescription(
key="reset_filter",
translation_key="reset_filter",
entity_category=EntityCategory.CONFIG,
data_key="filter_clean",
)
async def async_setup_entry(
hass: HomeAssistant,
entry: SensiboConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up Sensibo button platform."""
coordinator = entry.runtime_data
added_devices: set[str] = set()
def _add_remove_devices() -> None:
"""Handle additions of devices and sensors."""
nonlocal added_devices
new_devices, _, new_added_devices = coordinator.get_devices(added_devices)
added_devices = new_added_devices
if new_devices:
async_add_entities(
SensiboDeviceButton(coordinator, device_id, DEVICE_BUTTON_TYPES)
for device_id in coordinator.data.parsed
if device_id in new_devices
)
entry.async_on_unload(coordinator.async_add_listener(_add_remove_devices))
_add_remove_devices()
class SensiboDeviceButton(SensiboDeviceBaseEntity, ButtonEntity):
"""Representation of a Sensibo Device button."""
entity_description: SensiboButtonEntityDescription
def __init__(
self,
coordinator: SensiboDataUpdateCoordinator,
device_id: str,
entity_description: SensiboButtonEntityDescription,
) -> None:
"""Initiate Sensibo Device Button."""
super().__init__(
coordinator,
device_id,
)
self.entity_description = entity_description
self._attr_unique_id = f"{device_id}-{entity_description.key}"
async def async_press(self) -> None:
"""Press the button."""
await self.async_send_api_call(
key=self.entity_description.data_key,
value=False,
)
@async_handle_api_call
async def async_send_api_call(self, key: str, value: Any) -> bool:
"""Make service call to api."""
result = await self._client.async_reset_filter(
self._device_id,
)
return bool(result.get("status") == "success")