Button card affichage de plusieur entity sur un boutton

Bonjour,

J’ai un ensemble de Button card qui fonctionne plutôt bien, et dont j’ai odieusement volé le modèle sur le forum us

J’essaye de mieux comprendre ce qu’il y a derrière, et de l’améliorer pour mon usage personnel
En particulier je voudrais changer la couleur de certaines icônes en fonction de leur niveau de batterie
De base, ceci fonctionne :

type: custom:button-card
color: green
name: Capteurs
custom_fields:
  buttons:
    card:
      type: horizontal-stack
      cards:
        - entity: sensor.temp01_temperature
          type: custom:button-card
          name: Salon
          show_last_changed: true
          color: orange
          show_state: true

Mais je voudrais, pour « color » avoir le résultat de l’état de la batterie, un peu comme ça :

type: custom:button-card
entity: sensor.temp01_battery
unit_of_measurement: '%'
device_class: battery
name: Tek
theme: synthwave
styles:
  icon:
    - color: |
        [[[
          if (entity.state < 30) return 'red';
          if ((entity.state >= 30) && (entity.state < 80)) return 'orange'
          if (entity.state >= 80) return 'lime';
        ]]]
show_state: true

Le problème c’est que dans le code ci-dessus « entity.state » afficher l’état … de l’entité !
Et je ne sais pas comment « forcer » la lecture d’une deuxieme entité « Battery » pour afficher la couleur.
Un truc comme ça (Mode bourrin:on) ne fonctionne pas (comme je suis surpris …)

type: custom:button-card
color: green
name: Capteurs
custom_fields:
  buttons:
    card:
      type: horizontal-stack
      cards:
        - entity: sensor.temp01_temperature
          type: custom:button-card
          name: Salon
          show_last_changed: true
          show_state: true
          color: |
            [[[
              if (entity.state < 30) return 'red';
              if ((entity.state >= 30) && (entity.state < 80)) return 'orange'
              if (entity.state >= 80) return 'lime';
            ]]]

Merci de votre aide

image

Bonjour,

Il te suffit de nommer l’entité qui doit être à l’origine des changements :

          - color: |
              [[[
                if (states['binary_sensor.garage_detecteur_de_fermeture_porte_du_garage_contact'].state == 'off' && states['binary_sensor.garage_detecteur_d_ouverture_porte_du_garage_contact'].state == 'on')
                  return 'rgba(0,128,0,0.7)';
                else if (states['binary_sensor.garage_detecteur_de_fermeture_porte_du_garage_contact'].state == 'on' && states['binary_sensor.garage_detecteur_d_ouverture_porte_du_garage_contact'].state == 'off')
                  return 'rgba(255,0,0,0.7)';
                else if (states['binary_sensor.garage_detecteur_de_fermeture_porte_du_garage_contact'].state == 'on' && states['binary_sensor.garage_detecteur_d_ouverture_porte_du_garage_contact'].state == 'on' && states['binary_sensor.garage_detecteur_de_vibration_porte_du_garage_vibration'].state == 'on')
                  return 'rgba(255,140,0,0.7)';
                else if (states['binary_sensor.garage_detecteur_de_fermeture_porte_du_garage_contact'].state == 'on' && states['binary_sensor.garage_detecteur_d_ouverture_porte_du_garage_contact'].state == 'on' && states['binary_sensor.garage_detecteur_de_vibration_porte_du_garage_vibration'].state == 'off')
                  return 'rgba(255,140,0,0.7)';
              ]]]

Merci de ta réponse,

Hélas je n’y arrive pas…
Déjà, de base, je n’arrive pas à utiliser « entity state »

type: custom:button-card
color: green
name: Capteurs
custom_fields:
  buttons:
    card:
      type: horizontal-stack
      cards:
        - entity: sensor.temp01_temperature
          type: custom:button-card
          name: Salon
          show_last_changed: true
    icon:
      - color: |
          [[[
            if (entity.state < 60) return 'lime';
            if (entity.state >= 60 && entity.state < 80) return 'orange';
            else return 'red';
          ]]]

