core/homeassistant/components/smarttub/binary_sensor.py

101 lines
3.0 KiB
Python
Raw Normal View History

"""Platform for binary sensor integration."""
import logging
from smarttub import SpaReminder
from homeassistant.components.binary_sensor import (
DEVICE_CLASS_CONNECTIVITY,
DEVICE_CLASS_PROBLEM,
BinarySensorEntity,
)
from .const import ATTR_REMINDERS, DOMAIN, SMARTTUB_CONTROLLER
from .entity import SmartTubEntity, SmartTubSensorBase
_LOGGER = logging.getLogger(__name__)
# whether the reminder has been snoozed (bool)
ATTR_REMINDER_SNOOZED = "snoozed"
async def async_setup_entry(hass, entry, async_add_entities):
"""Set up binary sensor entities for the binary sensors in the tub."""
controller = hass.data[DOMAIN][entry.entry_id][SMARTTUB_CONTROLLER]
entities = []
for spa in controller.spas:
entities.append(SmartTubOnline(controller.coordinator, spa))
entities.extend(
SmartTubReminder(controller.coordinator, spa, reminder)
for reminder in controller.coordinator.data[spa.id][ATTR_REMINDERS].values()
)
async_add_entities(entities)
class SmartTubOnline(SmartTubSensorBase, BinarySensorEntity):
"""A binary sensor indicating whether the spa is currently online (connected to the cloud)."""
def __init__(self, coordinator, spa):
"""Initialize the entity."""
super().__init__(coordinator, spa, "Online", "online")
2021-04-23 04:54:55 +00:00
@property
def entity_registry_enabled_default(self) -> bool:
"""Return if the entity should be enabled when first added to the entity registry.
This seems to be very noisy and not generally useful, so disable by default.
"""
return False
@property
def is_on(self) -> bool:
"""Return true if the binary sensor is on."""
return self._state is True
@property
def device_class(self) -> str:
"""Return the device class for this entity."""
return DEVICE_CLASS_CONNECTIVITY
class SmartTubReminder(SmartTubEntity, BinarySensorEntity):
"""Reminders for maintenance actions."""
def __init__(self, coordinator, spa, reminder):
"""Initialize the entity."""
super().__init__(
coordinator,
spa,
f"{reminder.name.title()} Reminder",
)
self.reminder_id = reminder.id
@property
def unique_id(self):
"""Return a unique id for this sensor."""
return f"{self.spa.id}-reminder-{self.reminder_id}"
@property
def reminder(self) -> SpaReminder:
"""Return the underlying SpaReminder object for this entity."""
2021-04-23 04:54:55 +00:00
return self.coordinator.data[self.spa.id][ATTR_REMINDERS][self.reminder_id]
@property
def is_on(self) -> bool:
"""Return whether the specified maintenance action needs to be taken."""
return self.reminder.remaining_days == 0
@property
def extra_state_attributes(self):
"""Return the state attributes."""
return {
ATTR_REMINDER_SNOOZED: self.reminder.snoozed,
}
@property
def device_class(self) -> str:
"""Return the device class for this entity."""
return DEVICE_CLASS_PROBLEM