diff --git a/frigate/models.py b/frigate/models.py index 6cb96a5ba..03f0272df 100644 --- a/frigate/models.py +++ b/frigate/models.py @@ -36,6 +36,7 @@ class Timeline(Model): # type: ignore[misc] timestamp = DateTimeField() camera = CharField(index=True, max_length=20) source = CharField(index=True, max_length=20) # ex: tracked object, audio, external + source_id = CharField(index=True, max_length=30) class_type = CharField(max_length=50) # ex: entered_zone, audio_heard data = JSONField() # ex: tracked object id, region, box, etc. diff --git a/frigate/timeline.py b/frigate/timeline.py index 6dfae68e5..12aa42ac4 100644 --- a/frigate/timeline.py +++ b/frigate/timeline.py @@ -60,9 +60,9 @@ class TimelineProcessor(threading.Thread): timestamp=event_data["frame_time"], camera=camera, source="tracked_object", + source_id=event_data["id"], class_type="visible", data={ - "event_id": event_data["id"], "region": event_data["region"], "box": event_data["box"], }, @@ -75,9 +75,9 @@ class TimelineProcessor(threading.Thread): timestamp=event_data["frame_time"], camera=camera, source="tracked_object", + source_id=event_data["id"], class_type="entered_zone", data={ - "event_id": event_data["id"], "region": event_data["region"], "box": event_data["box"], "zones": event_data["current_zones"], @@ -88,9 +88,9 @@ class TimelineProcessor(threading.Thread): timestamp=event_data["frame_time"], camera=camera, source="tracked_object", + source_id=event_data["id"], class_type="gone", data={ - "event_id": event_data["id"], "region": event_data["region"], "box": event_data["box"], }, diff --git a/migrations/013_create_timeline_table.py b/migrations/013_create_timeline_table.py index 163eaf914..9fed3f1ab 100644 --- a/migrations/013_create_timeline_table.py +++ b/migrations/013_create_timeline_table.py @@ -37,10 +37,11 @@ SQL = pw.SQL def migrate(migrator, database, fake=False, **kwargs): migrator.sql( - 'CREATE TABLE IF NOT EXISTS "timeline" ("timestamp" DATETIME NOT NULL, "camera" VARCHAR(20) NOT NULL, "source" VARCHAR(20) NOT NULL, "class_type" VARCHAR(50) NOT NULL, "data" JSON)' + 'CREATE TABLE IF NOT EXISTS "timeline" ("timestamp" DATETIME NOT NULL, "camera" VARCHAR(20) NOT NULL, "source" VARCHAR(20) NOT NULL, "source_id" VARCHAR(30) NOT NULL, "class_type" VARCHAR(50) NOT NULL, "data" JSON)' ) migrator.sql('CREATE INDEX IF NOT EXISTS "timeline_camera" ON "timeline" ("camera")') - migrator.sql('CREATE INDEX IF NOT EXISTS "timeline_input_type" ON "timeline" ("source")') + migrator.sql('CREATE INDEX IF NOT EXISTS "timeline_source" ON "timeline" ("source")') + migrator.sql('CREATE INDEX IF NOT EXISTS "timeline_source_id" ON "timeline" ("source_id")') def rollback(migrator, database, fake=False, **kwargs):