"""Support for Hilo switches.""" from homeassistant.components.switch import SwitchEntity from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.util import slugify from pyhilo.device.switch import Switch from . import Hilo from .const import DOMAIN, LOG, SWITCH_CLASSES from .entity import HiloEntity async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback ) -> None: """Set up Hilo switches based on a config entry.""" hilo = hass.data[DOMAIN][entry.entry_id] entities = [] for d in hilo.devices.all: if d.type in SWITCH_CLASSES: d._entity = HiloSwitch(hilo, d) entities.append(d._entity) async_add_entities(entities) class HiloSwitch(HiloEntity, SwitchEntity): """Representation of a Hilo Switch.""" def __init__(self, hilo: Hilo, device: Switch): """Initialize the switch.""" super().__init__(hilo, device=device, name=device.name) old_unique_id = f"{slugify(device.name)}-switch" self._attr_unique_id = f"{device.identifier.lower()}-switch" hilo.async_migrate_unique_id( old_unique_id, self._attr_unique_id, Platform.SWITCH ) hilo.async_migrate_unique_id( f"{slugify(device.identifier)}-switch", self._attr_unique_id, Platform.SWITCH, ) LOG.debug("Setting up Switch entity: %s", self._attr_name) @property def state(self): """Return the state of the switch.""" return self._device.state @property def icon(self): """Set the icon based on the switch state.""" if not self._device.available: return "mdi:lan-disconnect" if self.state == "on": return "mdi:power-plug" return "mdi:power-plug-off" @property def is_on(self): """Return true if the switch is on.""" return self._device.get_value("is_on") async def async_turn_off(self, **kwargs): """Turn the switch off.""" LOG.info("%s Turning off", self._device._tag) await self._device.set_attribute("is_on", False) self.async_schedule_update_ha_state(True) async def async_turn_on(self, **kwargs): """Turn the switch on.""" LOG.info("%s Turning on", self._device._tag) await self._device.set_attribute("is_on", True) self.async_schedule_update_ha_state(True)