From a35817453666bd595bcc5dec012d8ee243ca92b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Mon, 15 Jan 2018 23:26:27 +0100 Subject: [PATCH] Rfxtrx fix (#11678) * fix voluptuous bug in rfxtrx * fix voluptuous bug in rfxtrx * fix voluptuous bug in rfxtrx --- .../components/binary_sensor/rfxtrx.py | 21 ++++++++++--------- homeassistant/components/rfxtrx.py | 7 ++++--- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/binary_sensor/rfxtrx.py b/homeassistant/components/binary_sensor/rfxtrx.py index 4073cb9eac1..1c283ad214a 100644 --- a/homeassistant/components/binary_sensor/rfxtrx.py +++ b/homeassistant/components/binary_sensor/rfxtrx.py @@ -18,9 +18,8 @@ from homeassistant.helpers import config_validation as cv from homeassistant.components.binary_sensor import ( BinarySensorDevice, PLATFORM_SCHEMA) from homeassistant.components.rfxtrx import ( - ATTR_NAME, ATTR_DATA_BITS, ATTR_OFF_DELAY, ATTR_FIRE_EVENT, - CONF_AUTOMATIC_ADD, CONF_FIRE_EVENT, - CONF_DATA_BITS, CONF_DEVICES) + ATTR_NAME, CONF_AUTOMATIC_ADD, CONF_FIRE_EVENT, + CONF_OFF_DELAY, CONF_DATA_BITS, CONF_DEVICES) from homeassistant.util import slugify from homeassistant.util import dt as dt_util @@ -35,9 +34,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_DEVICE_CLASS): cv.string, vol.Optional(CONF_FIRE_EVENT, default=False): cv.boolean, - vol.Optional(CONF_DATA_BITS): cv.positive_int, - vol.Optional(CONF_COMMAND_ON): cv.byte, - vol.Optional(CONF_COMMAND_OFF): cv.byte + vol.Optional(CONF_OFF_DELAY, default=None): + vol.Any(cv.time_period, cv.positive_timedelta), + vol.Optional(CONF_DATA_BITS, default=None): cv.positive_int, + vol.Optional(CONF_COMMAND_ON, default=None): cv.byte, + vol.Optional(CONF_COMMAND_OFF, default=None): cv.byte }) }, vol.Optional(CONF_AUTOMATIC_ADD, default=False): cv.boolean, @@ -59,16 +60,16 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): if entity[CONF_DATA_BITS] is not None: _LOGGER.debug("Masked device id: %s", rfxtrx.get_pt2262_deviceid(device_id, - entity[ATTR_DATA_BITS])) + entity[CONF_DATA_BITS])) _LOGGER.debug("Add %s rfxtrx.binary_sensor (class %s)", entity[ATTR_NAME], entity[CONF_DEVICE_CLASS]) device = RfxtrxBinarySensor(event, entity[ATTR_NAME], entity[CONF_DEVICE_CLASS], - entity[ATTR_FIRE_EVENT], - entity[ATTR_OFF_DELAY], - entity[ATTR_DATA_BITS], + entity[CONF_FIRE_EVENT], + entity[CONF_OFF_DELAY], + entity[CONF_DATA_BITS], entity[CONF_COMMAND_ON], entity[CONF_COMMAND_OFF]) device.hass = hass diff --git a/homeassistant/components/rfxtrx.py b/homeassistant/components/rfxtrx.py index f28a9aafb19..4994e333eda 100644 --- a/homeassistant/components/rfxtrx.py +++ b/homeassistant/components/rfxtrx.py @@ -33,9 +33,8 @@ ATTR_STATE = 'state' ATTR_NAME = 'name' ATTR_FIRE_EVENT = 'fire_event' ATTR_DATA_TYPE = 'data_type' -ATTR_DATA_BITS = 'data_bits' ATTR_DUMMY = 'dummy' -ATTR_OFF_DELAY = 'off_delay' +CONF_DATA_BITS = 'data_bits' CONF_AUTOMATIC_ADD = 'automatic_add' CONF_DATA_TYPE = 'data_type' CONF_SIGNAL_REPETITIONS = 'signal_repetitions' @@ -44,6 +43,7 @@ CONF_DATA_BITS = 'data_bits' CONF_DUMMY = 'dummy' CONF_DEVICE = 'device' CONF_DEBUG = 'debug' +CONF_OFF_DELAY = 'off_delay' EVENT_BUTTON_PRESSED = 'button_pressed' DATA_TYPES = OrderedDict([ @@ -143,12 +143,13 @@ def get_rfx_object(packetid): def get_pt2262_deviceid(device_id, nb_data_bits): """Extract and return the address bits from a Lighting4/PT2262 packet.""" + if nb_data_bits is None: + return import binascii try: data = bytearray.fromhex(device_id) except ValueError: return None - mask = 0xFF & ~((1 << nb_data_bits) - 1) data[len(data)-1] &= mask