diff --git a/frigate/api/review.py b/frigate/api/review.py index 799f6059c..9f84fb9a1 100644 --- a/frigate/api/review.py +++ b/frigate/api/review.py @@ -356,13 +356,17 @@ def delete_reviews(ids: str): @ReviewBp.route("/review/activity") def review_activity(): """Get motion and audio activity.""" + cameras = request.args.get("cameras", "all") before = request.args.get("before", type=float, default=datetime.now().timestamp()) after = request.args.get( "after", type=float, default=(datetime.now() - timedelta(hours=1)).timestamp() ) - # get scale in seconds - scale = request.args.get("scale", type=int, default=30) + clauses = [(Recordings.start_time > after) & (Recordings.end_time < before)] + + if cameras != "all": + camera_list = cameras.split(",") + clauses.append((Recordings.camera << camera_list)) all_recordings: list[Recordings] = ( Recordings.select( @@ -372,7 +376,7 @@ def review_activity(): Recordings.motion, Recordings.dBFS, ) - .where((Recordings.start_time > after) & (Recordings.end_time < before)) + .where(reduce(operator.and_, clauses)) .order_by(Recordings.start_time.asc()) .iterator() ) @@ -390,6 +394,9 @@ def review_activity(): } ) + # get scale in seconds + scale = request.args.get("scale", type=int, default=30) + # resample data using pandas to get activity on scaled basis df = pd.DataFrame(data, columns=["start_time", "motion", "audio"]) diff --git a/web/src/views/events/EventView.tsx b/web/src/views/events/EventView.tsx index 743ca0653..1f51e136c 100644 --- a/web/src/views/events/EventView.tsx +++ b/web/src/views/events/EventView.tsx @@ -602,6 +602,7 @@ function MotionReview({ before: timeRange.before, after: timeRange.after, scale: segmentDuration / 2, + cameras: filter?.cameras?.join(",") ?? null, }, ]);