Modernize Sleepiq and add new entities (#66336)

Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
Keilin Bickar 2022-02-18 13:50:44 -05:00 committed by GitHub
parent beb30a1ff1
commit a367d2be40
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 330 additions and 400 deletions

View file

@ -1,10 +1,15 @@
"""Support for SleepIQ sensors."""
"""Support for SleepIQ Sensor."""
from __future__ import annotations
from asyncsleepiq import SleepIQBed, SleepIQSleeper
from homeassistant.components.sensor import SensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import BED, DOMAIN, SIDES, SLEEP_NUMBER
from .const import DOMAIN, SLEEP_NUMBER
from .coordinator import SleepIQDataUpdateCoordinator
from .entity import SleepIQSensor
@ -17,27 +22,27 @@ async def async_setup_entry(
"""Set up the SleepIQ bed sensors."""
coordinator: SleepIQDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
SleepNumberSensor(coordinator, bed_id, side)
for side in SIDES
for bed_id in coordinator.data
if getattr(coordinator.data[bed_id][BED], side) is not None
SleepNumberSensorEntity(coordinator, bed, sleeper)
for bed in coordinator.client.beds.values()
for sleeper in bed.sleepers
)
class SleepNumberSensor(SleepIQSensor, SensorEntity):
"""Implementation of a SleepIQ sensor."""
class SleepNumberSensorEntity(SleepIQSensor, SensorEntity):
"""Representation of an SleepIQ Entity with CoordinatorEntity."""
_attr_icon = "mdi:bed"
def __init__(
self,
coordinator: SleepIQDataUpdateCoordinator,
bed_id: str,
side: str,
coordinator: DataUpdateCoordinator,
bed: SleepIQBed,
sleeper: SleepIQSleeper,
) -> None:
"""Initialize the SleepIQ sleep number sensor."""
super().__init__(coordinator, bed_id, side, SLEEP_NUMBER)
"""Initialize the sensor."""
super().__init__(coordinator, bed, sleeper, SLEEP_NUMBER)
@callback
def _async_update_attrs(self) -> None:
"""Update sensor attributes."""
super()._async_update_attrs()
self._attr_native_value = self.side_data.sleep_number
self._attr_native_value = self.sleeper.sleep_number