Le code ci-dessus ne fonctionne pas.
Je sèche depuis un moment, et comme je ne comprends pas, je vais viser une autre option !

Poste le code complet de ton ensemble de custom:button-cards avec tes entités et je pourrais te faire un exemple fonctionnel.

Bonjour,

A adapter pour ton custom field, mais en faisant un test rapide, ce code fonctionne :
A première vue, il te manque le « styles: »

type: custom:button-card
entity: sensor.th_salon_temperature
name: Salon
show_last_changed: true
styles:
  icon:
    - color: |
        [[[
          if (entity.state < 18) return 'blue';
          if (entity.state >= 18 && entity.state < 26) return 'green';
          else return 'red';
        ]]]

image

Voici mon code, simple et fonctionnel :
Mon icone affiche la temperature, est est dessiné en bleu

type: custom:button-card
entity: sensor.temp01_temperature
name: Chambre
styles:
  icon:
    - color: blue

Maintenant je voudrais que la couleur de l’icone change en fonction de l’état de la batterie
Quelque chose comme ça (mais ça ne fonctionne pas)

type: custom:button-card
entity: sensor.temp01_temperature
name: Chambre
styles:
  icon:
    - color: |
        [[[
          if (states['sensor.temp01_battery'].state < 20) return 'red';
             else return 'lime';
        ]]]

Je pense que je suis pas loin …

Bonjour,

Ton problème doit être lié à l’indentation : le « else » doit être au même niveau que le « if »

Un exemple avec la température en « name », l’humidité en « label » et la couleur de l’icône qui varie en fonction du niveau de batterie :

type: custom:button-card
icon: mdi:thermometer
name: |
  [[[ return 'Température : ' + states['sensor.chambre_sous_sol_thermometre_temperature'].state + ' °C'; ]]]
show_name: true
label: |
  [[[ return 'Humidité : ' + states['sensor.chambre_sous_sol_thermometre_humidity'].state + ' %'; ]]]
show_label: true
styles:
  icon:
    - color: |
        [[[
          if (states['sensor.chambre_sous_sol_thermometre_battery'].state < 20) return 'red';
          else return 'lime';
        ]]]

Un autre exemple avec la couleur de la valeur de température et de la valeur d’humidité qui varient en fonction des paramètres fixés :

type: custom:button-card
icon: mdi:thermometer
name: |
  [[[
    var temperature = states['sensor.chambre_sous_sol_thermometre_temperature'].state;
    var color;
    if (temperature < 18) {
      color = 'blue';
    } else if (temperature >= 18 && temperature < 22) {
      color = 'lime';
    } else {
      color = 'red';
    }
    return `<span style="font-size: 14px;">Température : </span><span style="font-size: 18px; font-weight: bold; color: ${color};">${temperature} %</span>`;
  ]]]
show_name: true
label: |
  [[[
    var humidity = states['sensor.chambre_sous_sol_thermometre_humidity'].state;
    var color;
    if (humidity < 20) {
      color = 'red';
    } else if (humidity >= 20 && humidity < 40) {
      color = 'orange';
    } else if (humidity >= 40 && humidity < 60) {
      color = 'green';
    } else if (humidity >= 60 && humidity < 80) {
      color = 'orange';
    } else {
      color = 'red';
    }
    return `<span style="font-size: 14px;">Humidité : </span><span style="font-size: 18px; font-weight: bold; color: ${color};">${humidity} %</span>`;
  ]]]
show_label: true
styles:
  icon:
    - color: |
        [[[
          if (states['sensor.chambre_sous_sol_thermometre_battery'].state < 20) return 'red';
          else return 'lime';
        ]]]

image

1 « J'aime »

Ça marche super bien, merci !
Il faut maintenant que je comprenne les diffs avec mon code !

Bonne journée

Passe ton sujet en résolu, si c’est OK pour toi (résolu sur le post qui a répondu à ta question / besoin d’aide).

Bonne soirée

Attention, tu va devoir changer bientôt de speudo :joy:

Pas un souci, @Krull56 m’a déjà suggéré le suivant : « Le yack » :wink:

1 « J'aime »