1 """Support for Overkiz switches."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
9 from pyoverkiz.enums
import OverkizCommand, OverkizCommandParam, OverkizState
10 from pyoverkiz.enums.ui
import UIClass, UIWidget
11 from pyoverkiz.types
import StateType
as OverkizStateType
16 SwitchEntityDescription,
23 from .
import HomeAssistantOverkizData
24 from .const
import DOMAIN
25 from .entity
import OverkizDescriptiveEntity
28 @dataclass(frozen=True, kw_only=True)
30 """Class to describe an Overkiz switch."""
34 is_on: Callable[[Callable[[str], OverkizStateType]], bool] |
None =
None
35 turn_on_args: OverkizStateType | list[OverkizStateType] |
None =
None
36 turn_off_args: OverkizStateType | list[OverkizStateType] |
None =
None
39 SWITCH_DESCRIPTIONS: list[OverkizSwitchDescription] = [
41 key=UIWidget.DOMESTIC_HOT_WATER_TANK,
42 turn_on=OverkizCommand.SET_FORCE_HEATING,
43 turn_on_args=OverkizCommandParam.ON,
44 turn_off=OverkizCommand.SET_FORCE_HEATING,
45 turn_off_args=OverkizCommandParam.OFF,
46 is_on=
lambda select_state: (
47 select_state(OverkizState.IO_FORCE_HEATING) == OverkizCommandParam.ON
49 icon=
"mdi:water-boiler",
53 turn_on=OverkizCommand.ON,
54 turn_off=OverkizCommand.OFF,
55 is_on=
lambda select_state: (
56 select_state(OverkizState.CORE_ON_OFF) == OverkizCommandParam.ON
58 device_class=SwitchDeviceClass.OUTLET,
61 key=UIClass.SWIMMING_POOL,
62 turn_on=OverkizCommand.ON,
63 turn_off=OverkizCommand.OFF,
64 is_on=
lambda select_state: (
65 select_state(OverkizState.CORE_ON_OFF) == OverkizCommandParam.ON
70 key=UIWidget.RTD_INDOOR_SIREN,
71 turn_on=OverkizCommand.ON,
72 turn_off=OverkizCommand.OFF,
76 key=UIWidget.RTD_OUTDOOR_SIREN,
77 turn_on=OverkizCommand.ON,
78 turn_off=OverkizCommand.OFF,
82 key=UIWidget.STATELESS_ALARM_CONTROLLER,
83 turn_on=OverkizCommand.ALARM_ON,
84 turn_off=OverkizCommand.ALARM_OFF,
85 icon=
"mdi:shield-lock",
88 key=UIWidget.STATELESS_EXTERIOR_HEATING,
89 turn_on=OverkizCommand.ON,
90 turn_off=OverkizCommand.OFF,
94 key=UIWidget.MY_FOX_SECURITY_CAMERA,
95 name=
"Camera shutter",
96 turn_on=OverkizCommand.OPEN,
97 turn_off=OverkizCommand.CLOSE,
98 icon=
"mdi:camera-lock",
99 is_on=
lambda select_state: (
100 select_state(OverkizState.MYFOX_SHUTTER_STATUS)
101 == OverkizCommandParam.OPENED
103 entity_category=EntityCategory.CONFIG,
107 SUPPORTED_DEVICES = {
108 description.key: description
for description
in SWITCH_DESCRIPTIONS
115 async_add_entities: AddEntitiesCallback,
117 """Set up the Overkiz switch from a config entry."""
118 data: HomeAssistantOverkizData = hass.data[DOMAIN][entry.entry_id]
126 for device
in data.platforms[Platform.SWITCH]
128 description := SUPPORTED_DEVICES.get(device.widget)
129 or SUPPORTED_DEVICES.get(device.ui_class)
135 """Representation of an Overkiz Switch."""
137 entity_description: OverkizSwitchDescription
141 """Return True if entity is on."""
148 """Turn the entity on."""
149 await self.
executorexecutor.async_execute_command(
155 """Turn the entity off."""
156 await self.
executorexecutor.async_execute_command(
None async_turn_on(self, **Any kwargs)
None async_turn_off(self, **Any kwargs)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)