1 """ONVIF switches for controlling cameras."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
14 from .const
import DOMAIN
15 from .device
import ONVIFDevice
16 from .entity
import ONVIFBaseEntity
17 from .models
import Profile
20 @dataclass(frozen=True, kw_only=True)
22 """Describes ONVIF switch entity."""
25 [ONVIFDevice], Callable[[Profile, Any], Coroutine[Any, Any,
None]]
27 turn_off_fn: Callable[
28 [ONVIFDevice], Callable[[Profile, Any], Coroutine[Any, Any,
None]]
32 supported_fn: Callable[[ONVIFDevice], bool]
35 SWITCHES: tuple[ONVIFSwitchEntityDescription, ...] = (
38 translation_key=
"autofocus",
39 turn_on_data={
"Focus": {
"AutoFocusMode":
"AUTO"}},
40 turn_off_data={
"Focus": {
"AutoFocusMode":
"MANUAL"}},
41 turn_on_fn=
lambda device: device.async_set_imaging_settings,
42 turn_off_fn=
lambda device: device.async_set_imaging_settings,
43 supported_fn=
lambda device: device.capabilities.imaging,
47 translation_key=
"ir_lamp",
48 turn_on_data={
"IrCutFilter":
"OFF"},
49 turn_off_data={
"IrCutFilter":
"ON"},
50 turn_on_fn=
lambda device: device.async_set_imaging_settings,
51 turn_off_fn=
lambda device: device.async_set_imaging_settings,
52 supported_fn=
lambda device: device.capabilities.imaging,
56 translation_key=
"wiper",
57 turn_on_data=
"tt:Wiper|On",
58 turn_off_data=
"tt:Wiper|Off",
59 turn_on_fn=
lambda device: device.async_run_aux_command,
60 turn_off_fn=
lambda device: device.async_run_aux_command,
61 supported_fn=
lambda device: device.capabilities.ptz,
68 config_entry: ConfigEntry,
69 async_add_entities: AddEntitiesCallback,
71 """Set up a ONVIF switch platform."""
72 device = hass.data[DOMAIN][config_entry.unique_id]
76 for description
in SWITCHES
77 if description.supported_fn(device)
82 """An ONVIF switch."""
84 entity_description: ONVIFSwitchEntityDescription
85 _attr_has_entity_name =
True
88 self, device: ONVIFDevice, description: ONVIFSwitchEntityDescription
90 """Initialize the switch."""
98 profile = self.device.profiles[0]
104 """Turn off switch."""
106 profile = self.device.profiles[0]
None __init__(self, ONVIFDevice device, ONVIFSwitchEntityDescription description)
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)