43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
from homeassistant.components.button import ButtonEntity
|
|
from homeassistant.components.script import ATTR_LAST_TRIGGERED
|
|
from homeassistant.helpers.entity import DeviceInfo
|
|
|
|
from .core.const import DOMAIN
|
|
from .core.ewelink import SIGNAL_ADD_ENTITIES, XRegistry
|
|
|
|
PARALLEL_UPDATES = 0 # fix entity_platform parallel_updates Semaphore
|
|
|
|
|
|
async def async_setup_entry(hass, config_entry, add_entities):
|
|
ewelink: XRegistry = hass.data[DOMAIN][config_entry.entry_id]
|
|
ewelink.dispatcher_connect(
|
|
SIGNAL_ADD_ENTITIES,
|
|
lambda x: add_entities([e for e in x if isinstance(e, ButtonEntity)]),
|
|
)
|
|
|
|
|
|
# supported in Hass v2021.12
|
|
# noinspection PyAbstractClass
|
|
class XRemoteButton(ButtonEntity):
|
|
def __init__(self, ewelink: XRegistry, bridge: dict, child: dict):
|
|
self.ewelink = ewelink
|
|
self.bridge = bridge
|
|
self.channel = child["channel"]
|
|
|
|
self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, bridge["deviceid"])})
|
|
self._attr_extra_state_attributes = {}
|
|
self._attr_name = child["name"]
|
|
self._attr_unique_id = f"{bridge['deviceid']}_{self.channel}"
|
|
|
|
self.entity_id = DOMAIN + "." + self._attr_unique_id
|
|
|
|
def internal_update(self, ts: str):
|
|
self._attr_extra_state_attributes = {ATTR_LAST_TRIGGERED: ts}
|
|
self._async_write_ha_state()
|
|
|
|
async def async_press(self):
|
|
await self.ewelink.send(
|
|
self.bridge,
|
|
{"cmd": "transmit", "rfChl": int(self.channel)},
|
|
cmd_lan="transmit",
|
|
)
|