From 2af169be40335c6cdbb9e7b1b9998246c512847b Mon Sep 17 00:00:00 2001 From: Matt Snyder Date: Mon, 26 Nov 2018 15:23:00 -0600 Subject: [PATCH 1/2] Add ability to monitor relay events --- homeassistant/components/doorbird.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/doorbird.py b/homeassistant/components/doorbird.py index 578855011cc240..442707ef20a09c 100644 --- a/homeassistant/components/doorbird.py +++ b/homeassistant/components/doorbird.py @@ -25,6 +25,7 @@ CONF_CUSTOM_URL = 'hass_url_override' CONF_DOORBELL_EVENTS = 'doorbell_events' CONF_DOORBELL_NUMS = 'doorbell_numbers' +CONF_RELAY_NUMS = 'relay_numbers' CONF_MOTION_EVENTS = 'motion_events' CONF_TOKEN = 'token' @@ -37,6 +38,10 @@ 'name': 'Motion', 'device_class': 'motion', }, + 'relay': { + 'name': 'Relay', + 'device_class': 'relay', + } } RESET_DEVICE_FAVORITES = 'doorbird_reset_favorites' @@ -47,6 +52,8 @@ vol.Required(CONF_PASSWORD): cv.string, vol.Optional(CONF_DOORBELL_NUMS, default=[1]): vol.All( cv.ensure_list, [cv.positive_int]), + vol.Optional(CONF_RELAY_NUMS, default=[1]): vol.All( + cv.ensure_list, [cv.positive_int]), vol.Optional(CONF_CUSTOM_URL): cv.string, vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_MONITORED_CONDITIONS, default=[]): @@ -80,6 +87,7 @@ def setup(hass, config): username = doorstation_config.get(CONF_USERNAME) password = doorstation_config.get(CONF_PASSWORD) doorbell_nums = doorstation_config.get(CONF_DOORBELL_NUMS) + relay_nums = doorstation_config.get(CONF_RELAY_NUMS) custom_url = doorstation_config.get(CONF_CUSTOM_URL) events = doorstation_config.get(CONF_MONITORED_CONDITIONS) name = (doorstation_config.get(CONF_NAME) @@ -90,7 +98,7 @@ def setup(hass, config): if status[0]: doorstation = ConfiguredDoorBird(device, name, events, custom_url, - doorbell_nums, token) + doorbell_nums, relay_nums, token) doorstations.append(doorstation) _LOGGER.info('Connected to DoorBird "%s" as %s@%s', doorstation.name, username, device_ip) @@ -148,13 +156,15 @@ def handle_event(event): class ConfiguredDoorBird(): """Attach additional information to pass along with configured device.""" - def __init__(self, device, name, events, custom_url, doorbell_nums, token): + def __init__(self, device, name, events, custom_url, doorbell_nums, + relay_nums, token): """Initialize configured device.""" self._name = name self._device = device self._custom_url = custom_url self._monitored_events = events self._doorbell_nums = doorbell_nums + self._relay_nums = relay_nums self._token = token @property @@ -218,9 +228,8 @@ def _register_event(self, hass_url, event, schedule): # Register HA URL as webhook if not already, then get the ID if not self.webhook_is_registered(hass_url): - self.device.change_favorite('http', - 'Home Assistant on {} ({} events)' - .format(hass_url, event), hass_url) + self.device.change_favorite('http', 'Home Assistant ({} events)' + .format(event), hass_url) fav_id = self.get_webhook_id(hass_url) if not fav_id: @@ -239,6 +248,13 @@ def _register_event(self, hass_url, event, schedule): entry = self.device.get_schedule_entry(event, str(doorbell)) entry.output.append(output) self.device.change_schedule(entry) + elif event == 'relay': + # Repeat edit for each monitored doorbell number + for relay in self._relay_nums: + entry = self.device.get_schedule_entry(event, str(relay)) + entry.output.append(output) + resp = self.device.change_schedule(entry) + return resp else: entry = self.device.get_schedule_entry(event) entry.output.append(output) From 76fb8aae198ee87881062b28eb43f9f2c673bde7 Mon Sep 17 00:00:00 2001 From: Matt Snyder Date: Sat, 8 Dec 2018 09:04:36 -0600 Subject: [PATCH 2/2] Account for empty events array instead of none. --- homeassistant/components/doorbird.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/doorbird.py b/homeassistant/components/doorbird.py index 442707ef20a09c..a3aab7e8dd9c00 100644 --- a/homeassistant/components/doorbird.py +++ b/homeassistant/components/doorbird.py @@ -112,7 +112,7 @@ def setup(hass, config): return False # Subscribe to doorbell or motion events - if events is not None: + if events: doorstation.update_schedule(hass) hass.data[DOMAIN] = doorstations