Replace rfxtrx entity events with integration events (#37565)

* Drop per entity events

* Correct linting error

* Drop keys()
This commit is contained in:
Joakim Plate authored and GitHub committed 2020-07-13 02:57:19 +02:00
1 parent d3b47b6d89
commit 87f6b7cdd4
14 files changed
+132 -183

No files matched your search

@@ -15,14 +15,11 @@ from homeassistant.helpers import event as evt
from . import (
CONF_AUTOMATIC_ADD,
CONF_DATA_BITS,
CONF_FIRE_EVENT,
CONF_OFF_DELAY,
SIGNAL_EVENT,
find_possible_pt2262_device,
fire_command_event,
get_device_id,
get_pt2262_cmd,
get_pt2262_deviceid,
get_rfx_object,
)
from .const import COMMAND_OFF_LIST, COMMAND_ON_LIST, DEVICE_PACKET_TYPE_LIGHTING4
@@ -30,17 +27,6 @@ from .const import COMMAND_OFF_LIST, COMMAND_ON_LIST, DEVICE_PACKET_TYPE_LIGHTIN
_LOGGER = logging.getLogger(__name__)
def _get_device_data_bits(device, device_bits):
"""Deduce data bits for device based on a cache of device bits."""
data_bits = None
if device.packettype == DEVICE_PACKET_TYPE_LIGHTING4:
for id_masked, bits in device_bits.items():
if get_pt2262_deviceid(device.id_string, bits) == id_masked:
data_bits = bits
break
return data_bits
def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the Binary Sensor platform to RFXtrx."""
if discovery_info is None:
@@ -49,7 +35,6 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
sensors = []
device_ids = set()
device_bits = {}
pt2262_devices = []
@@ -75,8 +60,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
device = RfxtrxBinarySensor(
event.device,
device_id,
entity.get(CONF_DEVICE_CLASS),
entity[CONF_FIRE_EVENT],
entity.get(CONF_OFF_DELAY),
entity.get(CONF_DATA_BITS),
entity.get(CONF_COMMAND_ON),
@@ -86,14 +71,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
add_entities(sensors)
def binary_sensor_update(event):
def binary_sensor_update(event, device_id):
"""Call for control updates from the RFXtrx gateway."""
if not supported(event):
return
data_bits = _get_device_data_bits(event.device, device_bits)
device_id = get_device_id(event.device, data_bits=data_bits)
if device_id in device_ids:
return
device_ids.add(device_id)
@@ -105,7 +87,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
event.device.subtype,
"".join(f"{x:02x}" for x in event.data),
)
sensor = RfxtrxBinarySensor(event.device, data_bits=data_bits, event=event)
sensor = RfxtrxBinarySensor(event.device, device_id, event=event)
add_entities([sensor])
# Subscribe to main RFXtrx events
@@ -119,8 +101,8 @@ class RfxtrxBinarySensor(BinarySensorEntity):
def __init__(
self,
device,
device_id,
device_class=None,
should_fire=False,
off_delay=None,
data_bits=None,
cmd_on=None,
@@ -131,16 +113,15 @@ class RfxtrxBinarySensor(BinarySensorEntity):
self.event = None
self._device = device
self._name = f"{device.type_string} {device.id_string}"
self._should_fire_event = should_fire
self._device_class = device_class
self._data_bits = data_bits
self._off_delay = off_delay
self._state = False
self.delay_listener = None
self._data_bits = data_bits
self._cmd_on = cmd_on
self._cmd_off = cmd_off
self._device_id = get_device_id(device, data_bits=data_bits)
self._device_id = device_id
self._unique_id = "_".join(x for x in self._device_id)
if event:
@@ -181,11 +162,6 @@ class RfxtrxBinarySensor(BinarySensorEntity):
"""No polling needed."""
return False
@property
def should_fire_event(self):
"""Return is the device must fire event."""
return self._should_fire_event
@property
def device_class(self):
"""Return the sensor class."""
@@ -231,9 +207,9 @@ class RfxtrxBinarySensor(BinarySensorEntity):
else:
self._apply_event_standard(event)
def _handle_event(self, event):
def _handle_event(self, event, device_id):
"""Check if event applies to me and update."""
if get_device_id(event.device, data_bits=self._data_bits) != self._device_id:
if device_id != self._device_id:
return
_LOGGER.debug(
@@ -246,8 +222,6 @@ class RfxtrxBinarySensor(BinarySensorEntity):
self._apply_event(event)
self.schedule_update_ha_state()
if self.should_fire_event:
fire_command_event(self.hass, self.entity_id, event.values["Command"])
if self.is_on and self.off_delay is not None and self.delay_listener is None: