1 """Support for LaMetric switches."""
3 from __future__
import annotations
5 from collections.abc
import Awaitable, Callable
6 from dataclasses
import dataclass
9 from demetriek
import Device, LaMetricDevice
17 from .const
import DOMAIN
18 from .coordinator
import LaMetricDataUpdateCoordinator
19 from .entity
import LaMetricEntity
20 from .helpers
import lametric_exception_handler
23 @dataclass(frozen=True, kw_only=True)
25 """Class describing LaMetric switch entities."""
27 available_fn: Callable[[Device], bool] =
lambda device:
True
28 is_on_fn: Callable[[Device], bool]
29 set_fn: Callable[[LaMetricDevice, bool], Awaitable[Any]]
35 translation_key=
"bluetooth",
36 entity_category=EntityCategory.CONFIG,
37 available_fn=
lambda device: device.bluetooth.available,
38 is_on_fn=
lambda device: device.bluetooth.active,
39 set_fn=
lambda api, active: api.bluetooth(active=active),
47 async_add_entities: AddEntitiesCallback,
49 """Set up LaMetric switch based on a config entry."""
50 coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
53 coordinator=coordinator,
54 description=description,
56 for description
in SWITCHES
61 """Representation of a LaMetric switch."""
63 entity_description: LaMetricSwitchEntityDescription
67 coordinator: LaMetricDataUpdateCoordinator,
68 description: LaMetricSwitchEntityDescription,
70 """Initiate LaMetric Switch."""
73 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.data.serial_number}-{description.key}"
77 """Return if entity is available."""
84 """Return state of the switch."""
87 @lametric_exception_handler
89 """Turn the entity on."""
90 await self.
entity_descriptionentity_description.set_fn(self.coordinator.lametric,
True)
93 @lametric_exception_handler
95 """Turn the entity off."""
96 await self.
entity_descriptionentity_description.set_fn(self.coordinator.lametric,
False)
None async_turn_off(self, **Any kwargs)
None __init__(self, LaMetricDataUpdateCoordinator coordinator, LaMetricSwitchEntityDescription description)
None async_turn_on(self, **Any kwargs)
None async_request_refresh(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)