From 67bcb00c9e28c546a17bc91862d74c41705b4672 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 26 Nov 2015 19:09:32 +0100 Subject: [PATCH 1/3] Add demo platform for alarm control panel --- .../components/alarm_control_panel/demo.py | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 homeassistant/components/alarm_control_panel/demo.py diff --git a/homeassistant/components/alarm_control_panel/demo.py b/homeassistant/components/alarm_control_panel/demo.py new file mode 100644 index 00000000000..c20a0462540 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/demo.py @@ -0,0 +1,74 @@ +""" +homeassistant.components.alarm_control_panel.demo +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Demo platform that has two fake alarm control panels. +""" +import homeassistant.components.alarm_control_panel as Alarm +from homeassistant.const import (STATE_ALARM_DISARMED, STATE_ALARM_ARMED_HOME, + STATE_ALARM_ARMED_AWAY) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """ Sets up the Demo alarm control panels. """ + add_devices([ + DemoAlarmControlPanel('Front door', '1234', STATE_ALARM_ARMED_HOME), + DemoAlarmControlPanel('Safe', '1234', STATE_ALARM_ARMED_AWAY), + ]) + + +class DemoAlarmControlPanel(Alarm.AlarmControlPanel): + """ A Demo alarm control panel. """ + + def __init__(self, name, code, state): + self._state = state + self._name = name + self._code = str(code) if code else None + + @property + def should_poll(self): + """ No polling needed. """ + return False + + @property + def name(self): + """ Returns the name of the device. """ + return self._name + + @property + def state(self): + """ Returns the state of the device. """ + return self._state + + @property + def code_format(self): + """ One or more characters. """ + return None if self._code is None else '.+' + + def alarm_disarm(self, code=None): + """ Send disarm command. """ + if not self._validate_code(code, STATE_ALARM_DISARMED): + return + self._state = STATE_ALARM_DISARMED + self.update_ha_state() + + def alarm_arm_home(self, code=None): + """ Send arm home command. """ + if not self._validate_code(code, STATE_ALARM_ARMED_HOME): + return + self._state = STATE_ALARM_ARMED_HOME + self.update_ha_state() + + def alarm_arm_away(self, code=None): + """ Send arm away command. """ + if not self._validate_code(code, STATE_ALARM_ARMED_AWAY): + return + self._state = STATE_ALARM_ARMED_AWAY + self.update_ha_state() + + def alarm_trigger(self, code=None): + """ Send alarm trigger command. No code needed. """ + pass + + def _validate_code(self, code, state): + """ Validate given code. """ + return self._code is None or code == self._code From 60460e82174c16625dd11966df70a8157b24777d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 26 Nov 2015 19:10:06 +0100 Subject: [PATCH 2/3] Add alarm control panel as platform and remove camera/acp entries --- homeassistant/components/demo.py | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/homeassistant/components/demo.py b/homeassistant/components/demo.py index 547a1d54a03..261c0e1b6a9 100644 --- a/homeassistant/components/demo.py +++ b/homeassistant/components/demo.py @@ -18,7 +18,7 @@ DEPENDENCIES = ['conversation', 'introduction', 'zone'] COMPONENTS_WITH_DEMO_PLATFORM = [ 'device_tracker', 'light', 'media_player', 'notify', 'switch', 'sensor', - 'thermostat', 'camera', 'binary_sensor'] + 'thermostat', 'camera', 'binary_sensor', 'alarm_control_panel'] def setup(hass, config): @@ -55,23 +55,6 @@ def setup(hass, config): group.setup_group(hass, 'bedroom', [lights[0], switches[1], media_players[0]]) - # Setup IP Camera - bootstrap.setup_component( - hass, 'camera', - {'camera': { - 'platform': 'generic', - 'name': 'IP Camera', - 'still_image_url': 'http://home-assistant.io/demo/webcam.jpg', - }}) - - # Setup alarm_control_panel - bootstrap.setup_component( - hass, 'alarm_control_panel', - {'alarm_control_panel': { - 'platform': 'manual', - 'name': 'Test Alarm', - }}) - # Setup scripts bootstrap.setup_component( hass, 'script', From 7224775aa87e2abf60a0424aacf9a563821e4e7e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 27 Nov 2015 00:40:51 +0100 Subject: [PATCH 3/3] Use manual alarm control panel as base for demo --- .../components/alarm_control_panel/demo.py | 60 ++++--------------- 1 file changed, 12 insertions(+), 48 deletions(-) diff --git a/homeassistant/components/alarm_control_panel/demo.py b/homeassistant/components/alarm_control_panel/demo.py index c20a0462540..2d2e36d03bc 100644 --- a/homeassistant/components/alarm_control_panel/demo.py +++ b/homeassistant/components/alarm_control_panel/demo.py @@ -3,72 +3,36 @@ homeassistant.components.alarm_control_panel.demo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Demo platform that has two fake alarm control panels. """ -import homeassistant.components.alarm_control_panel as Alarm -from homeassistant.const import (STATE_ALARM_DISARMED, STATE_ALARM_ARMED_HOME, +import homeassistant.components.alarm_control_panel.manual as Alarm +from homeassistant.const import (STATE_ALARM_DISARMED, STATE_ALARM_ARMED_AWAY) def setup_platform(hass, config, add_devices, discovery_info=None): """ Sets up the Demo alarm control panels. """ add_devices([ - DemoAlarmControlPanel('Front door', '1234', STATE_ALARM_ARMED_HOME), - DemoAlarmControlPanel('Safe', '1234', STATE_ALARM_ARMED_AWAY), + + DemoAlarmControlPanel(hass, 'Front door', '1234', 2, 4, + STATE_ALARM_DISARMED), + DemoAlarmControlPanel(hass, 'Safe', '1234', 2, 4, + STATE_ALARM_ARMED_AWAY), ]) -class DemoAlarmControlPanel(Alarm.AlarmControlPanel): +# pylint: disable=too-many-arguments +class DemoAlarmControlPanel(Alarm.ManualAlarm): """ A Demo alarm control panel. """ - def __init__(self, name, code, state): + def __init__(self, hass, name, code, pending_time, trigger_time, state): + super().__init__(hass, name, code, pending_time, trigger_time) self._state = state - self._name = name - self._code = str(code) if code else None @property def should_poll(self): - """ No polling needed. """ + """ No polling needed for a demo panel. """ return False - @property - def name(self): - """ Returns the name of the device. """ - return self._name - @property def state(self): """ Returns the state of the device. """ return self._state - - @property - def code_format(self): - """ One or more characters. """ - return None if self._code is None else '.+' - - def alarm_disarm(self, code=None): - """ Send disarm command. """ - if not self._validate_code(code, STATE_ALARM_DISARMED): - return - self._state = STATE_ALARM_DISARMED - self.update_ha_state() - - def alarm_arm_home(self, code=None): - """ Send arm home command. """ - if not self._validate_code(code, STATE_ALARM_ARMED_HOME): - return - self._state = STATE_ALARM_ARMED_HOME - self.update_ha_state() - - def alarm_arm_away(self, code=None): - """ Send arm away command. """ - if not self._validate_code(code, STATE_ALARM_ARMED_AWAY): - return - self._state = STATE_ALARM_ARMED_AWAY - self.update_ha_state() - - def alarm_trigger(self, code=None): - """ Send alarm trigger command. No code needed. """ - pass - - def _validate_code(self, code, state): - """ Validate given code. """ - return self._code is None or code == self._code