feat: Add support for Frigate reviews / detections [initial PR] (#2315)
- Add support for Frigate reviews / detections. - Add support for GenAI metadata. - Significant internal refactor to more flexible "UnifiedQuery" to allow mixing cameras with simple metadata and review metadata (e.g. a timeline view of a Frigate camera with reviews, and a Reolink camera with simple metadata). - Add support for folder media as camera media. There are a few more PRs to commit prior to this going live, but commiting this for now due to the scale of the change. BREAKING CHANGE: `media_type` and `events_type` are retired under `live`, `viewer` and `timeline` configuration sections, instead media type is associated (once) with the camera under `media`.
This commit is contained in:
@@ -8,6 +8,7 @@ import { CameraManagerReadOnlyConfigStore } from './store';
|
||||
import {
|
||||
CameraManagerCameraMetadata,
|
||||
CameraQuery,
|
||||
DefaultQueryParameters,
|
||||
Engine,
|
||||
EngineOptions,
|
||||
EventQuery,
|
||||
@@ -17,11 +18,15 @@ import {
|
||||
PartialEventQuery,
|
||||
PartialRecordingQuery,
|
||||
PartialRecordingSegmentsQuery,
|
||||
PartialReviewQuery,
|
||||
QueryReturnType,
|
||||
QueryType,
|
||||
RecordingQuery,
|
||||
RecordingQueryResultsMap,
|
||||
RecordingSegmentsQuery,
|
||||
RecordingSegmentsQueryResultsMap,
|
||||
ReviewQuery,
|
||||
ReviewQueryResultsMap,
|
||||
} from './types';
|
||||
|
||||
export const CAMERA_MANAGER_ENGINE_EVENT_LIMIT_DEFAULT = 10000;
|
||||
@@ -31,6 +36,15 @@ export interface CameraManagerEngine {
|
||||
|
||||
createCamera(hass: HomeAssistant, cameraConfig: CameraConfig): Promise<Camera>;
|
||||
|
||||
/**
|
||||
* Get default query parameters for a camera based on its configuration.
|
||||
* Engines read their own config and return generic filter params.
|
||||
*/
|
||||
getDefaultQueryParameters(
|
||||
camera: Camera,
|
||||
queryType: QueryType,
|
||||
): DefaultQueryParameters;
|
||||
|
||||
generateDefaultEventQuery(
|
||||
store: CameraManagerReadOnlyConfigStore,
|
||||
cameraIDs: Set<string>,
|
||||
@@ -70,6 +84,19 @@ export interface CameraManagerEngine {
|
||||
engineOptions?: EngineOptions,
|
||||
): Promise<RecordingSegmentsQueryResultsMap | null>;
|
||||
|
||||
generateDefaultReviewQuery(
|
||||
store: CameraManagerReadOnlyConfigStore,
|
||||
cameraIDs: Set<string>,
|
||||
query?: PartialReviewQuery,
|
||||
): ReviewQuery[] | null;
|
||||
|
||||
getReviews(
|
||||
hass: HomeAssistant,
|
||||
store: CameraManagerReadOnlyConfigStore,
|
||||
query: ReviewQuery,
|
||||
engineOptions?: EngineOptions,
|
||||
): Promise<ReviewQueryResultsMap | null>;
|
||||
|
||||
generateMediaFromEvents(
|
||||
hass: HomeAssistant,
|
||||
store: CameraManagerReadOnlyConfigStore,
|
||||
@@ -84,6 +111,13 @@ export interface CameraManagerEngine {
|
||||
results: QueryReturnType<RecordingQuery>,
|
||||
): ViewMedia[] | null;
|
||||
|
||||
generateMediaFromReviews(
|
||||
hass: HomeAssistant,
|
||||
store: CameraManagerReadOnlyConfigStore,
|
||||
query: ReviewQuery,
|
||||
results: QueryReturnType<ReviewQuery>,
|
||||
): ViewMedia[] | null;
|
||||
|
||||
getMediaDownloadPath(
|
||||
hass: HomeAssistant,
|
||||
cameraConfig: CameraConfig,
|
||||
@@ -97,6 +131,13 @@ export interface CameraManagerEngine {
|
||||
favorite: boolean,
|
||||
): Promise<void>;
|
||||
|
||||
reviewMedia(
|
||||
hass: HomeAssistant,
|
||||
cameraConfig: CameraConfig,
|
||||
media: ViewMedia,
|
||||
reviewed: boolean,
|
||||
): Promise<void>;
|
||||
|
||||
getQueryResultMaxAge(query: CameraQuery): number | null;
|
||||
|
||||
getMediaSeekTime(
|
||||
|
||||
Reference in New Issue
Block a user