1 """The Flexit Nordic (BACnet) integration."""
3 import asyncio.exceptions
4 from collections.abc
import Awaitable, Callable
5 from dataclasses
import dataclass
8 from flexit_bacnet
import FlexitBACnet
9 from flexit_bacnet.bacnet
import DecodingError
14 SwitchEntityDescription,
21 from .
import FlexitCoordinator
22 from .const
import DOMAIN
23 from .entity
import FlexitEntity
26 @dataclass(kw_only=True, frozen=True)
28 """Describes a Flexit switch entity."""
30 is_on_fn: Callable[[FlexitBACnet], bool]
31 turn_on_fn: Callable[[FlexitBACnet], Awaitable[
None]]
32 turn_off_fn: Callable[[FlexitBACnet], Awaitable[
None]]
35 SWITCHES: tuple[FlexitSwitchEntityDescription, ...] = (
37 key=
"electric_heater",
38 translation_key=
"electric_heater",
39 is_on_fn=
lambda data: data.electric_heater,
40 turn_on_fn=
lambda data: data.enable_electric_heater(),
41 turn_off_fn=
lambda data: data.disable_electric_heater(),
48 config_entry: ConfigEntry,
49 async_add_entities: AddEntitiesCallback,
51 """Set up Flexit (bacnet) switch from a config entry."""
52 coordinator: FlexitCoordinator = hass.data[DOMAIN][config_entry.entry_id]
55 FlexitSwitch(coordinator, description)
for description
in SWITCHES
60 """Representation of a Flexit Switch."""
62 _attr_device_class = SwitchDeviceClass.SWITCH
64 entity_description: FlexitSwitchEntityDescription
68 coordinator: FlexitCoordinator,
69 entity_description: FlexitSwitchEntityDescription,
71 """Initialize Flexit (bacnet) switch."""
76 f
"{coordinator.device.serial_number}-{entity_description.key}"
81 """Return value of the switch."""
85 """Turn electric heater on."""
88 except (asyncio.exceptions.TimeoutError, ConnectionError, DecodingError)
as exc:
89 raise HomeAssistantError
from exc
94 """Turn electric heater off."""
97 except (asyncio.exceptions.TimeoutError, ConnectionError, DecodingError)
as exc:
98 raise HomeAssistantError
from exc
None async_turn_on(self, **Any kwargs)
None __init__(self, FlexitCoordinator coordinator, FlexitSwitchEntityDescription entity_description)
None async_turn_off(self, **Any kwargs)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)