From 949e531553206f2080fe154b417df3b4c6e92bb4 Mon Sep 17 00:00:00 2001 From: Dan Cinnamon Date: Sun, 12 Aug 2018 23:43:19 -0500 Subject: [PATCH 1/4] Added the ability to call arm_night --- .../components/alarm_control_panel/envisalink.py | 10 ++++++++++ homeassistant/components/envisalink.py | 2 +- requirements_all.txt | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/alarm_control_panel/envisalink.py b/homeassistant/components/alarm_control_panel/envisalink.py index 25224484c797ad..a125daa33034e6 100644 --- a/homeassistant/components/alarm_control_panel/envisalink.py +++ b/homeassistant/components/alarm_control_panel/envisalink.py @@ -147,6 +147,16 @@ def async_alarm_arm_home(self, code=None): self.hass.data[DATA_EVL].arm_stay_partition( str(self._code), self._partition_number) + @asyncio.coroutine + def async_alarm_arm_night(self, code=None): + """Send arm night command.""" + if code: + self.hass.data[DATA_EVL].arm_night_partition( + str(code), self._partition_number) + else: + self.hass.data[DATA_EVL].arm_night_partition( + str(self._code), self._partition_number) + @asyncio.coroutine def async_alarm_arm_away(self, code=None): """Send arm away command.""" diff --git a/homeassistant/components/envisalink.py b/homeassistant/components/envisalink.py index 9b5b25c934cfe3..1292f0a2b47427 100644 --- a/homeassistant/components/envisalink.py +++ b/homeassistant/components/envisalink.py @@ -16,7 +16,7 @@ from homeassistant.helpers.discovery import async_load_platform from homeassistant.helpers.dispatcher import async_dispatcher_send -REQUIREMENTS = ['pyenvisalink==2.3'] +REQUIREMENTS = ['pyenvisalink==2.4'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 79da92c24e88b1..81cad588fb0fd2 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -832,7 +832,7 @@ pyeight==0.0.9 pyemby==1.5 # homeassistant.components.envisalink -pyenvisalink==2.3 +pyenvisalink==2.4 # homeassistant.components.climate.ephember pyephember==0.2.0 From b6b14a7153d9d8ec8a02228792312ff440c0358b Mon Sep 17 00:00:00 2001 From: Andrew Barbaccia Date: Sat, 18 Aug 2018 16:47:10 -0400 Subject: [PATCH 2/4] Fixed status reporting Add support for Arm Max (arm away + no entry delay) --- .../alarm_control_panel/envisalink.py | 20 +++++++++++-------- homeassistant/const.py | 1 + 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/alarm_control_panel/envisalink.py b/homeassistant/components/alarm_control_panel/envisalink.py index a125daa33034e6..4b97df61f0de90 100644 --- a/homeassistant/components/alarm_control_panel/envisalink.py +++ b/homeassistant/components/alarm_control_panel/envisalink.py @@ -17,8 +17,8 @@ DATA_EVL, EnvisalinkDevice, PARTITION_SCHEMA, CONF_CODE, CONF_PANIC, CONF_PARTITIONNAME, SIGNAL_KEYPAD_UPDATE, SIGNAL_PARTITION_UPDATE) from homeassistant.const import ( - STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED, - STATE_UNKNOWN, STATE_ALARM_TRIGGERED, STATE_ALARM_PENDING, ATTR_ENTITY_ID) + STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_NIGHT, STATE_ALARM_ARMED_MAX, STATE_ALARM_DISARMED, + STATE_UNKNOWN, STATE_ALARM_ARMING, STATE_ALARM_TRIGGERED, STATE_ALARM_PENDING, ATTR_ENTITY_ID) _LOGGER = logging.getLogger(__name__) @@ -115,15 +115,19 @@ def state(self): if self._info['status']['alarm']: state = STATE_ALARM_TRIGGERED - elif self._info['status']['armed_away']: - state = STATE_ALARM_ARMED_AWAY - elif self._info['status']['armed_stay']: - state = STATE_ALARM_ARMED_HOME elif self._info['status']['exit_delay']: - state = STATE_ALARM_PENDING + state = STATE_ALARM_ARMING elif self._info['status']['entry_delay']: state = STATE_ALARM_PENDING - elif self._info['status']['alpha']: + elif self._info['status']['armed_away'] and not self._info['status']['armed_zero_entry_delay']: + state = STATE_ALARM_ARMED_AWAY + elif self._info['status']['armed_away'] and self._info['status']['armed_zero_entry_delay']: + state = STATE_ALARM_ARMED_MAX + elif self._info['status']['armed_stay'] and not self._info['status']['armed_zero_entry_delay']: + state = STATE_ALARM_ARMED_HOME + elif self._info['status']['armed_stay'] and self._info['status']['armed_zero_entry_delay']: + state = STATE_ALARM_ARMED_NIGHT + elif self._info['status']['ready']: state = STATE_ALARM_DISARMED return state diff --git a/homeassistant/const.py b/homeassistant/const.py index 7d99b952ce6463..811f6e640afd9c 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -190,6 +190,7 @@ STATE_ALARM_ARMED_HOME = 'armed_home' STATE_ALARM_ARMED_AWAY = 'armed_away' STATE_ALARM_ARMED_NIGHT = 'armed_night' +STATE_ALARM_ARMED_MAX = 'armed_max' STATE_ALARM_ARMED_CUSTOM_BYPASS = 'armed_custom_bypass' STATE_ALARM_PENDING = 'pending' STATE_ALARM_ARMING = 'arming' From c975eb91ce478c0b49eca1e8cc943edcb189dbf2 Mon Sep 17 00:00:00 2001 From: Andrew Barbaccia Date: Mon, 20 Aug 2018 23:08:54 -0400 Subject: [PATCH 3/4] Fixed linting Add functionality to call Arm Max service --- .../alarm_control_panel/__init__.py | 16 ++++++++++- .../alarm_control_panel/envisalink.py | 28 +++++++++++++++---- .../alarm_control_panel/services.yaml | 10 +++++++ homeassistant/const.py | 1 + 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/alarm_control_panel/__init__.py b/homeassistant/components/alarm_control_panel/__init__.py index 0a4dd6bde784e6..a819f78a4b162e 100644 --- a/homeassistant/components/alarm_control_panel/__init__.py +++ b/homeassistant/components/alarm_control_panel/__init__.py @@ -13,7 +13,8 @@ from homeassistant.const import ( ATTR_CODE, ATTR_CODE_FORMAT, ATTR_ENTITY_ID, SERVICE_ALARM_TRIGGER, SERVICE_ALARM_DISARM, SERVICE_ALARM_ARM_HOME, SERVICE_ALARM_ARM_AWAY, - SERVICE_ALARM_ARM_NIGHT, SERVICE_ALARM_ARM_CUSTOM_BYPASS) + SERVICE_ALARM_ARM_NIGHT, SERVICE_ALARM_ARM_MAX, + SERVICE_ALARM_ARM_CUSTOM_BYPASS) from homeassistant.loader import bind_hass from homeassistant.helpers.config_validation import PLATFORM_SCHEMA # noqa import homeassistant.helpers.config_validation as cv @@ -31,6 +32,7 @@ SERVICE_ALARM_ARM_HOME: 'alarm_arm_home', SERVICE_ALARM_ARM_AWAY: 'alarm_arm_away', SERVICE_ALARM_ARM_NIGHT: 'alarm_arm_night', + SERVICE_ALARM_ARM_MAX: 'alarm_arm_max', SERVICE_ALARM_ARM_CUSTOM_BYPASS: 'alarm_arm_custom_bypass', SERVICE_ALARM_TRIGGER: 'alarm_trigger' } @@ -94,6 +96,18 @@ def alarm_arm_night(hass, code=None, entity_id=None): hass.services.call(DOMAIN, SERVICE_ALARM_ARM_NIGHT, data) +@bind_hass +def alarm_arm_max(hass, code=None, entity_id=None): + """Send the alarm the command for arm max.""" + data = {} + if code: + data[ATTR_CODE] = code + if entity_id: + data[ATTR_ENTITY_ID] = entity_id + + hass.services.call(DOMAIN, SERVICE_ALARM_ARM_MAX, data) + + @bind_hass def alarm_trigger(hass, code=None, entity_id=None): """Send the alarm the command for trigger.""" diff --git a/homeassistant/components/alarm_control_panel/envisalink.py b/homeassistant/components/alarm_control_panel/envisalink.py index 4b97df61f0de90..db06d56f497791 100644 --- a/homeassistant/components/alarm_control_panel/envisalink.py +++ b/homeassistant/components/alarm_control_panel/envisalink.py @@ -17,8 +17,10 @@ DATA_EVL, EnvisalinkDevice, PARTITION_SCHEMA, CONF_CODE, CONF_PANIC, CONF_PARTITIONNAME, SIGNAL_KEYPAD_UPDATE, SIGNAL_PARTITION_UPDATE) from homeassistant.const import ( - STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_NIGHT, STATE_ALARM_ARMED_MAX, STATE_ALARM_DISARMED, - STATE_UNKNOWN, STATE_ALARM_ARMING, STATE_ALARM_TRIGGERED, STATE_ALARM_PENDING, ATTR_ENTITY_ID) + STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_NIGHT, + STATE_ALARM_ARMED_MAX, STATE_ALARM_DISARMED, STATE_UNKNOWN, + STATE_ALARM_ARMING, STATE_ALARM_TRIGGERED, STATE_ALARM_PENDING, + ATTR_ENTITY_ID) _LOGGER = logging.getLogger(__name__) @@ -119,13 +121,17 @@ def state(self): state = STATE_ALARM_ARMING elif self._info['status']['entry_delay']: state = STATE_ALARM_PENDING - elif self._info['status']['armed_away'] and not self._info['status']['armed_zero_entry_delay']: + elif self._info['status']['armed_away'] and + not self._info['status']['armed_zero_entry_delay']: state = STATE_ALARM_ARMED_AWAY - elif self._info['status']['armed_away'] and self._info['status']['armed_zero_entry_delay']: + elif self._info['status']['armed_away'] and + self._info['status']['armed_zero_entry_delay']: state = STATE_ALARM_ARMED_MAX - elif self._info['status']['armed_stay'] and not self._info['status']['armed_zero_entry_delay']: + elif self._info['status']['armed_stay'] and + not self._info['status']['armed_zero_entry_delay']: state = STATE_ALARM_ARMED_HOME - elif self._info['status']['armed_stay'] and self._info['status']['armed_zero_entry_delay']: + elif self._info['status']['armed_stay'] and + self._info['status']['armed_zero_entry_delay']: state = STATE_ALARM_ARMED_NIGHT elif self._info['status']['ready']: state = STATE_ALARM_DISARMED @@ -161,6 +167,16 @@ def async_alarm_arm_night(self, code=None): self.hass.data[DATA_EVL].arm_night_partition( str(self._code), self._partition_number) + @asyncio.coroutine + def async_alarm_arm_max(self, code=None): + """Send arm max command.""" + if code: + self.hass.data[DATA_EVL].arm_max_partition( + str(code), self._partition_number) + else: + self.hass.data[DATA_EVL].arm_max_partition( + str(self._code), self._partition_number) + @asyncio.coroutine def async_alarm_arm_away(self, code=None): """Send arm away command.""" diff --git a/homeassistant/components/alarm_control_panel/services.yaml b/homeassistant/components/alarm_control_panel/services.yaml index 391de2033c7718..68de615a75566d 100644 --- a/homeassistant/components/alarm_control_panel/services.yaml +++ b/homeassistant/components/alarm_control_panel/services.yaml @@ -40,6 +40,16 @@ alarm_arm_night: description: An optional code to arm night the alarm control panel with. example: 1234 +alarm_arm_max: + description: Send the alarm the command for arm max. + fields: + entity_id: + description: Name of alarm control panel to arm max. + example: 'alarm_control_panel.downstairs' + code: + description: An optional code to arm max the alarm control panel with. + example: 1234 + alarm_trigger: description: Send the alarm the command for trigger. fields: diff --git a/homeassistant/const.py b/homeassistant/const.py index 811f6e640afd9c..dbef51055774b4 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -359,6 +359,7 @@ SERVICE_ALARM_ARM_HOME = 'alarm_arm_home' SERVICE_ALARM_ARM_AWAY = 'alarm_arm_away' SERVICE_ALARM_ARM_NIGHT = 'alarm_arm_night' +SERVICE_ALARM_ARM_MAX = 'alarm_arm_max' SERVICE_ALARM_ARM_CUSTOM_BYPASS = 'alarm_arm_custom_bypass' SERVICE_ALARM_TRIGGER = 'alarm_trigger' From 32c861b9f33bab386da441e253aae09442335633 Mon Sep 17 00:00:00 2001 From: Andrew Barbaccia Date: Tue, 21 Aug 2018 09:45:55 -0400 Subject: [PATCH 4/4] Fixed linting as requested by hound --- .../alarm_control_panel/__init__.py | 2 +- .../alarm_control_panel/envisalink.py | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/alarm_control_panel/__init__.py b/homeassistant/components/alarm_control_panel/__init__.py index a819f78a4b162e..60f3ec26da6f8f 100644 --- a/homeassistant/components/alarm_control_panel/__init__.py +++ b/homeassistant/components/alarm_control_panel/__init__.py @@ -13,7 +13,7 @@ from homeassistant.const import ( ATTR_CODE, ATTR_CODE_FORMAT, ATTR_ENTITY_ID, SERVICE_ALARM_TRIGGER, SERVICE_ALARM_DISARM, SERVICE_ALARM_ARM_HOME, SERVICE_ALARM_ARM_AWAY, - SERVICE_ALARM_ARM_NIGHT, SERVICE_ALARM_ARM_MAX, + SERVICE_ALARM_ARM_NIGHT, SERVICE_ALARM_ARM_MAX, SERVICE_ALARM_ARM_CUSTOM_BYPASS) from homeassistant.loader import bind_hass from homeassistant.helpers.config_validation import PLATFORM_SCHEMA # noqa diff --git a/homeassistant/components/alarm_control_panel/envisalink.py b/homeassistant/components/alarm_control_panel/envisalink.py index db06d56f497791..3b8092cab8d00a 100644 --- a/homeassistant/components/alarm_control_panel/envisalink.py +++ b/homeassistant/components/alarm_control_panel/envisalink.py @@ -17,9 +17,9 @@ DATA_EVL, EnvisalinkDevice, PARTITION_SCHEMA, CONF_CODE, CONF_PANIC, CONF_PARTITIONNAME, SIGNAL_KEYPAD_UPDATE, SIGNAL_PARTITION_UPDATE) from homeassistant.const import ( - STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_NIGHT, - STATE_ALARM_ARMED_MAX, STATE_ALARM_DISARMED, STATE_UNKNOWN, - STATE_ALARM_ARMING, STATE_ALARM_TRIGGERED, STATE_ALARM_PENDING, + STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_NIGHT, + STATE_ALARM_ARMED_MAX, STATE_ALARM_DISARMED, STATE_UNKNOWN, + STATE_ALARM_ARMING, STATE_ALARM_TRIGGERED, STATE_ALARM_PENDING, ATTR_ENTITY_ID) _LOGGER = logging.getLogger(__name__) @@ -121,17 +121,17 @@ def state(self): state = STATE_ALARM_ARMING elif self._info['status']['entry_delay']: state = STATE_ALARM_PENDING - elif self._info['status']['armed_away'] and - not self._info['status']['armed_zero_entry_delay']: + elif self._info['status']['armed_away'] and + not self._info['status']['armed_zero_entry_delay']: state = STATE_ALARM_ARMED_AWAY - elif self._info['status']['armed_away'] and - self._info['status']['armed_zero_entry_delay']: + elif self._info['status']['armed_away'] and + self._info['status']['armed_zero_entry_delay']: state = STATE_ALARM_ARMED_MAX - elif self._info['status']['armed_stay'] and - not self._info['status']['armed_zero_entry_delay']: + elif self._info['status']['armed_stay'] and + not self._info['status']['armed_zero_entry_delay']: state = STATE_ALARM_ARMED_HOME - elif self._info['status']['armed_stay'] and - self._info['status']['armed_zero_entry_delay']: + elif self._info['status']['armed_stay'] and + self._info['status']['armed_zero_entry_delay']: state = STATE_ALARM_ARMED_NIGHT elif self._info['status']['ready']: state = STATE_ALARM_DISARMED