Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support turning on/off motion detection on Hikvision cameras."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 import hikvision.api
9 from hikvision.error import HikvisionError, MissingParamError
10 import voluptuous as vol
11 
13  PLATFORM_SCHEMA as SWITCH_PLATFORM_SCHEMA,
14  SwitchEntity,
15 )
16 from homeassistant.const import (
17  CONF_HOST,
18  CONF_NAME,
19  CONF_PASSWORD,
20  CONF_PORT,
21  CONF_USERNAME,
22  STATE_OFF,
23  STATE_ON,
24 )
25 from homeassistant.core import HomeAssistant
27 from homeassistant.helpers.entity_platform import AddEntitiesCallback
28 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
29 
30 # This is the last working version, please test before updating
31 
32 _LOGGING = logging.getLogger(__name__)
33 
34 DEFAULT_NAME = "Hikvision Camera Motion Detection"
35 DEFAULT_PASSWORD = "12345"
36 DEFAULT_PORT = 80
37 DEFAULT_USERNAME = "admin"
38 
39 PLATFORM_SCHEMA = SWITCH_PLATFORM_SCHEMA.extend(
40  {
41  vol.Required(CONF_HOST): cv.string,
42  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
43  vol.Optional(CONF_PASSWORD, default=DEFAULT_PASSWORD): cv.string,
44  vol.Optional(CONF_PORT): cv.port,
45  vol.Optional(CONF_USERNAME, default=DEFAULT_USERNAME): cv.string,
46  }
47 )
48 
49 
51  hass: HomeAssistant,
52  config: ConfigType,
53  add_entities: AddEntitiesCallback,
54  discovery_info: DiscoveryInfoType | None = None,
55 ) -> None:
56  """Set up Hikvision camera."""
57  host = config.get(CONF_HOST)
58  port = config.get(CONF_PORT)
59  name = config.get(CONF_NAME)
60  username = config.get(CONF_USERNAME)
61  password = config.get(CONF_PASSWORD)
62 
63  try:
64  hikvision_cam = hikvision.api.CreateDevice(
65  host, port=port, username=username, password=password, is_https=False
66  )
67  except MissingParamError as param_err:
68  _LOGGING.error("Missing required param: %s", param_err)
69  return
70  except HikvisionError as conn_err:
71  _LOGGING.error("Unable to connect: %s", conn_err)
72  return
73 
74  add_entities([HikvisionMotionSwitch(name, hikvision_cam)])
75 
76 
78  """Representation of a switch to toggle on/off motion detection."""
79 
80  def __init__(self, name, hikvision_cam):
81  """Initialize the switch."""
82  self._name_name = name
83  self._hikvision_cam_hikvision_cam = hikvision_cam
84  self._state_state = STATE_OFF
85 
86  @property
87  def name(self):
88  """Return the name of the device if any."""
89  return self._name_name
90 
91  @property
92  def is_on(self):
93  """Return true if device is on."""
94  return self._state_state == STATE_ON
95 
96  def turn_on(self, **kwargs: Any) -> None:
97  """Turn the device on."""
98  _LOGGING.info("Turning on Motion Detection ")
99  self._hikvision_cam_hikvision_cam.enable_motion_detection()
100 
101  def turn_off(self, **kwargs: Any) -> None:
102  """Turn the device off."""
103  _LOGGING.info("Turning off Motion Detection ")
104  self._hikvision_cam_hikvision_cam.disable_motion_detection()
105 
106  def update(self) -> None:
107  """Update Motion Detection state."""
108  enabled = self._hikvision_cam_hikvision_cam.is_motion_detection_enabled()
109  _LOGGING.info("enabled: %s", enabled)
110 
111  self._state_state = STATE_ON if enabled else STATE_OFF
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: switch.py:55