"""Plugwise Switch component for HomeAssistant.""" from __future__ import annotations from typing import Any from homeassistant.components.switch import ( SwitchDeviceClass, SwitchEntity, SwitchEntityDescription, ) from homeassistant.config_entries import ConfigEntry 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 PlugwiseDataUpdateCoordinator from .entity import PlugwiseEntity from .util import plugwise_command SWITCHES: tuple[SwitchEntityDescription, ...] = ( SwitchEntityDescription( key="dhw_cm_switch", name="DHW comfort mode", icon="mdi:water-plus", entity_category=EntityCategory.CONFIG, ), SwitchEntityDescription( key="lock", name="Lock", icon="mdi:lock", entity_category=EntityCategory.CONFIG, ), SwitchEntityDescription( key="relay", name="Relay", device_class=SwitchDeviceClass.SWITCH, ), ) async def async_setup_entry( hass: HomeAssistant, config_entry: ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up the Smile switches from a config entry.""" coordinator = hass.data[DOMAIN][config_entry.entry_id] entities: list[PlugwiseSwitchEntity] = [] for device_id, device in coordinator.data.devices.items(): for description in SWITCHES: if "switches" not in device or description.key not in device["switches"]: continue entities.append(PlugwiseSwitchEntity(coordinator, device_id, description)) async_add_entities(entities) class PlugwiseSwitchEntity(PlugwiseEntity, SwitchEntity): """Representation of a Plugwise plug.""" def __init__( self, coordinator: PlugwiseDataUpdateCoordinator, device_id: str, description: SwitchEntityDescription, ) -> None: """Set up the Plugwise API.""" super().__init__(coordinator, device_id) self.entity_description = description self._attr_unique_id = f"{device_id}-{description.key}" @property def is_on(self) -> bool | None: """Return True if entity is on.""" return self.device["switches"].get(self.entity_description.key) @plugwise_command async def async_turn_on(self, **kwargs: Any) -> None: """Turn the device on.""" await self.coordinator.api.set_switch_state( self._dev_id, self.device.get("members"), self.entity_description.key, "on", ) @plugwise_command async def async_turn_off(self, **kwargs: Any) -> None: """Turn the device off.""" await self.coordinator.api.set_switch_state( self._dev_id, self.device.get("members"), self.entity_description.key, "off", )