diff --git a/src/common.ts b/src/common.ts index 887bdee2..024d28d4 100644 --- a/src/common.ts +++ b/src/common.ts @@ -6,6 +6,7 @@ import { ZodSchema, z } from 'zod'; import { localize } from './localize/localize.js'; import { ActionType, + CameraConfig, ExtendedHomeAssistant, FrigateCardAction, FrigateCardCustomAction, @@ -394,4 +395,15 @@ export function refreshDynamicStateParameters( params.title = params.title ?? (state?.attributes?.friendly_name || params.entity); params.icon = params.icon ?? stateIcon(state); return params; +} + +export function refreshCameraConfigDynamicParameters( + hass: HomeAssistant, + config: CameraConfig): CameraConfig { + if (hass && config.camera_entity) { + const state = hass.states[config.camera_entity]; + config.title = config.title ?? (state?.attributes?.friendly_name || config.camera_entity); + config.icon = config.icon ?? stateIcon(state); + } + return config; } \ No newline at end of file diff --git a/src/components/live.ts b/src/components/live.ts index 0cd2336a..e735042b 100644 --- a/src/components/live.ts +++ b/src/components/live.ts @@ -36,7 +36,7 @@ import { dispatchPauseEvent, dispatchPlayEvent, homeAssistantSignPath, - refreshDynamicStateParameters, + refreshCameraConfigDynamicParameters, } from '../common.js'; import { renderProgressIndicator } from '../components/message.js'; @@ -238,9 +238,13 @@ export class FrigateCardLiveCarousel extends FrigateCardMediaCarousel { if (!this.cameras) { return []; } - return Array.from(this.cameras.values()).map((cameraConfig, index) => - this._renderLive(cameraConfig, index), - ); + return Array.from(this.cameras.values()).map((cameraConfig, index) => { + let refreshedConfig = {...cameraConfig}; + if (this.hass) { + refreshedConfig = refreshCameraConfigDynamicParameters(this.hass, refreshedConfig); + } + return this._renderLive(refreshedConfig, index) + }); } /** @@ -271,10 +275,11 @@ export class FrigateCardLiveCarousel extends FrigateCardMediaCarousel { protected _renderLive(cameraConfig: CameraConfig, slideIndex: number): TemplateResult { return html`