82 lines
2.4 KiB
Python
82 lines
2.4 KiB
Python
|
"""
|
||
|
This component provides HA binary_sensor support for Abode Security System.
|
||
|
|
||
|
For more details about this platform, please refer to the documentation at
|
||
|
https://home-assistant.io/components/binary_sensor.abode/
|
||
|
"""
|
||
|
import logging
|
||
|
|
||
|
from homeassistant.components.abode import (CONF_ATTRIBUTION, DATA_ABODE)
|
||
|
from homeassistant.const import (ATTR_ATTRIBUTION)
|
||
|
from homeassistant.components.binary_sensor import (BinarySensorDevice)
|
||
|
|
||
|
DEPENDENCIES = ['abode']
|
||
|
|
||
|
_LOGGER = logging.getLogger(__name__)
|
||
|
|
||
|
# Sensor types: Name, device_class
|
||
|
SENSOR_TYPES = {
|
||
|
'Door Contact': 'opening',
|
||
|
'Motion Camera': 'motion',
|
||
|
}
|
||
|
|
||
|
|
||
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||
|
"""Set up a sensor for an Abode device."""
|
||
|
data = hass.data.get(DATA_ABODE)
|
||
|
|
||
|
sensors = []
|
||
|
for sensor in data.devices:
|
||
|
_LOGGER.debug('Sensor type %s', sensor.type)
|
||
|
if sensor.type in ['Door Contact', 'Motion Camera']:
|
||
|
sensors.append(AbodeBinarySensor(hass, data, sensor))
|
||
|
|
||
|
_LOGGER.debug('Adding %d sensors', len(sensors))
|
||
|
add_devices(sensors)
|
||
|
|
||
|
|
||
|
class AbodeBinarySensor(BinarySensorDevice):
|
||
|
"""A binary sensor implementation for Abode device."""
|
||
|
|
||
|
def __init__(self, hass, data, device):
|
||
|
"""Initialize a sensor for Abode device."""
|
||
|
super(AbodeBinarySensor, self).__init__()
|
||
|
self._device = device
|
||
|
|
||
|
@property
|
||
|
def should_poll(self):
|
||
|
"""Return the polling state."""
|
||
|
return True
|
||
|
|
||
|
@property
|
||
|
def name(self):
|
||
|
"""Return the name of the sensor."""
|
||
|
return "{0} {1}".format(self._device.type, self._device.name)
|
||
|
|
||
|
@property
|
||
|
def is_on(self):
|
||
|
"""Return True if the binary sensor is on."""
|
||
|
if self._device.type == 'Door Contact':
|
||
|
return self._device.status != 'Closed'
|
||
|
elif self._device.type == 'Motion Camera':
|
||
|
return self._device.get_value('motion_event') == '1'
|
||
|
|
||
|
@property
|
||
|
def device_class(self):
|
||
|
"""Return the class of the binary sensor."""
|
||
|
return SENSOR_TYPES.get(self._device.type)
|
||
|
|
||
|
@property
|
||
|
def device_state_attributes(self):
|
||
|
"""Return the state attributes."""
|
||
|
attrs = {}
|
||
|
attrs[ATTR_ATTRIBUTION] = CONF_ATTRIBUTION
|
||
|
attrs['device_id'] = self._device.device_id
|
||
|
attrs['battery_low'] = self._device.battery_low
|
||
|
|
||
|
return attrs
|
||
|
|
||
|
def update(self):
|
||
|
"""Update the device state."""
|
||
|
self._device.refresh()
|