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
Cleya
Septembre 7, 2024, 7:03
2
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 !
Cleya
Septembre 7, 2024, 5:16
4
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';
]]]
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 …
Cleya
Septembre 9, 2024, 6:11
7
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';
]]]
Cleya
Septembre 9, 2024, 6:37
8
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';
]]]
1 « J'aime »
Ça marche super bien, merci !
Il faut maintenant que je comprenne les diffs avec mon code !
Bonne journée
Cleya
Septembre 10, 2024, 3:44
10
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
Cleya
Septembre 10, 2024, 4:15
12
Pas un souci, @Krull56 m’a déjà suggéré le suivant : « Le yack »
1 « J'aime »