From e3f544453e01724c96e06d8717041ab137573d38 Mon Sep 17 00:00:00 2001 From: Dermot Duffy Date: Sun, 19 Mar 2023 14:46:18 -0700 Subject: [PATCH] Tolerate numeric unique_ids. --- src/camera-manager/frigate/engine-frigate.ts | 16 +++++++++++----- src/card.ts | 2 -- src/utils/ha/entity-registry/types.ts | 5 ++++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/camera-manager/frigate/engine-frigate.ts b/src/camera-manager/frigate/engine-frigate.ts index d1021ba9..5fd0a4b5 100644 --- a/src/camera-manager/frigate/engine-frigate.ts +++ b/src/camera-manager/frigate/engine-frigate.ts @@ -216,7 +216,11 @@ export class FrigateCameraManagerEngine * @returns The Frigate camera name or null if unavailable. */ protected _getFrigateCameraNameFromEntity(entity: Entity): string | null { - if (entity.unique_id && entity.platform === 'frigate') { + if ( + entity.platform === 'frigate' && + entity.unique_id && + typeof entity.unique_id === 'string' + ) { const match = entity.unique_id.match(/:camera:(?[^:]+)$/); if (match && match.groups) { return match.groups['camera']; @@ -238,8 +242,9 @@ export class FrigateCameraManagerEngine if (cameraConfig.frigate.camera_name) { return ( entities.find( - (ent) => - !!ent.unique_id?.match( + (entity) => + typeof entity.unique_id === 'string' && + !!entity.unique_id?.match( new RegExp(`:motion_sensor:${cameraConfig.frigate.camera_name}`), ), )?.entity_id ?? null @@ -262,8 +267,9 @@ export class FrigateCameraManagerEngine const addEntityIDIfFound = (cameraOrZone: string, label: string): void => { const entityID = entities.find( - (ent) => - !!ent.unique_id?.match( + (entity) => + typeof entity.unique_id === 'string' && + !!entity.unique_id?.match( new RegExp(`:occupancy_sensor:${cameraOrZone}_${label}`), ), )?.entity_id ?? null; diff --git a/src/card.ts b/src/card.ts index 97e65df0..da61080b 100644 --- a/src/card.ts +++ b/src/card.ts @@ -93,8 +93,6 @@ import { FrigateCardInitializer } from './utils/initializer.js'; import 'web-dialog'; import { downloadMedia } from './utils/download.js'; import { getActionsFromQueryString } from './utils/querystring.js'; -import { MediaQueries } from './view/media-queries.js'; -import { MediaQuery } from './camera-manager/types.js'; /** A note on media callbacks: * diff --git a/src/utils/ha/entity-registry/types.ts b/src/utils/ha/entity-registry/types.ts index 0d042483..80fedd79 100644 --- a/src/utils/ha/entity-registry/types.ts +++ b/src/utils/ha/entity-registry/types.ts @@ -7,7 +7,10 @@ export const entitySchema = z.object({ hidden_by: z.string().nullable(), platform: z.string(), translation_key: z.string().nullable(), - unique_id: z.string().optional(), + // Technically the unique_id should be a string, but we want to tolerate + // numeric unique_ids also in case they are used. See: + // https://github.com/dermotduffy/frigate-hass-card/issues/1016 + unique_id: z.string().or(z.number()).optional(), }); export type Entity = z.infer;