mirror of https://github.com/home-assistant/core
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
"""Support for Balboa times."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import time
|
|
import itertools
|
|
from typing import Any
|
|
|
|
from pybalboa import SpaClient
|
|
|
|
from homeassistant.components.time import TimeEntity
|
|
from homeassistant.const import EntityCategory
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|
|
|
from . import BalboaConfigEntry
|
|
from .entity import BalboaEntity
|
|
|
|
FILTER_CYCLE = "filter_cycle_"
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
entry: BalboaConfigEntry,
|
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
|
) -> None:
|
|
"""Set up the spa's times."""
|
|
spa = entry.runtime_data
|
|
async_add_entities(
|
|
BalboaTimeEntity(spa, index, period)
|
|
for index, period in itertools.product((1, 2), ("start", "end"))
|
|
)
|
|
|
|
|
|
class BalboaTimeEntity(BalboaEntity, TimeEntity):
|
|
"""Representation of a Balboa time entity."""
|
|
|
|
entity_category = EntityCategory.CONFIG
|
|
|
|
def __init__(self, spa: SpaClient, index: int, period: str) -> None:
|
|
"""Initialize a Balboa time entity."""
|
|
super().__init__(spa, f"{FILTER_CYCLE}{index}_{period}")
|
|
self.index = index
|
|
self.period = period
|
|
self._attr_translation_key = f"{FILTER_CYCLE}{period}"
|
|
self._attr_translation_placeholders = {"index": str(index)}
|
|
|
|
@property
|
|
def native_value(self) -> time | None:
|
|
"""Return the value reported by the time."""
|
|
return getattr(self._client, f"{FILTER_CYCLE}{self.index}_{self.period}")
|
|
|
|
async def async_set_value(self, value: time) -> None:
|
|
"""Change the time."""
|
|
args: dict[str, Any] = {self.period: value}
|
|
await self._client.configure_filter_cycle(self.index, **args)
|