Problème avec custom:slider-button-card vs custom:button-card pour utiliser les variables dans les templates mode yaml

Mon problème

Bonjour, auparavant sous eeDomus et maintenant (débutant) sous HA depuis 6 mois.
dans mes dashboards, j’utilise des templates en mode yaml et j’ai dessiné un style d’UI interface réutilisable pour tout mes objets domotiques:

  • lumières avec sans minuterie, commande journalière ou sur événements.
  • volets roulants.
  • modules raspberry pi et autres.

Aujourd’hui, je tente de réaliser une UI pour un thermostat en utilisant la custom:slider-button-card. J’ai un problème dans l’utilisation de cette carte pour le passage de variables tel que ci-dessous.

LE DASHBOARD

title: Dev Thermo
button_card_templates: !include_dir_merge_named ../me-templates/
views:
  - title: Dev Thermo
    path: dev_thermo
    panel: false  # true = toute la largeur ecran
    cards:
      - type: grid
        columns: 1
        square: false
        cards:
          - type: custom:button-card
            template: thermo_main_ui
            variables:
              var_name: "Salle de Bains"
              var_index: "tst"
              var_switch: switch.fgw_04

LE TEMPLATE

thermo_main_ui:
  styles:
    grid:
      - grid-template-columns: 1fr 1fr
      - grid-template-rows: 1fr
      - grid-template-areas: '"west east"'
    card:
      - padding: 0px
      - background-color: 'rgba(var(--color-theme),0.05)'
      - border-radius: 8px 8px 8px 8px
      - place-self: center
      - height: 45px
  custom_fields:

    west:      # partie AVEC template 'thermo_slider' et variables: var_index etc.
      card:
        type: custom:button-card
        template: thermo_slider           # with range background color
        variables:
          var_name: "[[[ return variables.var_name]]]"
          var_switch: "[[[ return variables.var_switch]]]"
          var_index: "[[[ return variables.var_index]]]"
          
    east:      # partie SANS template, avec variables: var_index etc.
      card:
        type: custom:slider-button-card   # no   range background color
        entity: "[[[ return 'input_number.thermo_val_temps_' + variables.var_index]]]"
        show_name: false
        show_state: false
        compact: true
        slider:
          direction: left-right
          background: gradient
        icon:
          show: false
          tap_action:
            action: more-info
        action_button:
          show: false
thermo_slider:
  template: slider_slider
  custom_fields:
    slider:
      card:
        type: custom:slider-button-card
        entity: "[[[ return 'input_number.thermo_val_temps_' + variables.var_index]]]"
        name: Salle de Bains
        show_name: false
        show_state: false
        compact: true
        slider:
          direction: left-right
          background: solid
          use_percentage_bg_opacity: false
          use_state_color: false
          show_track: false
        icon:
          icon: mdi:radiator-off
          show: false
          tap_action:
            action: call-service
            service: switch.toggle
            service_data:
              entity_id: "[[[ return variables.var_switch]]]"
        action_button:
          mode: custom
          tap_action:
            action: none
          show: false

        style: |
          :host {
            {% set temp = states("input_number.thermo_val_temps_tst") | float %} 
            {% if temp < 20.0 %}
              --slider-color: #3c9ab2 !important;
            {% elif temp < 21.0 %}
              --slider-color: #71b3c2 !important;
            {% elif temp < 22.0 %}
              --slider-color: #9ebe91 !important;
            {% elif temp < 23.0 %}
              --slider-color: #e8c520 !important;
            {% elif temp < 24.0 %}
              --slider-color: #e29e00 !important;
            {% elif temp < 25.0 %}
              --slider-color: #ea5c00 !important;
            {% elif temp < 26.0 %}
              --slider-color: red !important;
            {% endif %}
            }

slider_slider:
  styles:
    grid:
      - grid-template-columns: 1fr
      - grid-template-rows: 1fr
      - grid-template-areas: '"slider"'
      - column-gap: 5px
      - row-gap: 0px
      - border: solid 0px
      - border-color: "#000"
      - margin: 0px 0px
    card:
      - border-radius: 14px 8px 8px 14px
      - box-shadow: none
      - padding: 0px
    custom_fields:
      slider:
        - box-shadow: none
        - padding: 0px

