mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 15:57:06 +00:00
Configuration options for IFTTT alarm control panel (#13352)
* Improvements * Use optimistic instead of await callback * Fix default value for optimistic
This commit is contained in:
parent
0396725fe9
commit
36bc7f8175
@ -15,7 +15,7 @@ from homeassistant.components.ifttt import (
|
|||||||
ATTR_EVENT, DOMAIN as IFTTT_DOMAIN, SERVICE_TRIGGER)
|
ATTR_EVENT, DOMAIN as IFTTT_DOMAIN, SERVICE_TRIGGER)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_ENTITY_ID, ATTR_STATE, CONF_NAME, CONF_CODE,
|
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)
|
STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_AWAY)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
@ -30,14 +30,24 @@ ALLOWED_STATES = [
|
|||||||
DATA_IFTTT_ALARM = 'ifttt_alarm'
|
DATA_IFTTT_ALARM = 'ifttt_alarm'
|
||||||
DEFAULT_NAME = "Home"
|
DEFAULT_NAME = "Home"
|
||||||
|
|
||||||
EVENT_ALARM_ARM_AWAY = "alarm_arm_away"
|
CONF_EVENT_AWAY = "event_arm_away"
|
||||||
EVENT_ALARM_ARM_HOME = "alarm_arm_home"
|
CONF_EVENT_HOME = "event_arm_home"
|
||||||
EVENT_ALARM_ARM_NIGHT = "alarm_arm_night"
|
CONF_EVENT_NIGHT = "event_arm_night"
|
||||||
EVENT_ALARM_DISARM = "alarm_disarm"
|
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({
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||||
vol.Optional(CONF_CODE): 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"
|
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)
|
name = config.get(CONF_NAME)
|
||||||
code = config.get(CONF_CODE)
|
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)
|
hass.data[DATA_IFTTT_ALARM].append(alarmpanel)
|
||||||
add_devices([alarmpanel])
|
add_devices([alarmpanel])
|
||||||
|
|
||||||
@ -79,10 +95,16 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
|||||||
class IFTTTAlarmPanel(alarm.AlarmControlPanel):
|
class IFTTTAlarmPanel(alarm.AlarmControlPanel):
|
||||||
"""Representation of an alarm control panel controlled throught IFTTT."""
|
"""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."""
|
"""Initialize the alarm control panel."""
|
||||||
self._name = name
|
self._name = name
|
||||||
self._code = code
|
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
|
self._state = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -109,32 +131,34 @@ class IFTTTAlarmPanel(alarm.AlarmControlPanel):
|
|||||||
"""Send disarm command."""
|
"""Send disarm command."""
|
||||||
if not self._check_code(code):
|
if not self._check_code(code):
|
||||||
return
|
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):
|
def alarm_arm_away(self, code=None):
|
||||||
"""Send arm away command."""
|
"""Send arm away command."""
|
||||||
if not self._check_code(code):
|
if not self._check_code(code):
|
||||||
return
|
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):
|
def alarm_arm_home(self, code=None):
|
||||||
"""Send arm home command."""
|
"""Send arm home command."""
|
||||||
if not self._check_code(code):
|
if not self._check_code(code):
|
||||||
return
|
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):
|
def alarm_arm_night(self, code=None):
|
||||||
"""Send arm night command."""
|
"""Send arm night command."""
|
||||||
if not self._check_code(code):
|
if not self._check_code(code):
|
||||||
return
|
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."""
|
"""Call the IFTTT trigger service to change the alarm state."""
|
||||||
data = {ATTR_EVENT: event}
|
data = {ATTR_EVENT: event}
|
||||||
|
|
||||||
self.hass.services.call(IFTTT_DOMAIN, SERVICE_TRIGGER, data)
|
self.hass.services.call(IFTTT_DOMAIN, SERVICE_TRIGGER, data)
|
||||||
_LOGGER.debug("Called IFTTT component to trigger event %s", event)
|
_LOGGER.debug("Called IFTTT component to trigger event %s", event)
|
||||||
|
if self._optimistic:
|
||||||
|
self._state = state
|
||||||
|
|
||||||
def push_alarm_state(self, value):
|
def push_alarm_state(self, value):
|
||||||
"""Push the alarm state to the given value."""
|
"""Push the alarm state to the given value."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user