* Upgrade pylint to 1.8.1 * Fix no-else-return * Fix bad-whitespace * Fix too-many-nested-blocks * Fix raising-format-tuple See https://github.com/PyCQA/pylint/blob/master/doc/whatsnew/1.8.rst * Fix len-as-condition * Fix logging-not-lazy Not sure about that TEMP_CELSIUS though, but internally it's probably just like if you concatenated any other (variable) string * Fix stop-iteration-return * Fix useless-super-delegation * Fix trailing-comma-tuple Both of these seem to simply be bugs: * Nest: The value of self._humidity never seems to be used anywhere * Dovado: The called API method seems to expect a "normal" number * Fix redefined-argument-from-local * Fix consider-using-enumerate * Fix wrong-import-order * Fix arguments-differ * Fix missed no-else-return * Fix no-member and related * Fix signatures-differ * Revert "Upgrade pylint to 1.8.1" This reverts commit af78aa00f125a7d34add97b9d50c14db48412211. * Fix arguments-differ * except for device_tracker * Cleanup * Fix test using positional argument * Fix line too long I forgot to run flake8 - shame on me... 🙃 * Fix bad-option-value for 1.6.5 * Fix arguments-differ for device_tracker * Upgrade pylint to 1.8.2 * 👕 Fix missed no-member
91 lines
2.9 KiB
Python
91 lines
2.9 KiB
Python
"""
|
|
Support for Canary alarm.
|
|
|
|
For more details about this platform, please refer to the documentation at
|
|
https://home-assistant.io/components/alarm_control_panel.canary/
|
|
"""
|
|
import logging
|
|
|
|
from homeassistant.components.alarm_control_panel import AlarmControlPanel
|
|
from homeassistant.components.canary import DATA_CANARY
|
|
from homeassistant.const import STATE_ALARM_DISARMED, STATE_ALARM_ARMED_AWAY, \
|
|
STATE_ALARM_ARMED_NIGHT, STATE_ALARM_ARMED_HOME
|
|
|
|
DEPENDENCIES = ['canary']
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
|
"""Set up the Canary alarms."""
|
|
data = hass.data[DATA_CANARY]
|
|
devices = []
|
|
|
|
for location in data.locations:
|
|
devices.append(CanaryAlarm(data, location.location_id))
|
|
|
|
add_devices(devices, True)
|
|
|
|
|
|
class CanaryAlarm(AlarmControlPanel):
|
|
"""Representation of a Canary alarm control panel."""
|
|
|
|
def __init__(self, data, location_id):
|
|
"""Initialize a Canary security camera."""
|
|
self._data = data
|
|
self._location_id = location_id
|
|
|
|
@property
|
|
def name(self):
|
|
"""Return the name of the alarm."""
|
|
location = self._data.get_location(self._location_id)
|
|
return location.name
|
|
|
|
@property
|
|
def state(self):
|
|
"""Return the state of the device."""
|
|
from canary.api import LOCATION_MODE_AWAY, LOCATION_MODE_HOME, \
|
|
LOCATION_MODE_NIGHT
|
|
|
|
location = self._data.get_location(self._location_id)
|
|
|
|
if location.is_private:
|
|
return STATE_ALARM_DISARMED
|
|
|
|
mode = location.mode
|
|
if mode.name == LOCATION_MODE_AWAY:
|
|
return STATE_ALARM_ARMED_AWAY
|
|
elif mode.name == LOCATION_MODE_HOME:
|
|
return STATE_ALARM_ARMED_HOME
|
|
elif mode.name == LOCATION_MODE_NIGHT:
|
|
return STATE_ALARM_ARMED_NIGHT
|
|
return None
|
|
|
|
@property
|
|
def device_state_attributes(self):
|
|
"""Return the state attributes."""
|
|
location = self._data.get_location(self._location_id)
|
|
return {
|
|
'private': location.is_private
|
|
}
|
|
|
|
def alarm_disarm(self, code=None):
|
|
"""Send disarm command."""
|
|
location = self._data.get_location(self._location_id)
|
|
self._data.set_location_mode(self._location_id, location.mode.name,
|
|
True)
|
|
|
|
def alarm_arm_home(self, code=None):
|
|
"""Send arm home command."""
|
|
from canary.api import LOCATION_MODE_HOME
|
|
self._data.set_location_mode(self._location_id, LOCATION_MODE_HOME)
|
|
|
|
def alarm_arm_away(self, code=None):
|
|
"""Send arm away command."""
|
|
from canary.api import LOCATION_MODE_AWAY
|
|
self._data.set_location_mode(self._location_id, LOCATION_MODE_AWAY)
|
|
|
|
def alarm_arm_night(self, code=None):
|
|
"""Send arm night command."""
|
|
from canary.api import LOCATION_MODE_NIGHT
|
|
self._data.set_location_mode(self._location_id, LOCATION_MODE_NIGHT)
|