diff --git a/homeassistant/components/alarmdecoder.py b/homeassistant/components/alarmdecoder.py index 1377b2a6c3a..92eab728210 100644 --- a/homeassistant/components/alarmdecoder.py +++ b/homeassistant/components/alarmdecoder.py @@ -32,6 +32,7 @@ CONF_DEVICE_TYPE = 'type' CONF_PANEL_DISPLAY = 'panel_display' CONF_ZONE_NAME = 'name' CONF_ZONE_TYPE = 'type' +CONF_ZONE_LOOP = 'loop' CONF_ZONE_RFID = 'rfid' CONF_ZONES = 'zones' CONF_RELAY_ADDR = 'relayaddr' @@ -75,6 +76,8 @@ ZONE_SCHEMA = vol.Schema({ vol.Optional(CONF_ZONE_TYPE, default=DEFAULT_ZONE_TYPE): vol.Any(DEVICE_CLASSES_SCHEMA), vol.Optional(CONF_ZONE_RFID): cv.string, + vol.Optional(CONF_ZONE_LOOP): + vol.All(vol.Coerce(int), vol.Range(min=1, max=4)), vol.Inclusive(CONF_RELAY_ADDR, 'relaylocation', 'Relay address and channel must exist together'): cv.byte, vol.Inclusive(CONF_RELAY_CHAN, 'relaylocation', diff --git a/homeassistant/components/binary_sensor/alarmdecoder.py b/homeassistant/components/binary_sensor/alarmdecoder.py index f7a42e9b831..d8fddeaa540 100644 --- a/homeassistant/components/binary_sensor/alarmdecoder.py +++ b/homeassistant/components/binary_sensor/alarmdecoder.py @@ -9,7 +9,7 @@ import logging from homeassistant.components.binary_sensor import BinarySensorDevice from homeassistant.components.alarmdecoder import ( ZONE_SCHEMA, CONF_ZONES, CONF_ZONE_NAME, CONF_ZONE_TYPE, - CONF_ZONE_RFID, SIGNAL_ZONE_FAULT, SIGNAL_ZONE_RESTORE, + CONF_ZONE_RFID, CONF_ZONE_LOOP, SIGNAL_ZONE_FAULT, SIGNAL_ZONE_RESTORE, SIGNAL_RFX_MESSAGE, SIGNAL_REL_MESSAGE, CONF_RELAY_ADDR, CONF_RELAY_CHAN) @@ -37,10 +37,12 @@ def setup_platform(hass, config, add_entities, discovery_info=None): zone_type = device_config_data[CONF_ZONE_TYPE] zone_name = device_config_data[CONF_ZONE_NAME] zone_rfid = device_config_data.get(CONF_ZONE_RFID) + zone_loop = device_config_data.get(CONF_ZONE_LOOP) relay_addr = device_config_data.get(CONF_RELAY_ADDR) relay_chan = device_config_data.get(CONF_RELAY_CHAN) device = AlarmDecoderBinarySensor( - zone_num, zone_name, zone_type, zone_rfid, relay_addr, relay_chan) + zone_num, zone_name, zone_type, zone_rfid, zone_loop, relay_addr, + relay_chan) devices.append(device) add_entities(devices) @@ -51,7 +53,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): class AlarmDecoderBinarySensor(BinarySensorDevice): """Representation of an AlarmDecoder binary sensor.""" - def __init__(self, zone_number, zone_name, zone_type, zone_rfid, + def __init__(self, zone_number, zone_name, zone_type, zone_rfid, zone_loop, relay_addr, relay_chan): """Initialize the binary_sensor.""" self._zone_number = zone_number @@ -59,6 +61,7 @@ class AlarmDecoderBinarySensor(BinarySensorDevice): self._state = None self._name = zone_name self._rfid = zone_rfid + self._loop = zone_loop self._rfstate = None self._relay_addr = relay_addr self._relay_chan = relay_chan @@ -128,6 +131,8 @@ class AlarmDecoderBinarySensor(BinarySensorDevice): """Update RF state.""" if self._rfid and message and message.serial_number == self._rfid: self._rfstate = message.value + if self._loop: + self._state = 1 if message.loop[self._loop - 1] else 0 self.schedule_update_ha_state() def _rel_message_callback(self, message):