diff --git a/homeassistant/components/alarm_control_panel/ifttt.py b/homeassistant/components/alarm_control_panel/ifttt.py index eb1a8f8ed7d..5303c24876e 100644 --- a/homeassistant/components/alarm_control_panel/ifttt.py +++ b/homeassistant/components/alarm_control_panel/ifttt.py @@ -15,7 +15,7 @@ from homeassistant.components.ifttt import ( ATTR_EVENT, DOMAIN as IFTTT_DOMAIN, SERVICE_TRIGGER) from homeassistant.const import ( ATTR_ENTITY_ID, ATTR_STATE, CONF_NAME, CONF_CODE, - STATE_ALARM_DISARMED, STATE_ALARM_ARMED_NIGHT, + CONF_OPTIMISTIC, STATE_ALARM_DISARMED, STATE_ALARM_ARMED_NIGHT, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_AWAY) import homeassistant.helpers.config_validation as cv @@ -30,14 +30,24 @@ ALLOWED_STATES = [ DATA_IFTTT_ALARM = 'ifttt_alarm' DEFAULT_NAME = "Home" -EVENT_ALARM_ARM_AWAY = "alarm_arm_away" -EVENT_ALARM_ARM_HOME = "alarm_arm_home" -EVENT_ALARM_ARM_NIGHT = "alarm_arm_night" -EVENT_ALARM_DISARM = "alarm_disarm" +CONF_EVENT_AWAY = "event_arm_away" +CONF_EVENT_HOME = "event_arm_home" +CONF_EVENT_NIGHT = "event_arm_night" +CONF_EVENT_DISARM = "event_disarm" + +DEFAULT_EVENT_AWAY = "alarm_arm_away" +DEFAULT_EVENT_HOME = "alarm_arm_home" +DEFAULT_EVENT_NIGHT = "alarm_arm_night" +DEFAULT_EVENT_DISARM = "alarm_disarm" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_CODE): cv.string, + vol.Optional(CONF_EVENT_AWAY, default=DEFAULT_EVENT_AWAY): cv.string, + vol.Optional(CONF_EVENT_HOME, default=DEFAULT_EVENT_HOME): cv.string, + vol.Optional(CONF_EVENT_NIGHT, default=DEFAULT_EVENT_NIGHT): cv.string, + vol.Optional(CONF_EVENT_DISARM, default=DEFAULT_EVENT_DISARM): cv.string, + vol.Optional(CONF_OPTIMISTIC, default=False): cv.boolean, }) SERVICE_PUSH_ALARM_STATE = "ifttt_push_alarm_state" @@ -55,8 +65,14 @@ def setup_platform(hass, config, add_devices, discovery_info=None): name = config.get(CONF_NAME) code = config.get(CONF_CODE) + event_away = config.get(CONF_EVENT_AWAY) + event_home = config.get(CONF_EVENT_HOME) + event_night = config.get(CONF_EVENT_NIGHT) + event_disarm = config.get(CONF_EVENT_DISARM) + optimistic = config.get(CONF_OPTIMISTIC) - alarmpanel = IFTTTAlarmPanel(name, code) + alarmpanel = IFTTTAlarmPanel(name, code, event_away, event_home, + event_night, event_disarm, optimistic) hass.data[DATA_IFTTT_ALARM].append(alarmpanel) add_devices([alarmpanel]) @@ -79,10 +95,16 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class IFTTTAlarmPanel(alarm.AlarmControlPanel): """Representation of an alarm control panel controlled throught IFTTT.""" - def __init__(self, name, code): + def __init__(self, name, code, event_away, event_home, event_night, + event_disarm, optimistic): """Initialize the alarm control panel.""" self._name = name self._code = code + self._event_away = event_away + self._event_home = event_home + self._event_night = event_night + self._event_disarm = event_disarm + self._optimistic = optimistic self._state = None @property @@ -109,32 +131,34 @@ class IFTTTAlarmPanel(alarm.AlarmControlPanel): """Send disarm command.""" if not self._check_code(code): return - self.set_alarm_state(EVENT_ALARM_DISARM) + self.set_alarm_state(self._event_disarm, STATE_ALARM_DISARMED) def alarm_arm_away(self, code=None): """Send arm away command.""" if not self._check_code(code): return - self.set_alarm_state(EVENT_ALARM_ARM_AWAY) + self.set_alarm_state(self._event_away, STATE_ALARM_ARMED_AWAY) def alarm_arm_home(self, code=None): """Send arm home command.""" if not self._check_code(code): return - self.set_alarm_state(EVENT_ALARM_ARM_HOME) + self.set_alarm_state(self._event_home, STATE_ALARM_ARMED_HOME) def alarm_arm_night(self, code=None): """Send arm night command.""" if not self._check_code(code): return - self.set_alarm_state(EVENT_ALARM_ARM_NIGHT) + self.set_alarm_state(self._event_night, STATE_ALARM_ARMED_NIGHT) - def set_alarm_state(self, event): + def set_alarm_state(self, event, state): """Call the IFTTT trigger service to change the alarm state.""" data = {ATTR_EVENT: event} self.hass.services.call(IFTTT_DOMAIN, SERVICE_TRIGGER, data) _LOGGER.debug("Called IFTTT component to trigger event %s", event) + if self._optimistic: + self._state = state def push_alarm_state(self, value): """Push the alarm state to the given value."""