[CHANGE] More resilient and slightly faster PTZ

This commit is contained in:
Daniël van den Berg 2023-10-01 02:40:37 +02:00 committed by GitHub
parent 9a4f970337
commit 1142e9ddd7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -99,6 +99,19 @@ class OnvifController:
None, None,
) )
# status request for autotracking and filling ptz-parameters
status_request = ptz.create_type("GetStatus")
status_request.ProfileToken = profile.token
self.cams[camera_name]["status_request"] = status_request
try:
status = ptz.GetStatus(status_request)
logger.debug(f"Onvif status config for {camera_name}: {status}")
except Exception as e:
logger.warning(
f"Unable to get status from camera: {camera_name}: {e}"
)
status = None
# autoracking relative panning/tilting needs a relative zoom value set to 0 # autoracking relative panning/tilting needs a relative zoom value set to 0
# if camera supports relative movement # if camera supports relative movement
if self.config.cameras[camera_name].onvif.autotracking.zooming: if self.config.cameras[camera_name].onvif.autotracking.zooming:
@ -122,9 +135,7 @@ class OnvifController:
move_request = ptz.create_type("RelativeMove") move_request = ptz.create_type("RelativeMove")
move_request.ProfileToken = profile.token move_request.ProfileToken = profile.token
if move_request.Translation is None and fov_space_id is not None: if move_request.Translation is None and fov_space_id is not None:
move_request.Translation = ptz.GetStatus( move_request.Translation = status.Position
{"ProfileToken": profile.token}
).Position
move_request.Translation.PanTilt.space = ptz_config["Spaces"][ move_request.Translation.PanTilt.space = ptz_config["Spaces"][
"RelativePanTiltTranslationSpace" "RelativePanTiltTranslationSpace"
][fov_space_id]["URI"] ][fov_space_id]["URI"]
@ -146,7 +157,7 @@ class OnvifController:
) )
if move_request.Speed is None: if move_request.Speed is None:
move_request.Speed = ptz.GetStatus({"ProfileToken": profile.token}).Position move_request.Speed = status.Position if status else None
self.cams[camera_name]["relative_move_request"] = move_request self.cams[camera_name]["relative_move_request"] = move_request
# setup absolute moving request for autotracking zooming # setup absolute moving request for autotracking zooming
@ -154,13 +165,6 @@ class OnvifController:
move_request.ProfileToken = profile.token move_request.ProfileToken = profile.token
self.cams[camera_name]["absolute_move_request"] = move_request self.cams[camera_name]["absolute_move_request"] = move_request
# status request for autotracking
status_request = ptz.create_type("GetStatus")
status_request.ProfileToken = profile.token
self.cams[camera_name]["status_request"] = status_request
status = ptz.GetStatus(status_request)
logger.debug(f"Onvif status config for {camera_name}: {status}")
# setup existing presets # setup existing presets
try: try:
presets: list[dict] = ptz.GetPresets({"ProfileToken": profile.token}) presets: list[dict] = ptz.GetPresets({"ProfileToken": profile.token})
@ -486,7 +490,10 @@ class OnvifController:
onvif: ONVIFCamera = self.cams[camera_name]["onvif"] onvif: ONVIFCamera = self.cams[camera_name]["onvif"]
status_request = self.cams[camera_name]["status_request"] status_request = self.cams[camera_name]["status_request"]
try:
status = onvif.get_service("ptz").GetStatus(status_request) status = onvif.get_service("ptz").GetStatus(status_request)
except Exception as e:
pass # We're unsupported, that'll be reported in the next check.
# there doesn't seem to be an onvif standard with this optional parameter # there doesn't seem to be an onvif standard with this optional parameter
# some cameras can report MoveStatus with or without PanTilt or Zoom attributes # some cameras can report MoveStatus with or without PanTilt or Zoom attributes