78 lines
2.6 KiB
Python
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)
|