Ne pas dupliquer l'affichage d'un texte, icone, couleur sur plusieurs cartes

Bonjour,

J’ai une mushroom card avec une lumière.
J’utilise le templating pour afficher une icone, sa couleur, un texte.
J’affiche cette carte dans plusieurs dashboard, donc je duplique mon code.
En plus j’ai plusieurs lumières donc ça multiplie la duplication.

Quelle est la meilleure façon pour centraliser cela et ensuite juste afficher les 3 infos directement, icone, couleur, texte ?

Merci.

- type: custom:mushroom-template-card
    primary: Extérieur
    secondary: >-
      {% if is_state('switch.action_lumiere_exterieure', 'on') %} allumé {% else
      %} éteint {% endif %}
    icon: >-
      {% if is_state('switch.action_lumiere_exterieure', 'on') %}
      mdi:lightbulb-on {% else %} mdi:lightbulb-off {% endif %}
    entity: Extérieur
    tap_action:
      action: call-service
      service: switch.toggle
      data: {}
      target:
        entity_id: switch.action_lumiere_exterieure
    icon_color: >-
      {% if is_state('switch.action_lumiere_exterieure', 'on') %} #F4CE3F {%
      else %} grey {% endif %}

Salut @cbroissa-github

Je ne suis pas certain d’avoir compris à 100% ta demande.

Mais au cas où, je pense que tu peux jeter un œil à :

Ça s’installe via HACS :wink:

Exemple :

La template
decluttering_templates:
  mush_sensors:
    default:
      - color_on: deep-orange
      - color_off: cyan
    card:
      type: custom:mushroom-template-card
      entity: '[[entity]]'
      primary: '[[name]]'
      secondary: |
        {% if is_state(config.entity,'on') %}
          [[state_on]]
        {% else %}
          [[state_off]]
        {% endif %}
      icon: |
        {% if is_state(config.entity,'on') %}
          [[icon_on]]
        {% else %}
          [[icon_off]]
        {% endif %}
      icon_color: |
        {% if is_state(config.entity,'on') %}
          [[color_on]]
        {% else %}
          [[color_off]]
        {% endif %}        
      fill_container: true
      tap_action:
        action: more-info
      card_mod:
        style: |
          :host {
            --mush-icon-size: 48px;
          }
          mushroom-shape-icon {
            --shape-color: transparent !important;
          }
          ha-card {
            background: transparent;
            box-shadow: none;
          }
Le code côté dashboard
type: custom:mod-card
card_mod:
  style: |
    ha-card {
      background-color: rgba(10,10,10,0.4);
      box-shadow: var( --ha-card-box-shadow, 0px 2px 1px -1px rgba(255, 255, 255, 0.2), 0px 1px 1px 0px rgba(255, 255, 255, 0.14), 0px 1px 3px 0px rgba(255, 255, 255, 0.12) ); 
    }  
card:
  type: grid
  square: false
  columns: 3
  cards:
    - type: custom:decluttering-card
      template: mush_sensors
      variables:
        - entity: binary_sensor.drs_bureau
        - name: Bureau
        - state_on: Ouverte
        - state_off: Fermée
        - icon_on: mdi:window-open-variant
        - icon_off: mdi:window-closed-variant
    - type: custom:decluttering-card
      template: mush_sensors
      variables:
        - entity: binary_sensor.drs_cuisine
        - name: Cuisine
        - state_on: Ouverte
        - state_off: Fermée
        - icon_on: mdi:window-open-variant
        - icon_off: mdi:window-closed-variant
    - type: custom:decluttering-card
      template: mush_sensors
      variables:
        - entity: binary_sensor.drs_entree
        - name: Entrée
        - state_on: Ouverte
        - state_off: Fermée
        - icon_on: mdi:door-open
        - icon_off: mdi:door-closed
    - type: custom:decluttering-card
      template: mush_sensors
      variables:
        - entity: binary_sensor.drs_garage
        - name: Garage
        - state_on: Ouverte
        - state_off: Fermée
        - icon_on: mdi:window-open-variant
        - icon_off: mdi:window-closed-variant
    - type: custom:decluttering-card
      template: mush_sensors
      variables:
        - entity: binary_sensor.vs_garage_vibration
        - name: Garage
        - state_on: Détectées
        - state_off: Ras
        - icon_on: mdi:garage-alert-variant
        - icon_off: mdi:garage-variant
    - type: custom:decluttering-card
      template: mush_sensors
      variables:
        - entity: binary_sensor.drs_portail
        - name: Portail
        - state_on: Ouvert
        - state_off: Fermé
        - icon_on: mdi:gate-open
        - icon_off: mdi:gate
    - type: custom:decluttering-card
      template: mush_sensors
      variables:
        - entity: binary_sensor.drs_salle
        - name: Salle
        - state_on: Ouverte
        - state_off: Fermée
        - icon_on: mdi:door-open
        - icon_off: mdi:door-closed
    - type: custom:decluttering-card
      template: mush_sensors
      variables:
        - entity: binary_sensor.drs_salon
        - name: Salon
        - state_on: Ouverte
        - state_off: Fermée
        - icon_on: mdi:door-open
        - icon_off: mdi:door-closed
    - type: custom:decluttering-card
      template: mush_sensors
      variables:
        - entity: binary_sensor.drs_sdb_rdc
        - name: Sdb Rdc
        - state_on: Ouverte
        - state_off: Fermée
        - icon_on: mdi:window-open-variant
        - icon_off: mdi:window-closed-variant

