ha-alarm-clock/custom_components/reveil/switch.py
2026-09-20 20:48:17 +02:00

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)