From 02848b394976439ebf594337e66cc98833120dec Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 8 Sep 2016 23:06:57 +0200 Subject: [PATCH] Use voluptuous for nx584 alarm (#3231) * Migrate to voluptuous * Fix pylint issue --- .../components/alarm_control_panel/nx584.py | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/alarm_control_panel/nx584.py b/homeassistant/components/alarm_control_panel/nx584.py index 2b3facbdb0e..45857f3ef29 100644 --- a/homeassistant/components/alarm_control_panel/nx584.py +++ b/homeassistant/components/alarm_control_panel/nx584.py @@ -7,22 +7,40 @@ https://home-assistant.io/components/alarm_control_panel.nx584/ import logging import requests +import voluptuous as vol import homeassistant.components.alarm_control_panel as alarm +from homeassistant.components.alarm_control_panel import PLATFORM_SCHEMA from homeassistant.const import ( STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED, - STATE_UNKNOWN) + STATE_UNKNOWN, CONF_NAME, CONF_HOST, CONF_PORT) +import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['pynx584==0.2'] + _LOGGER = logging.getLogger(__name__) +DEFAULT_HOST = 'localhost' +DEFAULT_NAME = 'NX584' +DEFAULT_PORT = 5007 + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string, +}) + def setup_platform(hass, config, add_devices, discovery_info=None): """Setup nx584 platform.""" - host = config.get('host', 'localhost:5007') + name = config.get(CONF_NAME) + host = config.get(CONF_HOST) + port = config.get(CONF_PORT) + + url = 'http://{}:{}'.format(host, port) try: - add_devices([NX584Alarm(hass, host, config.get('name', 'NX584'))]) + add_devices([NX584Alarm(hass, url, name)]) except requests.exceptions.ConnectionError as ex: _LOGGER.error('Unable to connect to NX584: %s', str(ex)) return False @@ -31,13 +49,13 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class NX584Alarm(alarm.AlarmControlPanel): """Represents the NX584-based alarm panel.""" - def __init__(self, hass, host, name): + def __init__(self, hass, url, name): """Initalize the nx584 alarm panel.""" from nx584 import client self._hass = hass - self._host = host self._name = name - self._alarm = client.Client('http://%s' % host) + self._url = url + self._alarm = client.Client(self._url) # Do an initial list operation so that we will try to actually # talk to the API and trigger a requests exception for setup_platform() # to catch @@ -66,7 +84,7 @@ class NX584Alarm(alarm.AlarmControlPanel): zones = self._alarm.list_zones() except requests.exceptions.ConnectionError as ex: _LOGGER.error('Unable to connect to %(host)s: %(reason)s', - dict(host=self._host, reason=ex)) + dict(host=self._url, reason=ex)) return STATE_UNKNOWN except IndexError: _LOGGER.error('nx584 reports no partitions')