Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support for Amcrest Switches."""
2 
3 from __future__ import annotations
4 
5 from typing import TYPE_CHECKING, Any
6 
7 from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
8 from homeassistant.const import CONF_NAME, CONF_SWITCHES
9 from homeassistant.core import HomeAssistant
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
12 
13 from .const import DATA_AMCREST, DEVICES
14 
15 if TYPE_CHECKING:
16  from . import AmcrestDevice
17 
18 PRIVACY_MODE_KEY = "privacy_mode"
19 
20 SWITCH_TYPES: tuple[SwitchEntityDescription, ...] = (
22  key=PRIVACY_MODE_KEY,
23  name="Privacy Mode",
24  icon="mdi:eye-off",
25  ),
26 )
27 
28 SWITCH_KEYS: list[str] = [desc.key for desc in SWITCH_TYPES]
29 
30 
32  hass: HomeAssistant,
33  config: ConfigType,
34  async_add_entities: AddEntitiesCallback,
35  discovery_info: DiscoveryInfoType | None = None,
36 ) -> None:
37  """Set up amcrest platform switches."""
38  if discovery_info is None:
39  return
40 
41  name = discovery_info[CONF_NAME]
42  device = hass.data[DATA_AMCREST][DEVICES][name]
43  switches = discovery_info[CONF_SWITCHES]
45  [
46  AmcrestSwitch(name, device, description)
47  for description in SWITCH_TYPES
48  if description.key in switches
49  ],
50  True,
51  )
52 
53 
55  """Representation of an Amcrest Camera Switch."""
56 
57  def __init__(
58  self,
59  name: str,
60  device: AmcrestDevice,
61  entity_description: SwitchEntityDescription,
62  ) -> None:
63  """Initialize switch."""
64  self._api_api = device.api
65  self.entity_descriptionentity_description = entity_description
66  self._attr_name_attr_name = f"{name} {entity_description.name}"
67 
68  @property
69  def available(self) -> bool:
70  """Return True if entity is available."""
71  return self._api_api.available
72 
73  async def async_turn_on(self, **kwargs: Any) -> None:
74  """Turn the switch on."""
75  await self._async_turn_switch_async_turn_switch(True)
76 
77  async def async_turn_off(self, **kwargs: Any) -> None:
78  """Turn the switch off."""
79  await self._async_turn_switch_async_turn_switch(False)
80 
81  async def _async_turn_switch(self, mode: bool) -> None:
82  """Set privacy mode."""
83  lower_str = str(mode).lower()
84  await self._api_api.async_command(
85  f"configManager.cgi?action=setConfig&LeLensMask[0].Enable={lower_str}"
86  )
87 
88  async def async_update(self) -> None:
89  """Update switch."""
90  io_res = (await self._api_api.async_privacy_config()).splitlines()[0].split("=")[1]
91  self._attr_is_on_attr_is_on = io_res == "true"
None __init__(self, str name, AmcrestDevice device, SwitchEntityDescription entity_description)
Definition: switch.py:62
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: switch.py:36