1 """Support for Vivotek IP Cameras."""
3 from __future__
import annotations
5 from libpyvivotek
import VivotekCamera
6 import voluptuous
as vol
9 PLATFORM_SCHEMA
as CAMERA_PLATFORM_SCHEMA,
21 HTTP_BASIC_AUTHENTICATION,
22 HTTP_DIGEST_AUTHENTICATION,
29 CONF_FRAMERATE =
"framerate"
30 CONF_SECURITY_LEVEL =
"security_level"
31 CONF_STREAM_PATH =
"stream_path"
33 DEFAULT_CAMERA_BRAND =
"VIVOTEK"
34 DEFAULT_NAME =
"VIVOTEK Camera"
35 DEFAULT_EVENT_0_KEY =
"event_i0_enable"
36 DEFAULT_SECURITY_LEVEL =
"admin"
37 DEFAULT_STREAM_SOURCE =
"live.sdp"
39 PLATFORM_SCHEMA = CAMERA_PLATFORM_SCHEMA.extend(
41 vol.Required(CONF_IP_ADDRESS): cv.string,
42 vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
43 vol.Required(CONF_PASSWORD): cv.string,
44 vol.Required(CONF_USERNAME): cv.string,
45 vol.Optional(CONF_AUTHENTICATION, default=HTTP_BASIC_AUTHENTICATION): vol.In(
46 [HTTP_BASIC_AUTHENTICATION, HTTP_DIGEST_AUTHENTICATION]
48 vol.Optional(CONF_SSL, default=
False): cv.boolean,
49 vol.Optional(CONF_VERIFY_SSL, default=
True): cv.boolean,
50 vol.Optional(CONF_FRAMERATE, default=2): cv.positive_int,
51 vol.Optional(CONF_SECURITY_LEVEL, default=DEFAULT_SECURITY_LEVEL): cv.string,
52 vol.Optional(CONF_STREAM_PATH, default=DEFAULT_STREAM_SOURCE): cv.string,
60 add_entities: AddEntitiesCallback,
61 discovery_info: DiscoveryInfoType |
None =
None,
63 """Set up a Vivotek IP Camera."""
64 creds = f
"{config[CONF_USERNAME]}:{config[CONF_PASSWORD]}"
68 host=config[CONF_IP_ADDRESS],
69 port=(443
if config[CONF_SSL]
else 80),
70 verify_ssl=config[CONF_VERIFY_SSL],
71 usr=config[CONF_USERNAME],
72 pwd=config[CONF_PASSWORD],
73 digest_auth=config[CONF_AUTHENTICATION] == HTTP_DIGEST_AUTHENTICATION,
74 sec_lvl=config[CONF_SECURITY_LEVEL],
77 f
"rtsp://{creds}@{config[CONF_IP_ADDRESS]}:554/{config[CONF_STREAM_PATH]}"
84 """A Vivotek IP camera."""
86 _attr_supported_features = CameraEntityFeature.STREAM
88 def __init__(self, config, cam, stream_source):
89 """Initialize a Vivotek camera."""
96 self.
_name_name = config[CONF_NAME]
101 """Return the interval between frames of the mjpeg stream."""
105 self, width: int |
None =
None, height: int |
None =
None
107 """Return bytes of camera image."""
108 return self.
_cam_cam.snapshot()
112 """Return the name of this device."""
113 return self.
_name_name
116 """Return the source of the stream."""
121 """Return the camera motion detection status."""
125 """Disable motion detection in camera."""
126 response = self.
_cam_cam.set_param(DEFAULT_EVENT_0_KEY, 0)
130 """Enable motion detection in camera."""
131 response = self.
_cam_cam.set_param(DEFAULT_EVENT_0_KEY, 1)
136 """Return the camera brand."""
137 return DEFAULT_CAMERA_BRAND
141 """Return the camera model."""
145 """Update entity status."""
None disable_motion_detection(self)
bytes|None camera_image(self, int|None width=None, int|None height=None)
_motion_detection_enabled
def motion_detection_enabled(self)
def __init__(self, config, cam, stream_source)
None enable_motion_detection(self)
None add_entities(HomeAssistant hass, FreeboxRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)