homeassistant/custom_components/sonoff/button.py

44 lines
1.5 KiB
Python
Raw Normal View History

2025-01-10 21:08:35 -08:00
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",
)