core/homeassistant/components/knx/switch.py

51 lines
1.5 KiB
Python

"""Support for KNX/IP switches."""
from __future__ import annotations
from typing import Any, Callable, Iterable
from xknx.devices import Switch as XknxSwitch
from homeassistant.components.switch import SwitchEntity
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import Entity
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from .const import DOMAIN
from .knx_entity import KnxEntity
async def async_setup_platform(
hass: HomeAssistant,
config: ConfigType,
async_add_entities: Callable[[Iterable[Entity]], None],
discovery_info: DiscoveryInfoType | None = None,
) -> None:
"""Set up switch(es) for KNX platform."""
entities = []
for device in hass.data[DOMAIN].xknx.devices:
if isinstance(device, XknxSwitch):
entities.append(KNXSwitch(device))
async_add_entities(entities)
class KNXSwitch(KnxEntity, SwitchEntity):
"""Representation of a KNX switch."""
def __init__(self, device: XknxSwitch) -> None:
"""Initialize of KNX switch."""
self._device: XknxSwitch
super().__init__(device)
@property
def is_on(self) -> bool:
"""Return true if device is on."""
return bool(self._device.state)
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the device on."""
await self._device.set_on()
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the device off."""
await self._device.set_off()