"""Support for Google Home alarm sensor.""" from datetime import timedelta import logging from homeassistant.const import DEVICE_CLASS_TIMESTAMP from homeassistant.helpers.entity import Entity import homeassistant.util.dt as dt_util from . import CLIENT, DOMAIN as GOOGLEHOME_DOMAIN, NAME SCAN_INTERVAL = timedelta(seconds=10) _LOGGER = logging.getLogger(__name__) ICON = 'mdi:alarm' SENSOR_TYPES = { 'timer': 'Timer', 'alarm': 'Alarm', } async def async_setup_platform( hass, config, async_add_entities, discovery_info=None): """Set up the googlehome sensor platform.""" if discovery_info is None: _LOGGER.warning( "To use this you need to configure the 'googlehome' component") return await hass.data[CLIENT].update_info(discovery_info['host']) data = hass.data[GOOGLEHOME_DOMAIN][discovery_info['host']] info = data.get('info', {}) devices = [] for condition in SENSOR_TYPES: device = GoogleHomeAlarm(hass.data[CLIENT], condition, discovery_info, info.get('name', NAME)) devices.append(device) async_add_entities(devices, True) class GoogleHomeAlarm(Entity): """Representation of a GoogleHomeAlarm.""" def __init__(self, client, condition, config, name): """Initialize the GoogleHomeAlarm sensor.""" self._host = config['host'] self._client = client self._condition = condition self._name = None self._state = None self._available = True self._name = "{} {}".format(name, SENSOR_TYPES[self._condition]) async def async_update(self): """Update the data.""" await self._client.update_alarms(self._host) data = self.hass.data[GOOGLEHOME_DOMAIN][self._host] alarms = data.get('alarms')[self._condition] if not alarms: self._available = False return self._available = True time_date = dt_util.utc_from_timestamp(min(element['fire_time'] for element in alarms) / 1000) self._state = time_date.isoformat() @property def state(self): """Return the state.""" return self._state @property def name(self): """Return the name.""" return self._name @property def device_class(self): """Return the device class.""" return DEVICE_CLASS_TIMESTAMP @property def available(self): """Return the availability state.""" return self._available @property def icon(self): """Return the icon.""" return ICON