Point alarm control (#20972)

* initial working example of alarm_control

* fixes for alarm_control

* arm home is the same as arm away

* updated documentation

* final fixes

* pypoint version up

* fixes for Martin
This commit is contained in:
Fredrik Erlandsson 2019-02-15 12:19:42 +01:00 committed by Martin Hjelmare
parent b44ff38f5a
commit f3786e2f2b
3 changed files with 95 additions and 2 deletions

View file

@ -20,7 +20,7 @@ from .const import (
CONF_WEBHOOK_URL, DOMAIN, EVENT_RECEIVED, POINT_DISCOVERY_NEW,
SCAN_INTERVAL, SIGNAL_UPDATE_ENTITY, SIGNAL_WEBHOOK)
REQUIREMENTS = ['pypoint==1.0.8']
REQUIREMENTS = ['pypoint==1.1.1']
_LOGGER = logging.getLogger(__name__)
@ -159,6 +159,7 @@ class MinutPointClient():
session):
"""Initialize the Minut data object."""
self._known_devices = set()
self._known_homes = set()
self._hass = hass
self._config_entry = config_entry
self._is_available = True
@ -194,6 +195,10 @@ class MinutPointClient():
device_id)
self._is_available = True
for home_id in self._client.homes:
if home_id not in self._known_homes:
await new_device(home_id, 'alarm_control_panel')
self._known_homes.add(home_id)
for device in self._client.devices:
if device.device_id not in self._known_devices:
for component in ('sensor', 'binary_sensor'):
@ -213,6 +218,19 @@ class MinutPointClient():
"""Remove the session webhook."""
return self._client.remove_webhook()
@property
def homes(self):
"""Return known homes."""
return self._client.homes
def alarm_disarm(self, home_id):
"""Send alarm disarm command."""
return self._client.alarm_disarm(home_id)
def alarm_arm(self, home_id):
"""Send alarm arm command."""
return self._client.alarm_arm(home_id)
class MinutPointEntity(Entity):
"""Base Entity used by the sensors."""
@ -286,6 +304,7 @@ class MinutPointEntity(Entity):
'model': 'Point v{}'.format(device['hardware_version']),
'name': device['description'],
'sw_version': device['firmware']['installed'],
'via_hub': (DOMAIN, device['home']),
}
@property

View file

@ -0,0 +1,74 @@
"""Support for Minut Point."""
import logging
from homeassistant.components.alarm_control_panel import (DOMAIN,
AlarmControlPanel)
from homeassistant.const import (STATE_ALARM_ARMED_AWAY, STATE_ALARM_DISARMED)
from homeassistant.components.point.const import (
DOMAIN as POINT_DOMAIN, POINT_DISCOVERY_NEW)
from homeassistant.helpers.dispatcher import async_dispatcher_connect
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up a Point's alarm_control_panel based on a config entry."""
async def async_discover_home(home_id):
"""Discover and add a discovered home."""
client = hass.data[POINT_DOMAIN][config_entry.entry_id]
async_add_entities([MinutPointAlarmControl(client, home_id)], True)
async_dispatcher_connect(
hass, POINT_DISCOVERY_NEW.format(DOMAIN, POINT_DOMAIN),
async_discover_home)
class MinutPointAlarmControl(AlarmControlPanel):
"""The platform class required by Home Assistant."""
def __init__(self, point_client, home_id):
"""Initialize the entity."""
self._client = point_client
self._home_id = home_id
@property
def _home(self):
"""Return the home object."""
return self._client.homes[self._home_id]
@property
def name(self):
"""Return name of the device."""
return self._home['name']
@property
def state(self):
"""Return state of the device."""
return STATE_ALARM_DISARMED if self._home[
'alarm_status'] == 'off' else STATE_ALARM_ARMED_AWAY
def alarm_disarm(self, code=None):
"""Send disarm command."""
status = self._client.alarm_disarm(self._home_id)
if status:
self._home['alarm_status'] = 'off'
def alarm_arm_away(self, code=None):
"""Send arm away command."""
status = self._client.alarm_arm(self._home_id)
if status:
self._home['alarm_status'] = 'on'
@property
def unique_id(self):
"""Return the unique id of the sensor."""
return 'point.{}'.format(self._home_id)
@property
def device_info(self):
"""Return a device description for device registry."""
return {
'identifiers': {(POINT_DOMAIN, self._home_id)},
'name': self.name,
'manufacturer': 'Minut',
}

View file

@ -1196,7 +1196,7 @@ pypck==0.5.9
pypjlink2==1.2.0
# homeassistant.components.point
pypoint==1.0.8
pypoint==1.1.1
# homeassistant.components.sensor.pollen
pypollencom==2.2.2