From c5574c2684f1956c0007f86c34fa74bb55ce7269 Mon Sep 17 00:00:00 2001 From: "Craig J. Ward" Date: Tue, 4 Apr 2017 05:21:53 -0500 Subject: [PATCH] total connect alarm support (#6887) * total connect alarm support * linting fixes * linting fixes * docstring * docstring * use sync and update coveragerc * remove unused import * changes as per notes * Update HA code style --- .coveragerc | 1 + .../alarm_control_panel/totalconnect.py | 87 +++++++++++++++++++ requirements_all.txt | 3 + 3 files changed, 91 insertions(+) create mode 100644 homeassistant/components/alarm_control_panel/totalconnect.py diff --git a/.coveragerc b/.coveragerc index 939565ed43a..0c7f17f3098 100644 --- a/.coveragerc +++ b/.coveragerc @@ -152,6 +152,7 @@ omit = homeassistant/components/alarm_control_panel/concord232.py homeassistant/components/alarm_control_panel/nx584.py homeassistant/components/alarm_control_panel/simplisafe.py + homeassistant/components/alarm_control_panel/totalconnect.py homeassistant/components/apiai.py homeassistant/components/binary_sensor/arest.py homeassistant/components/binary_sensor/concord232.py diff --git a/homeassistant/components/alarm_control_panel/totalconnect.py b/homeassistant/components/alarm_control_panel/totalconnect.py new file mode 100644 index 00000000000..a69e260c053 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/totalconnect.py @@ -0,0 +1,87 @@ +"""Interfaces with TotalConnect alarm control panels.""" +import logging + +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 ( + CONF_PASSWORD, CONF_USERNAME, STATE_ALARM_ARMED_AWAY, + STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED, STATE_UNKNOWN, + CONF_NAME) +import homeassistant.helpers.config_validation as cv + +REQUIREMENTS = ['total_connect_client==0.7'] + +_LOGGER = logging.getLogger(__name__) + +DEFAULT_NAME = 'Total Connect' + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_PASSWORD): cv.string, + vol.Required(CONF_USERNAME): cv.string, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, +}) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Setup a TotalConnect control panel.""" + name = config.get(CONF_NAME) + username = config.get(CONF_USERNAME) + password = config.get(CONF_PASSWORD) + + total_connect = TotalConnect(name, username, password) + add_devices([total_connect], True) + + +class TotalConnect(alarm.AlarmControlPanel): + """Represent an TotalConnect status.""" + + def __init__(self, name, username, password): + """Initialize the TotalConnect status.""" + from total_connect_client import TotalConnectClient + + _LOGGER.debug('Setting up TotalConnect...') + self._name = name + self._username = username + self._password = password + self._state = STATE_UNKNOWN + self._client = TotalConnectClient.TotalConnectClient(username, + password) + + @property + def name(self): + """Return the name of the device.""" + return self._name + + @property + def state(self): + """Return the state of the device.""" + return self._state + + def update(self): + """Return the state of the device.""" + status = self._client.get_armed_status() + + if status == self._client.DISARMED: + state = STATE_ALARM_DISARMED + elif status == self._client.ARMED_STAY: + state = STATE_ALARM_ARMED_HOME + elif status == self._client.ARMED_AWAY: + state = STATE_ALARM_ARMED_AWAY + else: + state = STATE_UNKNOWN + + self._state = state + + def alarm_disarm(self, code=None): + """Send disarm command.""" + self._client.disarm() + + def alarm_arm_home(self, code=None): + """Send arm home command.""" + self._client.arm_stay() + + def alarm_arm_away(self, code=None): + """Send arm away command.""" + self._client.arm_away() diff --git a/requirements_all.txt b/requirements_all.txt index 18ea883cc0a..8cb9cf2fa3b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -742,6 +742,9 @@ thingspeak==0.4.1 # homeassistant.components.light.tikteck tikteck==0.4 +# homeassistant.components.alarm_control_panel.totalconnect +total_connect_client==0.7 + # homeassistant.components.sensor.transmission # homeassistant.components.switch.transmission transmissionrpc==0.11