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