forked from home-assistant/core
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'dev' of https://github.com/home-assistant/home-assistant …
…into dev * 'dev' of https://github.com/home-assistant/home-assistant: (29 commits) Fix linksys_ap.py by inheriting DeviceScanner (home-assistant#10947) don't ignore voltage data if sensor data changed (home-assistant#10925) Upgrade tellduslive library version (closes home-assistant#10922) (home-assistant#10950) Tado ignore invalid devices (home-assistant#10927) Export climate status and target temperature to Prometheus (home-assistant#10919) Set percent unit for battery level so that history displays properly; edited variable name for consistency (home-assistant#10932) Report availability of TP-Link smart sockets (home-assistant#10933) Dominos no order fix (home-assistant#10935) Update frontend to 20171204.0 (home-assistant#10934) fix ios component config generation (home-assistant#10923) Fix Notifications for Android TV (home-assistant#10798) Version bump to 0.59.1 Dominos no order fix (home-assistant#10935) Update frontend to 20171204.0 (home-assistant#10934) Update coveragerc (home-assistant#10931) Fix Notifications for Android TV (home-assistant#10798) fix ios component config generation (home-assistant#10923) Add Min and Event Count Metrics To Prometheus (home-assistant#10530) Don't repeat getting receiver name on each update / pushed to denonavr 0.5.5 (home-assistant#10915) Add Alpha Vantage sensor (home-assistant#10873) ...
- Loading branch information
Showing
29 changed files
with
1,807 additions
and
197 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
""" | ||
Interfaces with iAlarm control panels. | ||
For more details about this platform, please refer to the documentation at | ||
https://home-assistant.io/components/alarm_control_panel.ialarm/ | ||
""" | ||
import logging | ||
|
||
import voluptuous as vol | ||
|
||
import homeassistant.helpers.config_validation as cv | ||
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, CONF_HOST, STATE_ALARM_ARMED_AWAY, | ||
STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED, CONF_NAME) | ||
|
||
REQUIREMENTS = ['pyialarm==0.2'] | ||
|
||
_LOGGER = logging.getLogger(__name__) | ||
|
||
DEFAULT_NAME = 'iAlarm' | ||
|
||
|
||
def no_application_protocol(value): | ||
"""Validate that value is without the application protocol.""" | ||
protocol_separator = "://" | ||
if not value or protocol_separator in value: | ||
raise vol.Invalid( | ||
'Invalid host, {} is not allowed'.format(protocol_separator)) | ||
|
||
return value | ||
|
||
|
||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ | ||
vol.Required(CONF_PASSWORD): cv.string, | ||
vol.Required(CONF_USERNAME): cv.string, | ||
vol.Required(CONF_HOST): vol.All(cv.string, no_application_protocol), | ||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, | ||
}) | ||
|
||
|
||
def setup_platform(hass, config, add_devices, discovery_info=None): | ||
"""Set up an iAlarm control panel.""" | ||
name = config.get(CONF_NAME) | ||
username = config.get(CONF_USERNAME) | ||
password = config.get(CONF_PASSWORD) | ||
host = config.get(CONF_HOST) | ||
|
||
url = 'http://{}'.format(host) | ||
ialarm = IAlarmPanel(name, username, password, url) | ||
add_devices([ialarm], True) | ||
|
||
|
||
class IAlarmPanel(alarm.AlarmControlPanel): | ||
"""Represent an iAlarm status.""" | ||
|
||
def __init__(self, name, username, password, url): | ||
"""Initialize the iAlarm status.""" | ||
from pyialarm import IAlarm | ||
|
||
self._name = name | ||
self._username = username | ||
self._password = password | ||
self._url = url | ||
self._state = None | ||
self._client = IAlarm(username, password, url) | ||
|
||
@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_status() | ||
_LOGGER.debug('iAlarm status: %s', status) | ||
if status: | ||
status = int(status) | ||
|
||
if status == self._client.DISARMED: | ||
state = STATE_ALARM_DISARMED | ||
elif status == self._client.ARMED_AWAY: | ||
state = STATE_ALARM_ARMED_AWAY | ||
elif status == self._client.ARMED_STAY: | ||
state = STATE_ALARM_ARMED_HOME | ||
else: | ||
state = None | ||
|
||
self._state = state | ||
|
||
def alarm_disarm(self, code=None): | ||
"""Send disarm command.""" | ||
self._client.disarm() | ||
|
||
def alarm_arm_away(self, code=None): | ||
"""Send arm away command.""" | ||
self._client.arm_away() | ||
|
||
def alarm_arm_home(self, code=None): | ||
"""Send arm home command.""" | ||
self._client.arm_stay() |
Oops, something went wrong.