Files
HomeAssistantVS/custom_components/hilo/switch.py
T
2026-06-11 11:50:50 -04:00

78 lines
2.6 KiB
Python

"""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)