Tout ce qui précède fonctionne parfaitement en ayant installé :

  1. custom:button-card
  2. custom:slider-button-card

En venant au fond du problème, le passage par variables : du var_index qui m’est indispensable pour vectoriser mes custom:slider-button-card est fonctionnel pour le champ entity mais ne l’est plus si je l’utilise pour le paramètre style: du slider.

Est fonctionnel

        style: |
          :host {
            {% set temp = states("input_number.thermo_val_temps_tst") | float %} 

N’est plus fonctionnel

        style: |
          :host {
            {% set temp = states("[[[ return 'input_number.thermo_val_temps_' + variables.var_index]]]") | float %} 

Est-ce des erreurs de syntaxe ou y-a-t’il une solution ?
Merci de pouvoir m’aider sur ce sujet exposé, j’ai exploré sur les forums mais je n’ai pas trouvé de situation similaires. Que ce soit avec decluttering-card, card-mod ou anchors
Cordialement.

Résultat de l’UI slider thermostat
Slider de gauche pour 20degrés, sur la droite slider-card de base(original)
slider 20
Slider de gauche pour 22 degrés, sur la droite slider-card de base(original)
slider 22
Couleur de bleu à rouge en fonction de la température (par pas de 1°c)

Ma configuration

version core-2023.11.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.6
os_name Linux
os_version 6.1.59
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.33.0
Stage running
Available Repositories 1381
Downloaded Repositories 21
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 11.1
update_channel stable
supervisor_version supervisor-2023.12.1
agent_version 1.6.0
docker_version 24.0.6
disk_total 30.8 GB
disk_used 8.0 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons Duck DNS (1.15.0), Z-Wave JS UI (3.3.1), Studio Code Server (5.15.0), File editor (5.7.0), Samba share (12.1.0), Hikvision Doorbell (3.0.14), Mosquitto broker (6.4.0), AppDaemon (0.16.3), ZeroTier One (0.18.0), Advanced SSH & Web Terminal (17.0.4)
Dashboards
dashboards 25
resources 16
views 41
mode storage
Recorder
oldest_recorder_run January 21, 2024 at 16:51
current_recorder_run January 31, 2024 at 10:50
estimated_db_size 142.31 MiB
database_engine sqlite
database_version 3.41.2
[/center]

Bonjour,

Pour commencer, « style: » n’est plus supporté par card_mod, il faut spécifier « card_mod » avant.

Exemple :

card_mod:
  style: |
    ha-card {
      border: none;
      background-color: rgba(75,75,76,1.0);
    }

Ca résoudra une petite partie de ton problème si ta version de card_mod est à jour.

Bonjour yalec38,

Merci de ta réponse, la balise style: n’est pas celle de card-mod que je n’utilise pas, mais celle du custom:slider-button-card
L’objet de mon post est la réutilisation de l’UI conçue pour un code unique pour chacun de mes capteurs en permettant l’instanciation de l’UI avec une variable nommée variables: var_index dans mon exemple.
Ce qui permet dans mon cas de passer :
Pour un helper écrit en clair dans le code comme :
entity: input_number.thermo_val_temps_tst pour un var_index = 'tst'
ou
entity: input_number.thermo_val_temps_000 pour un var_index = '000'

Donc avec la formulation suivante : entity: "[[[ return 'input_number.thermo_val_temps_' + variables.var_index]]]"

Pour le le thermostat avec l’index tst
avec var_index: 'tst' cela devient : input_number.thermo_val_temps_tst

Pour le le thermostat avec l’index 000
pour var_index: '000' la valeur suivante : input_number.thermo_val_temps_000

Ainsi de suite pour N thermostat avec le même code.

Malheureusement dans l’exemple, ce qui est vrai pour entity: ne l’est pas pour le paramètre style: du custom:slider-button-card donc pour le code suivant:

        type: custom:slider-button-card
        entity: "[[[ return 'input_number.thermo_val_temps_' + variables.var_index]]]"
        ..........
        style: |
          :host {
            {% set temp = states("[[[ return 'input_number.thermo_val_temps_' + variables.var_index]]]") | float %}

le {%set temp = states("[[[ return 'input_..........)%} ne fonctionne pas.
Quel est la solution possible.
Merci
Cordialement

Sur la documentation de cette carte, il est précisé ceci :

Donc, soit il y a un appel direct à card_mod depuis cette carte soit card_mod a été ajouté en même temps soit la carte dont j’ai mis le lien plus haut n’est pas celle que tu utilises…

Suite à ta réponse yalec38,
J’ai bien la bonne carte de mattieha/slider-button-card
J’ai utilisé card_mod c’est la dernière version.
J’ai testé :

        card_mod:
          style: |
            :host {
              {% set temp = states("input_number.thermo_val_temps_tst") | float %} 

Ce code fonctionne.

J’ai testé :

        card_mod:
          style: |
            :host {
              {% set temp = states("[[[ return 'input_number.thermo_val_temps_' + variables.var_index]]]") | float %} 

Ce code ne fonctionne pas, dès lors de l’utilisation du passage de la variable du helper via le mécanisme variables: var_index pour obtenir son states c’est à dire la valeur du thermostat pour afficher la couleur correspondant au °C sur le slider.
Que ce soit avec ou sans card_mod:
Je cherche toujours la solution !!!
Cordialement

Bonjour,
Je reviens sur mon fil, car ayant trouvé une solution.
Merci à yalec38 pour son éclairage concernant car_mod.
Avec la carte custom:slider-button-card j’ai essayé de coller aux modèles publiés en exemples sur les sites d’aide, ceux notamment avec la balise style en template jinja.

Avec et sans car_mod, mais le tout en jinja.

Puis j’ai compris qu’il fallait encapsuler avec un template JS.
De fait avec cet encapsulage je peux passer tous mes instanciations de helper via variables: var_... et ensuite passer les données traitées puis formattées en jinja.

Après un fonctionnement acceptable avec un rechargement de page. Cette fonction est réalisée via la propriété triggers_update: , ce qui abouti à un fonctionnement parfait.
Je publie ci-dessous le code corrigé :

Partie container

thermo_main_ui:      #---------- new version [trigger][JS]
  triggers_update:   # triggers update card (.. ) (.. input_text.thermo....)
  - "[[[return 'input_number.thermo_val_temps_' + variables.var_index]]]"
  styles:
    grid:
      - grid-template-columns:  ............

Partie slider

  custom_fields:
    slider:
      card:
        type: custom:slider-button-card
        entity: "[[[ return 'input_number.thermo_val_temps_' + variables.var_index]]]"
        show_name: false
        show_state: true
        compact: true
        slider:
          direction: left-right
          background: solid
          use_percentage_bg_opacity: false
          use_state_color: false
          show_track: false
        icon:
          show: false
        action_button:
          show: false
        card_mod:
          style: |
            [[[
              let temp = states["input_number.thermo_val_temps_" + variables.var_index].state
              if (temp == 18) return ':host{--slider-color: #3c9ab2} ha-card{background-color: #3c9ab2}'
              if (temp == 19) return ':host{--slider-color: #71b3c2} ha-card{background-color: #71b3c2}'
              if (temp == 20) return ':host{--slider-color: #9ebe91} ha-card{background-color: #9ebe91}'
              if (temp == 21) return ':host{--slider-color: #e8c520} ha-card{background-color: #e8c520}'
              if (temp == 22) return ':host{--slider-color: #e29e00} ha-card{background-color: #e29e00}'
              if (temp == 23) return ':host{--slider-color: #ea5c00} ha-card{background-color: #ea5c00}'
              if (temp == 24) return ':host{--slider-color: #f22300} ha-card{background-color: #f22300}'
            ]]]

Cordialement