Make motion activity respect filters

This commit is contained in:
Nicolas Mowen 2024-03-05 16:29:37 -07:00
parent 48d1ce19de
commit eef03fcf2f
2 changed files with 11 additions and 3 deletions

View File

@ -356,13 +356,17 @@ def delete_reviews(ids: str):
@ReviewBp.route("/review/activity") @ReviewBp.route("/review/activity")
def review_activity(): def review_activity():
"""Get motion and audio activity.""" """Get motion and audio activity."""
cameras = request.args.get("cameras", "all")
before = request.args.get("before", type=float, default=datetime.now().timestamp()) before = request.args.get("before", type=float, default=datetime.now().timestamp())
after = request.args.get( after = request.args.get(
"after", type=float, default=(datetime.now() - timedelta(hours=1)).timestamp() "after", type=float, default=(datetime.now() - timedelta(hours=1)).timestamp()
) )
# get scale in seconds clauses = [(Recordings.start_time > after) & (Recordings.end_time < before)]
scale = request.args.get("scale", type=int, default=30)
if cameras != "all":
camera_list = cameras.split(",")
clauses.append((Recordings.camera << camera_list))
all_recordings: list[Recordings] = ( all_recordings: list[Recordings] = (
Recordings.select( Recordings.select(
@ -372,7 +376,7 @@ def review_activity():
Recordings.motion, Recordings.motion,
Recordings.dBFS, Recordings.dBFS,
) )
.where((Recordings.start_time > after) & (Recordings.end_time < before)) .where(reduce(operator.and_, clauses))
.order_by(Recordings.start_time.asc()) .order_by(Recordings.start_time.asc())
.iterator() .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 # resample data using pandas to get activity on scaled basis
df = pd.DataFrame(data, columns=["start_time", "motion", "audio"]) df = pd.DataFrame(data, columns=["start_time", "motion", "audio"])

View File

@ -602,6 +602,7 @@ function MotionReview({
before: timeRange.before, before: timeRange.before,
after: timeRange.after, after: timeRange.after,
scale: segmentDuration / 2, scale: segmentDuration / 2,
cameras: filter?.cameras?.join(",") ?? null,
}, },
]); ]);