Files
home-assistant-alt/hass/settings/custom_components/xiaomi_gateway3/switch.py
T
2024-01-11 15:10:51 +03:00

48 lines
1.5 KiB
Python

from homeassistant.const import STATE_ON
from homeassistant.core import callback
from homeassistant.helpers.entity import ToggleEntity
from homeassistant.helpers.restore_state import RestoreEntity
from . import DOMAIN
from .core.converters import Converter
from .core.device import XDevice
from .core.entity import XEntity
from .core.gateway import XGateway
async def async_setup_entry(hass, config_entry, add_entities):
def setup(gateway: XGateway, device: XDevice, conv: Converter):
if conv.attr in device.entities:
entity: XEntity = device.entities[conv.attr]
entity.gw = gateway
else:
entity = XiaomiSwitch(gateway, device, conv)
add_entities([entity])
gw: XGateway = hass.data[DOMAIN][config_entry.entry_id]
gw.add_setup(__name__, setup)
# noinspection PyAbstractClass
class XiaomiSwitch(XEntity, ToggleEntity, RestoreEntity):
_attr_is_on: bool = None
@callback
def async_set_state(self, data: dict):
"""Handle state update from gateway."""
if self.attr in data:
self._attr_is_on = data[self.attr]
@callback
def async_restore_last_state(self, state: str, attrs: dict):
self._attr_is_on = state == STATE_ON
async def async_turn_on(self):
await self.device_send({self.attr: True})
async def async_turn_off(self):
await self.device_send({self.attr: False})
async def async_update(self):
await self.device_read(self.subscribed_attrs)