Files
core/homeassistant/components/googlehome/sensor.py
T
2019-07-31 12:25:30 -07:00

92 lines
2.5 KiB
Python

"""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