1 """Platform for Schlage switch integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from functools
import partial
10 from pyschlage.lock
import Lock
15 SwitchEntityDescription,
22 from .const
import DOMAIN
23 from .coordinator
import LockData, SchlageDataUpdateCoordinator
24 from .entity
import SchlageEntity
27 @dataclass(frozen=True, kw_only=True)
29 """Entity description for a Schlage switch."""
31 on_fn: Callable[[Lock],
None]
32 off_fn: Callable[[Lock],
None]
33 value_fn: Callable[[Lock], bool]
36 SWITCHES: tuple[SchlageSwitchEntityDescription, ...] = (
39 translation_key=
"beeper",
40 device_class=SwitchDeviceClass.SWITCH,
41 entity_category=EntityCategory.CONFIG,
42 on_fn=
lambda lock: lock.set_beeper(
True),
43 off_fn=
lambda lock: lock.set_beeper(
False),
44 value_fn=
lambda lock: lock.beeper_enabled,
48 translation_key=
"lock_and_leave",
49 device_class=SwitchDeviceClass.SWITCH,
50 entity_category=EntityCategory.CONFIG,
51 on_fn=
lambda lock: lock.set_lock_and_leave(
True),
52 off_fn=
lambda lock: lock.set_lock_and_leave(
False),
53 value_fn=
lambda lock: lock.lock_and_leave_enabled,
60 config_entry: ConfigEntry,
61 async_add_entities: AddEntitiesCallback,
63 """Set up switches based on a config entry."""
64 coordinator: SchlageDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
69 coordinator=coordinator,
70 description=description,
73 for device_id
in locks
74 for description
in SWITCHES
78 coordinator.new_locks_callbacks.append(_add_new_locks)
82 """Schlage switch entity."""
84 entity_description: SchlageSwitchEntityDescription
88 coordinator: SchlageDataUpdateCoordinator,
89 description: SchlageSwitchEntityDescription,
92 """Initialize a SchlageSwitch."""
93 super().
__init__(coordinator=coordinator, device_id=device_id)
99 """Return True if the switch is on."""
103 """Turn the switch on."""
104 await self.
hasshasshass.async_add_executor_job(
110 """Turn the switch off."""
111 await self.
hasshasshass.async_add_executor_job(
None async_turn_on(self, **Any kwargs)
None async_turn_off(self, **Any kwargs)
None __init__(self, SchlageDataUpdateCoordinator coordinator, SchlageSwitchEntityDescription description, str device_id)
None async_request_refresh(self)
None _add_new_locks(dict[str, LockData] locks)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)