1 """Switch support for Melnor Bluetooth water timer."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
9 from melnor_bluetooth.device
import Valve
14 SwitchEntityDescription,
20 from .const
import DOMAIN
21 from .coordinator
import MelnorDataUpdateCoordinator
22 from .entity
import MelnorZoneEntity, get_entities_for_valves
25 @dataclass(frozen=True, kw_only=True)
27 """Describes Melnor switch entity."""
29 on_off_fn: Callable[[Valve, bool], Coroutine[Any, Any,
None]]
30 state_fn: Callable[[Valve], Any]
33 ZONE_ENTITY_DESCRIPTIONS = [
35 device_class=SwitchDeviceClass.SWITCH,
37 translation_key=
"manual",
39 on_off_fn=
lambda valve, bool: valve.set_is_watering(bool),
40 state_fn=
lambda valve: valve.is_watering,
43 device_class=SwitchDeviceClass.SWITCH,
45 translation_key=
"frequency",
46 on_off_fn=
lambda valve, bool: valve.set_frequency_enabled(bool),
47 state_fn=
lambda valve: valve.schedule_enabled,
54 config_entry: ConfigEntry,
55 async_add_entities: AddEntitiesCallback,
57 """Set up the switch platform."""
59 coordinator: MelnorDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
62 get_entities_for_valves(
64 ZONE_ENTITY_DESCRIPTIONS,
66 coordinator, description, valve
73 """A switch implementation for a melnor device."""
75 entity_description: MelnorSwitchEntityDescription
79 coordinator: MelnorDataUpdateCoordinator,
80 entity_description: MelnorSwitchEntityDescription,
83 """Initialize a switch for a melnor device."""
84 super().
__init__(coordinator, entity_description, valve)
88 """Return true if device is on."""
92 """Turn the device on."""
97 """Turn the device off."""
None async_turn_on(self, **Any kwargs)
None async_turn_off(self, **Any kwargs)
None __init__(self, MelnorDataUpdateCoordinator coordinator, MelnorSwitchEntityDescription entity_description, Valve valve)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)