51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
"""Interrupteur global et un interrupteur par jour."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from homeassistant.components.switch import SwitchEntity
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
|
|
|
from .const import DAYS
|
|
from .entity import ReveilEntity
|
|
from .manager import ReveilConfigEntry, ReveilManager
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
entry: ReveilConfigEntry,
|
|
async_add_entities: AddEntitiesCallback,
|
|
) -> None:
|
|
manager = entry.runtime_data
|
|
async_add_entities(
|
|
[ReveilSwitch(manager, None), *(ReveilSwitch(manager, day) for day in DAYS)]
|
|
)
|
|
|
|
|
|
class ReveilSwitch(ReveilEntity, SwitchEntity):
|
|
"""Activation globale (day=None) ou activation d'un jour de la semaine."""
|
|
|
|
def __init__(self, manager: ReveilManager, day: str | None) -> None:
|
|
super().__init__(manager, "enabled" if day is None else f"day_{day}")
|
|
self._day = day
|
|
|
|
@property
|
|
def is_on(self) -> bool:
|
|
if self._day is None:
|
|
return self._manager.enabled
|
|
return self._manager.is_day_active(self._day)
|
|
|
|
async def async_turn_on(self, **kwargs: Any) -> None:
|
|
await self._set(True)
|
|
|
|
async def async_turn_off(self, **kwargs: Any) -> None:
|
|
await self._set(False)
|
|
|
|
async def _set(self, value: bool) -> None:
|
|
if self._day is None:
|
|
await self._manager.async_set_enabled(value)
|
|
else:
|
|
await self._manager.async_set_day_active(self._day, value)
|