101 lines
2.9 KiB
Python
101 lines
2.9 KiB
Python
"""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
|