1 """Support for Lektrico buttons."""
3 from collections.abc
import Callable, Coroutine
4 from dataclasses
import dataclass
7 from lektricowifi
import Device
12 ButtonEntityDescription,
18 from .
import LektricoConfigEntry, LektricoDeviceDataUpdateCoordinator
19 from .entity
import LektricoEntity
22 @dataclass(frozen=True, kw_only=True)
24 """Describes Lektrico button entity."""
26 press_fn: Callable[[Device], Coroutine[Any, Any, dict[Any, Any]]]
29 BUTTONS_FOR_CHARGERS: tuple[LektricoButtonEntityDescription, ...] = (
32 translation_key=
"charge_start",
33 entity_category=EntityCategory.CONFIG,
34 press_fn=
lambda device: device.send_charge_start(),
38 translation_key=
"charge_stop",
39 entity_category=EntityCategory.CONFIG,
40 press_fn=
lambda device: device.send_charge_stop(),
44 device_class=ButtonDeviceClass.RESTART,
45 entity_category=EntityCategory.CONFIG,
46 press_fn=
lambda device: device.send_reset(),
50 BUTTONS_FOR_LB_DEVICES: tuple[LektricoButtonEntityDescription, ...] = (
53 device_class=ButtonDeviceClass.RESTART,
54 entity_category=EntityCategory.CONFIG,
55 press_fn=
lambda device: device.send_reset(),
62 entry: LektricoConfigEntry,
63 async_add_entities: AddEntitiesCallback,
65 """Set up Lektrico charger based on a config entry."""
66 coordinator = entry.runtime_data
68 buttons_to_be_used: tuple[LektricoButtonEntityDescription, ...]
69 if coordinator.device_type
in (Device.TYPE_1P7K, Device.TYPE_3P22K):
70 buttons_to_be_used = BUTTONS_FOR_CHARGERS
72 buttons_to_be_used = BUTTONS_FOR_LB_DEVICES
78 f
"{entry.data[CONF_TYPE]}_{entry.data[ATTR_SERIAL_NUMBER]}",
80 for description
in buttons_to_be_used
85 """Defines an Lektrico button."""
87 entity_description: LektricoButtonEntityDescription
91 description: LektricoButtonEntityDescription,
92 coordinator: LektricoDeviceDataUpdateCoordinator,
95 """Initialize Lektrico button."""
96 super().
__init__(coordinator, device_name)
98 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.serial_number}-{description.key}"
101 """Press the button."""