From 97ac7ff4d2f8e177b7d69900a0d47beffd097b5a Mon Sep 17 00:00:00 2001 From: DigiLive Date: Fri, 25 Apr 2025 10:19:20 +0200 Subject: [PATCH] Add support for Stateful scenes Add changing the icon color of the Scene Card depending on the related stateful scene entity, if available. The default color will now be `disabled`. Closes #190 --- src/cards/SceneCard.ts | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/cards/SceneCard.ts b/src/cards/SceneCard.ts index 4a4706f..365233e 100644 --- a/src/cards/SceneCard.ts +++ b/src/cards/SceneCard.ts @@ -3,6 +3,7 @@ import { Registry } from '../Registry'; import { EntityRegistryEntry } from '../types/homeassistant/data/entity_registry'; import { EntityCardConfig } from '../types/lovelace-mushroom/cards/entity-card-config'; +import { TemplateCardConfig } from '../types/lovelace-mushroom/cards/template-card-config'; import { isCallServiceActionConfig, isCallServiceActionTarget } from '../types/strategy/strategy-generics'; import AbstractCard from './AbstractCard'; @@ -13,11 +14,11 @@ import AbstractCard from './AbstractCard'; */ class SceneCard extends AbstractCard { /** Returns the default configuration object for the card. */ - static getDefaultConfig(): EntityCardConfig { + static getDefaultConfig(): TemplateCardConfig { return { - type: 'custom:mushroom-entity-card', + type: 'custom:mushroom-template-card', icon: 'mdi:palette', - icon_color: 'blue', + icon_color: 'disabled', tap_action: { action: 'call-service', perform_action: 'scene.turn_on', @@ -37,8 +38,12 @@ class SceneCard extends AbstractCard { constructor(entity: EntityRegistryEntry, customConfiguration?: EntityCardConfig) { super(entity); + const sceneName = entity.entity_id.split('.').pop(); const configuration = SceneCard.getDefaultConfig(); + // Initialize the default configuration. + configuration.primary = entity.name ?? entity.original_name ?? '?'; + if ( isCallServiceActionConfig(configuration.tap_action) && isCallServiceActionTarget(configuration.tap_action.target) @@ -47,6 +52,16 @@ class SceneCard extends AbstractCard { } configuration.icon = Registry.hassStates[entity.entity_id]?.attributes.icon ?? configuration.icon; + // Stateful Scenes support. (https://github.com/hugobloem/stateful_scenes) + configuration.icon_color = ` + {% set state = states('switch.${sceneName}_stateful_scene') %} + {% if state == 'on' %} + blue + {% else %} + disabled + {% endif %} + `; + this.configuration = { ...this.configuration, ...configuration, ...customConfiguration }; } }