diff --git a/homeassistant/components/point/__init__.py b/homeassistant/components/point/__init__.py index f223ded998f1a6..dc839756469dd3 100644 --- a/homeassistant/components/point/__init__.py +++ b/homeassistant/components/point/__init__.py @@ -20,7 +20,7 @@ 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 @@ def __init__(self, hass: HomeAssistantType, config_entry: ConfigEntry, 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 @@ async def new_device(device_id, component): 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 @@ def remove_webhook(self): """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 @@ def device_info(self): 'model': 'Point v{}'.format(device['hardware_version']), 'name': device['description'], 'sw_version': device['firmware']['installed'], + 'via_hub': (DOMAIN, device['home']), } @property diff --git a/homeassistant/components/point/alarm_control_panel.py b/homeassistant/components/point/alarm_control_panel.py new file mode 100644 index 00000000000000..10387fdc7c4da4 --- /dev/null +++ b/homeassistant/components/point/alarm_control_panel.py @@ -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', + } diff --git a/requirements_all.txt b/requirements_all.txt index b91036fa1f6e9d..21bd0f31640103 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -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