"""Support for Owlet sensors.""" from datetime import timedelta from homeassistant.helpers.entity import Entity from homeassistant.util import dt as dt_util from . import DOMAIN as OWLET_DOMAIN from .const import SENSOR_HEART_RATE, SENSOR_OXYGEN_LEVEL SCAN_INTERVAL = timedelta(seconds=120) SENSOR_CONDITIONS = { SENSOR_OXYGEN_LEVEL: { 'name': 'Oxygen Level', 'device_class': None }, SENSOR_HEART_RATE: { 'name': 'Heart Rate', 'device_class': None } } def setup_platform(hass, config, add_entities, discovery_info=None): """Set up owlet binary sensor.""" if discovery_info is None: return device = hass.data[OWLET_DOMAIN] entities = [] for condition in SENSOR_CONDITIONS: if condition in device.monitor: entities.append(OwletSensor(device, condition)) add_entities(entities, True) class OwletSensor(Entity): """Representation of Owlet sensor.""" def __init__(self, device, condition): """Init owlet binary sensor.""" self._device = device self._condition = condition self._state = None self._prop_expiration = None self.is_charging = None self.battery_level = None self.sock_off = None self.sock_connection = None self._movement = None @property def name(self): """Return sensor name.""" return '{} {}'.format(self._device.name, SENSOR_CONDITIONS[self._condition]['name']) @property def state(self): """Return current state of sensor.""" return self._state @property def device_class(self): """Return the device class.""" return SENSOR_CONDITIONS[self._condition]['device_class'] @property def device_state_attributes(self): """Return state attributes.""" attributes = { 'battery_charging': self.is_charging, 'battery_level': self.battery_level, 'sock_off': self.sock_off, 'sock_connection': self.sock_connection } return attributes def update(self): """Update state of sensor.""" self.is_charging = self._device.device.charge_status self.battery_level = self._device.device.batt_level self.sock_off = self._device.device.sock_off self.sock_connection = self._device.device.sock_connection self._movement = self._device.device.movement self._prop_expiration = self._device.device.prop_expire_time value = getattr(self._device.device, self._condition) if self._condition == 'batt_level': self._state = min(100, value) return if not self._device.device.base_station_on \ or self._device.device.charge_status > 0 \ or self._prop_expiration < dt_util.now().timestamp() \ or self._movement: value = None self._state = value