This commit is contained in:
Nick Mowen 2022-12-15 09:42:46 -07:00
parent f1c5659d1e
commit 11ffe07ae3
4 changed files with 36 additions and 2 deletions

View File

@ -174,6 +174,7 @@ class FrigateApp:
self.stats_tracking,
self.detected_frames_processor,
self.storage_maintainer,
self.onvif_controller,
self.plus_api,
)

View File

@ -36,6 +36,7 @@ from frigate.const import CLIPS_DIR, MAX_SEGMENT_DURATION, RECORD_DIR
from frigate.models import Event, Recordings, Timeline
from frigate.object_processing import TrackedObject
from frigate.plus import PlusApi
from frigate.ptz import OnvifController
from frigate.stats import stats_snapshot
from frigate.util import (
clean_camera_user_pass,
@ -59,6 +60,7 @@ def create_app(
stats_tracking,
detected_frames_processor,
storage_maintainer: StorageMaintainer,
onvif: OnvifController,
plus_api: PlusApi,
):
app = Flask(__name__)
@ -77,6 +79,7 @@ def create_app(
app.stats_tracking = stats_tracking
app.detected_frames_processor = detected_frames_processor
app.storage_maintainer = storage_maintainer
app.onvif = onvif
app.plus_api = plus_api
app.camera_error_image = None
app.hwaccel_errors = []
@ -994,6 +997,14 @@ def mjpeg_feed(camera_name):
return "Camera named {} not found".format(camera_name), 404
@bp.route("/<camera_name>/ptz/info")
def camera_ptz_info(camera_name):
if camera_name in current_app.frigate_config.cameras:
return jsonify(current_app.onvif.get_camera_info(camera_name))
else:
return "Camera named {} not found".format(camera_name), 404
@bp.route("/<camera_name>/latest.jpg")
def latest_frame(camera_name):
draw_options = {

View File

@ -65,7 +65,15 @@ class OnvifController:
# get list of supported features
ptz_config = ptz.GetConfigurationOptions(request)
logger.error(f"ptz config is {ptz_config}")
supported_features = []
if ptz_config.get("Spaces", {}).get("ContinuousPanTiltVelocitySpace"):
supported_features.append("pt")
if ptz_config.get("Spaces", {}).get("ContinuousZoomVelocitySpace"):
supported_features.append("zoom")
self.cams[camera_name]["features"] = supported_features
self.cams[camera_name]["init"] = True
@ -171,3 +179,17 @@ class OnvifController:
self._zoom(camera_name, command)
else:
self._move(camera_name, command)
def get_camera_info(self, camera_name: str) -> dict[str, any]:
if camera_name not in self.cams.keys():
logger.error(f"Onvif is not setup for {camera_name}")
return {}
if not self.cams[camera_name]["init"]:
self._init_onvif(camera_name)
return {
"name": camera_name,
"features": self.cams[camera_name]["feautres"],
"presets": self.cams[camera_name]["presets"].keys(),
}