1 """Contains switches exposed by the Starlink integration."""
3 from __future__
import annotations
5 from collections.abc
import Awaitable, Callable
6 from dataclasses
import dataclass
12 SwitchEntityDescription,
18 from .const
import DOMAIN
19 from .coordinator
import StarlinkData, StarlinkUpdateCoordinator
20 from .entity
import StarlinkEntity
24 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
26 """Set up all binary sensors for this entry."""
27 coordinator = hass.data[DOMAIN][entry.entry_id]
34 @dataclass(frozen=True, kw_only=True)
36 """Describes a Starlink switch entity."""
38 value_fn: Callable[[StarlinkData], bool |
None]
39 turn_on_fn: Callable[[StarlinkUpdateCoordinator], Awaitable[
None]]
40 turn_off_fn: Callable[[StarlinkUpdateCoordinator], Awaitable[
None]]
44 """A SwitchEntity for Starlink devices. Handles creating unique IDs."""
46 entity_description: StarlinkSwitchEntityDescription
50 """Return True if entity is on."""
54 """Turn the entity on."""
58 """Turn the entity off."""
65 translation_key=
"stowed",
66 device_class=SwitchDeviceClass.SWITCH,
67 value_fn=
lambda data: data.status[
"state"] ==
"STOWED",
68 turn_on_fn=
lambda coordinator: coordinator.async_stow_starlink(
True),
69 turn_off_fn=
lambda coordinator: coordinator.async_stow_starlink(
False),
73 translation_key=
"sleep_schedule",
74 device_class=SwitchDeviceClass.SWITCH,
75 value_fn=
lambda data: data.sleep[2],
76 turn_on_fn=
lambda coordinator: coordinator.async_set_sleep_schedule_enabled(
79 turn_off_fn=
lambda coordinator: coordinator.async_set_sleep_schedule_enabled(
None async_turn_on(self, **Any kwargs)
None async_turn_off(self, **Any kwargs)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)