1 """Support for Android IP Webcam settings."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
9 from pydroid_ipcam
import PyDroidIPCam
16 from .coordinator
import AndroidIPCamConfigEntry, AndroidIPCamDataUpdateCoordinator
17 from .entity
import AndroidIPCamBaseEntity
20 @dataclass(frozen=True, kw_only=True)
22 """Entity description class for Android IP Webcam switches."""
24 on_func: Callable[[PyDroidIPCam], Coroutine[Any, Any, bool]]
25 off_func: Callable[[PyDroidIPCam], Coroutine[Any, Any, bool]]
28 SWITCH_TYPES: tuple[AndroidIPWebcamSwitchEntityDescription, ...] = (
31 translation_key=
"exposure_lock",
33 entity_category=EntityCategory.CONFIG,
34 on_func=
lambda ipcam: ipcam.change_setting(
"exposure_lock",
True),
35 off_func=
lambda ipcam: ipcam.change_setting(
"exposure_lock",
False),
39 translation_key=
"ffc",
40 name=
"Front-facing camera",
41 entity_category=EntityCategory.CONFIG,
42 on_func=
lambda ipcam: ipcam.change_setting(
"ffc",
True),
43 off_func=
lambda ipcam: ipcam.change_setting(
"ffc",
False),
47 translation_key=
"focus",
49 entity_category=EntityCategory.CONFIG,
50 on_func=
lambda ipcam: ipcam.focus(activate=
True),
51 off_func=
lambda ipcam: ipcam.focus(activate=
False),
55 translation_key=
"gps_active",
57 entity_category=EntityCategory.CONFIG,
58 on_func=
lambda ipcam: ipcam.change_setting(
"gps_active",
True),
59 off_func=
lambda ipcam: ipcam.change_setting(
"gps_active",
False),
63 translation_key=
"motion_detect",
64 name=
"Motion detection",
65 entity_category=EntityCategory.CONFIG,
66 on_func=
lambda ipcam: ipcam.change_setting(
"motion_detect",
True),
67 off_func=
lambda ipcam: ipcam.change_setting(
"motion_detect",
False),
71 translation_key=
"night_vision",
73 entity_category=EntityCategory.CONFIG,
74 on_func=
lambda ipcam: ipcam.change_setting(
"night_vision",
True),
75 off_func=
lambda ipcam: ipcam.change_setting(
"night_vision",
False),
79 translation_key=
"overlay",
81 entity_category=EntityCategory.CONFIG,
82 on_func=
lambda ipcam: ipcam.change_setting(
"overlay",
True),
83 off_func=
lambda ipcam: ipcam.change_setting(
"overlay",
False),
87 translation_key=
"torch",
89 entity_category=EntityCategory.CONFIG,
90 on_func=
lambda ipcam: ipcam.torch(activate=
True),
91 off_func=
lambda ipcam: ipcam.torch(activate=
False),
94 key=
"whitebalance_lock",
95 translation_key=
"whitebalance_lock",
96 name=
"White balance lock",
97 entity_category=EntityCategory.CONFIG,
98 on_func=
lambda ipcam: ipcam.change_setting(
"whitebalance_lock",
True),
99 off_func=
lambda ipcam: ipcam.change_setting(
"whitebalance_lock",
False),
102 key=
"video_recording",
103 translation_key=
"video_recording",
104 name=
"Video recording",
105 entity_category=EntityCategory.CONFIG,
106 on_func=
lambda ipcam: ipcam.record(record=
True),
107 off_func=
lambda ipcam: ipcam.record(record=
False),
114 config_entry: AndroidIPCamConfigEntry,
115 async_add_entities: AddEntitiesCallback,
117 """Set up the IP Webcam switches from config entry."""
119 coordinator = config_entry.runtime_data
122 for switch
in SWITCH_TYPES
123 if switch.key
in coordinator.cam.enabled_settings
128 for description
in switch_types
134 """Representation of a IP Webcam setting."""
136 entity_description: AndroidIPWebcamSwitchEntityDescription
140 coordinator: AndroidIPCamDataUpdateCoordinator,
141 description: AndroidIPWebcamSwitchEntityDescription,
143 """Initialize the sensor."""
146 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.config_entry.entry_id}-{description.key}"
150 """Return if settings is on or off."""
154 """Turn device on."""
159 """Turn device off."""
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None __init__(self, AndroidIPCamDataUpdateCoordinator coordinator, AndroidIPWebcamSwitchEntityDescription description)
None async_request_refresh(self)
None async_setup_entry(HomeAssistant hass, AndroidIPCamConfigEntry config_entry, AddEntitiesCallback async_add_entities)