mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-03-21 23:58:22 +03:00
54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
|
|
import { WsFeedMessage } from "@/api/ws";
|
||
|
|
|
||
|
|
const EVENT_TOPICS = new Set([
|
||
|
|
"events",
|
||
|
|
"reviews",
|
||
|
|
"tracked_object_update",
|
||
|
|
"triggers",
|
||
|
|
]);
|
||
|
|
|
||
|
|
const SYSTEM_TOPICS = new Set([
|
||
|
|
"stats",
|
||
|
|
"model_state",
|
||
|
|
"job_state",
|
||
|
|
"embeddings_reindex_progress",
|
||
|
|
"audio_transcription_state",
|
||
|
|
"birdseye_layout",
|
||
|
|
]);
|
||
|
|
|
||
|
|
export function extractCameraName(message: WsFeedMessage): string | null {
|
||
|
|
// Try extracting from topic pattern: {camera}/motion, {camera}/audio/rms, etc.
|
||
|
|
const topicParts = message.topic.split("/");
|
||
|
|
if (
|
||
|
|
topicParts.length >= 2 &&
|
||
|
|
!EVENT_TOPICS.has(message.topic) &&
|
||
|
|
!SYSTEM_TOPICS.has(message.topic) &&
|
||
|
|
message.topic !== "camera_activity" &&
|
||
|
|
message.topic !== "audio_detections" &&
|
||
|
|
message.topic !== "restart" &&
|
||
|
|
message.topic !== "notification_test"
|
||
|
|
) {
|
||
|
|
return topicParts[0];
|
||
|
|
}
|
||
|
|
|
||
|
|
// Try extracting from payload
|
||
|
|
try {
|
||
|
|
const data =
|
||
|
|
typeof message.payload === "string"
|
||
|
|
? JSON.parse(message.payload)
|
||
|
|
: message.payload;
|
||
|
|
|
||
|
|
if (typeof data === "object" && data !== null) {
|
||
|
|
if ("camera" in data) return data.camera as string;
|
||
|
|
if ("after" in data && data.after?.camera)
|
||
|
|
return data.after.camera as string;
|
||
|
|
if ("before" in data && data.before?.camera)
|
||
|
|
return data.before.camera as string;
|
||
|
|
}
|
||
|
|
} catch {
|
||
|
|
// ignore parse errors
|
||
|
|
}
|
||
|
|
|
||
|
|
return null;
|
||
|
|
}
|