Le visuel :

image

1 « J'aime »

Salut,
ca change quoi de déclaré la couleur dans défault au lieu du template ?
C’est si tu veut une autre couleur sur une carte decluterring tu change la couleur du variable dans la carte ?

Je ne l’utilise pas tout à fait comme ça.

Je suis parti du principe que je voulais fixer les couleurs une bonne fois pour toutes.

Mais que je voulais pouvoir custom le reste.

Après, on peut l’utiliser comme tu le pensais aussi :wink:

Je veux éviter dans chaque carte de remettre les couleurs, les icônes.
Avec votre solution c’est un peu mieux mais il faut quand même dupliquer à chaque fois qu’on utilise la même carte.

Dans l’exemple d’@herds il reste encore pas mal de répétition qu’on peut traiter avec les variables par défaut justement …
Genre ça par défaut (donc pas besoin de les préciser)

        - state_on: Ouverte
        - state_off: Fermée
        - icon_on: mdi:window-open-variant
        - icon_off: mdi:window-closed-variant

Et on surcharge au cas par cas quand c’est par les bonnes valeurs (là on les indique)

        - state_on: Détectées
        - state_off: Ras
        - icon_on: mdi:garage-alert-variant
        - icon_off: mdi:garage-variant

Après il faut quand même pas se leurrer. Si on veut aller plus loin ça impose d’avoir pris en compte des normes de nommage par exemple. Et il y aura toujours une limite, quand la valeur est différente, c’est pas factorisable

C’est parce que j’ai pas mal de capteur (vibration, mouvement, fumée, chaleur, fuite, ouverture), et je n’ai pas encore décidé quel type mérite d’avoir ses valeurs par défaut :joy:

1 « J'aime »

Top merci beaucoup, j’ai pu commencer à utiliser cette carte et ça va vite, mon code fond à vue d’œil !

Si ça peut aider à mieux s’y retrouver, il suffit d’aller sur Editeur de configuration sur l’accueil, et de coller la carte juste avant la ligne views :

decluttering_templates:
  lumiere_template:
    default:
      - logo_on: mdi:lightbulb-on
      - logo_off: mdi:lightbulb-off
      - couleur_on: '#F4CE3F'
      - couleur_off: grey
      - titre: Lumière
      - titre_on: allumée
      - titre_off: éteinte
    element:
      type: custom:mushroom-template-card
      primary: '[[titre]]'
      secondary: |-
        {% if is_state('[[entite]]', 'on') %} [[titre_on]] {% elif
              is_state('[[entite]]', 'unavailable') %}
              Indisponible {% else %} [[titre_off]] {% endif %}
      icon: >-
        {% if is_state('[[entite]]', 'on') %} [[logo_on]] {% else %}
        [[logo_off]] {% endif %}
      entity: '[[entite]]'
      tap_action:
        action: call-service
        service: switch.toggle
        data: {}
        target:
          entity_id: '[[entite]]'
      icon_color: >-
        {% if is_state('[[entite]]', 'on') %} [[couleur_on]] {% else %}
        [[couleur_off]] {% endif %}
      hold_action:
        action: call-service
        service: switch.turn_off
        data: {}
        target:
          entity_id: '[[entite]]'
views:

Puis à la place de l’ancienne carte, de mettre l’appel :

- type: custom:decluttering-card
            template: lumiere_template
            variables:
              - titre: Lumière extérieure
              - entite: switch.action_lumiere_exterieure
1 « J'aime »

Salut @cbroissa-github

N’oublie pas de passer ton topic en « résolu » :wink: