mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-05 10:45:21 +03:00
Add presets
This commit is contained in:
parent
25aa438745
commit
f744827737
@ -220,8 +220,13 @@ class Dispatcher:
|
|||||||
def _on_ptz_command(self, camera_name: str, payload: str) -> None:
|
def _on_ptz_command(self, camera_name: str, payload: str) -> None:
|
||||||
"""Callback for ptz topic."""
|
"""Callback for ptz topic."""
|
||||||
try:
|
try:
|
||||||
command = OnvifCommandEnum[payload.lower()]
|
if "preset" in payload.lower():
|
||||||
self.onvif.handle_command(camera_name, command)
|
param = payload.lower().split("-")[1]
|
||||||
|
self.onvif.handle_command(camera_name, OnvifCommandEnum.preset, param)
|
||||||
|
else:
|
||||||
|
command = OnvifCommandEnum[payload.lower()]
|
||||||
|
self.onvif.handle_command(camera_name, command)
|
||||||
|
|
||||||
logger.info(f"Setting ptz command to {command} for {camera_name}")
|
logger.info(f"Setting ptz command to {command} for {camera_name}")
|
||||||
except KeyError as k:
|
except KeyError as k:
|
||||||
logger.error(f"Invalid PTZ command {payload}: {k.with_traceback()}")
|
logger.error(f"Invalid PTZ command {payload}: {k.with_traceback()}")
|
||||||
|
|||||||
@ -19,6 +19,7 @@ class OnvifCommandEnum(str, Enum):
|
|||||||
move_left = "move_left"
|
move_left = "move_left"
|
||||||
move_right = "move_right"
|
move_right = "move_right"
|
||||||
move_up = "move_up"
|
move_up = "move_up"
|
||||||
|
preset = "preset"
|
||||||
stop = "stop"
|
stop = "stop"
|
||||||
|
|
||||||
|
|
||||||
@ -64,7 +65,6 @@ class OnvifController:
|
|||||||
self.cams[camera_name]["init"] = True
|
self.cams[camera_name]["init"] = True
|
||||||
|
|
||||||
def _stop(self, camera_name: str) -> None:
|
def _stop(self, camera_name: str) -> None:
|
||||||
logger.error(f"Stop onvif")
|
|
||||||
onvif: ONVIFCamera = self.cams[camera_name]["onvif"]
|
onvif: ONVIFCamera = self.cams[camera_name]["onvif"]
|
||||||
move_request = self.cams[camera_name]["move_request"]
|
move_request = self.cams[camera_name]["move_request"]
|
||||||
onvif.get_service("ptz").Stop(
|
onvif.get_service("ptz").Stop(
|
||||||
@ -77,7 +77,6 @@ class OnvifController:
|
|||||||
self.cams[camera_name]["active"] = False
|
self.cams[camera_name]["active"] = False
|
||||||
|
|
||||||
def _move(self, camera_name: str, command: OnvifCommandEnum) -> None:
|
def _move(self, camera_name: str, command: OnvifCommandEnum) -> None:
|
||||||
logger.error(f"Move onvif {command}")
|
|
||||||
if self.cams[camera_name]["active"]:
|
if self.cams[camera_name]["active"]:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"{camera_name} is already performing an action, stopping..."
|
f"{camera_name} is already performing an action, stopping..."
|
||||||
@ -109,7 +108,27 @@ class OnvifController:
|
|||||||
|
|
||||||
onvif.get_service("ptz").ContinuousMove(move_request)
|
onvif.get_service("ptz").ContinuousMove(move_request)
|
||||||
|
|
||||||
def handle_command(self, camera_name, command: OnvifCommandEnum) -> None:
|
def _move_to_preset(self, camera_name: str, preset: str) -> None:
|
||||||
|
if not preset in self.cams[camera_name]["presets"]:
|
||||||
|
logger.error(f"{preset} is not a valid preset for {camera_name}")
|
||||||
|
return
|
||||||
|
|
||||||
|
self.cams[camera_name]["active"] = True
|
||||||
|
move_request = self.cams[camera_name]["move_request"]
|
||||||
|
onvif: ONVIFCamera = self.cams[camera_name]["onvif"]
|
||||||
|
preset_token = self.cams[camera_name]["presets"][preset]
|
||||||
|
onvif.get_service("ptz").GotoPreset(
|
||||||
|
{
|
||||||
|
"ProfileToken": move_request.ProfileToken,
|
||||||
|
"PresetToken": preset_token,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.cams[camera_name]["active"] = False
|
||||||
|
|
||||||
|
|
||||||
|
def handle_command(
|
||||||
|
self, camera_name: str, command: OnvifCommandEnum, param: str
|
||||||
|
) -> None:
|
||||||
if camera_name not in self.cams.keys():
|
if camera_name not in self.cams.keys():
|
||||||
logger.error(f"Onvif is not setup for {camera_name}")
|
logger.error(f"Onvif is not setup for {camera_name}")
|
||||||
return
|
return
|
||||||
@ -117,10 +136,12 @@ class OnvifController:
|
|||||||
if not self.cams[camera_name]["init"]:
|
if not self.cams[camera_name]["init"]:
|
||||||
self._init_onvif(camera_name)
|
self._init_onvif(camera_name)
|
||||||
|
|
||||||
if command == OnvifCommandEnum.stop:
|
if command == OnvifCommandEnum.init:
|
||||||
self._stop(camera_name)
|
|
||||||
elif command == OnvifCommandEnum.init:
|
|
||||||
# already init
|
# already init
|
||||||
return
|
return
|
||||||
|
elif command == OnvifCommandEnum.stop:
|
||||||
|
self._stop(camera_name)
|
||||||
|
elif command == OnvifCommandEnum.preset:
|
||||||
|
self._move_to_preset(camera_name, param)
|
||||||
else:
|
else:
|
||||||
self._move(camera_name, command)
|
self._move(camera_name, command)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user