1 """Support for RFXtrx devices."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from typing
import cast
8 import RFXtrx
as rfxtrxmod
15 from .
import DeviceTuple
16 from .const
import ATTR_EVENT, COMMAND_GROUP_LIST, DATA_RFXOBJECT, DOMAIN, SIGNAL_EVENT
20 device_tuple: DeviceTuple,
21 ) -> set[tuple[str, str]]:
22 """Calculate the device identifier from a device tuple."""
24 return {(DOMAIN, *device_tuple)}
28 """Represents a Rfxtrx device.
30 Contains the common logic for Rfxtrx lights and switches.
33 _attr_assumed_state =
True
34 _attr_has_entity_name =
True
35 _attr_should_poll =
False
36 _device: rfxtrxmod.RFXtrxDevice
37 _event: rfxtrxmod.RFXtrxEvent |
None
41 device: rfxtrxmod.RFXtrxDevice,
42 device_id: DeviceTuple,
43 event: rfxtrxmod.RFXtrxEvent |
None =
None,
45 """Initialize the device."""
48 model=device.type_string,
49 name=f
"{device.type_string} {device.id_string}",
57 (self._group_id, _, _) = cast(str, device.id_string).partition(
":")
60 """Restore RFXtrx device state (ON/OFF)."""
70 """Return the device state attributes."""
73 return {ATTR_EVENT:
"".join(f
"{x:02x}" for x
in self.
_event_event.data)}
76 self, event: rfxtrxmod.RFXtrxEvent, device_id: DeviceTuple
78 """Check if event applies to me."""
79 if isinstance(event, rfxtrxmod.ControlEvent):
81 "Command" in event.values
82 and event.values[
"Command"]
in COMMAND_GROUP_LIST
84 device: rfxtrxmod.RFXtrxDevice = event.device
85 (group_id, _, _) = cast(str, device.id_string).partition(
":")
86 return group_id == self._group_id
92 """Apply a received event."""
97 self, event: rfxtrxmod.RFXtrxEvent, device_id: DeviceTuple
99 """Handle a reception of data, overridden by other classes."""
103 """Represents a Rfxtrx device.
105 Contains the common logic for Rfxtrx lights and switches.
112 device: rfxtrxmod.RFXtrxDevice,
113 device_id: DeviceTuple,
114 event: rfxtrxmod.RFXtrxEvent |
None =
None,
116 """Initialzie a switch or light device."""
117 super().
__init__(device, device_id, event=event)
119 async
def _async_send[*_Ts](
120 self, fun: Callable[[rfxtrxmod.PySerialTransport, *_Ts],
None], *args: *_Ts
122 rfx_object: rfxtrxmod.Connect = self.
hasshass.data[DOMAIN][DATA_RFXOBJECT]
123 await self.
hasshass.async_add_executor_job(fun, rfx_object.transport, *args)
None __init__(self, rfxtrxmod.RFXtrxDevice device, DeviceTuple device_id, rfxtrxmod.RFXtrxEvent|None event=None)
dict[str, str]|None extra_state_attributes(self)
None __init__(self, rfxtrxmod.RFXtrxDevice device, DeviceTuple device_id, rfxtrxmod.RFXtrxEvent|None event=None)
None _apply_event(self, rfxtrxmod.RFXtrxEvent event)
None _handle_event(self, rfxtrxmod.RFXtrxEvent event, DeviceTuple device_id)
None async_added_to_hass(self)
bool _event_applies(self, rfxtrxmod.RFXtrxEvent event, DeviceTuple device_id)
None async_on_remove(self, CALLBACK_TYPE func)
set[tuple[str, str]] _get_identifiers_from_device_tuple(DeviceTuple device_tuple)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)