Bonjour,
Je m’arrache les cheveux depuis plusieurs jours, donc en désespoir de cause, je vous expose mon problème.
Afin de faciliter la réutilisabilité de certains codes, j’utilise lovelace_gen , avec son option de créer un fichier yaml, appelable en tant qu’include avec paramètres. Exemple dans mon cas, un bouton « générique », puis je passe en variables les infos que je souhaite lui passer.
Mon bouton paramétré (simplifié):
# lovelace_gen
### HA Tile
type: custom:button-card
aspect_ratio: 1/1
icon: {{ icon }}
show_label: true
styles:
card:
- border-radius: 10%
- padding: 10%
- color: ivory
- font-size: 10px
- text-shadow: 0px 0px 5px black
- text-transform: capitalize
grid:
- grid-template-areas: '"i temp" "n n" "l l"'
- grid-template-columns: 1fr 1fr
- grid-template-rows: 1.5fr min-content 1fr
name:
- font-weight: bold
- font-size: 13px
- color: white
- align-self: middle
- padding-bottom: 4px
img_cell:
- justify-content: start
- align-items: start
- margin: none
icon:
- width: 70%
- margin-top: -5%
label:
- padding-bottom: 2px
- align-self: middle
- justify-self: start
custom_fields:
temp:
- align-self: start
- justify-self: end
entity: {{ entity }}
custom_fields:
temp: >
{% if temp is defined %}
[[[ return '<ha-icon icon="mdi:thermometer" style="width: 12px; height: 12px; color: yellow;"></ha-icon><span>' + {{ temp }} + ' °C</span> ';]]]
{% endif %}
label: >
{% if ram is defined %}
<ha-icon icon="mdi:memory" style="width: 12px; height: 12px; color: deepskyblue;"></ha-icon> <span>RAM: <span style="color: var(--text-color-sensor);">{{ ram }}%</span></span>
{% endif %}
Puis un exemple d’appel de ce dernier:
cards:
- !include
- buttons/monitoring_system_button.yaml
- entity: binary_sensor.monitor_lan_magnum
icon: mdi:nas
cpu: states['binary_sensor.monitor_lan_magnum'].attributes.cpu
ram: states['binary_sensor.monitor_lan_magnum'].attributes.ram
hdd: states['binary_sensor.monitor_lan_magnum'].attributes.hd
temp: states['binary_sensor.monitor_lan_magnum'].attributes.temp
Je pense que je m’emmêle les pinceaux entre le jinja et le javascript, ou du moins entre l’objet, et sa valeur.
Avec le code ci-dessus, je ne récupère pas la valeur de la RAM, mais le nom de l’objet :
Dans l’appelant, j’ai bien ram: states['binary_sensor.monitor_lan_magnum'].attributes.ram
(j’ai aussi testé avec ram: "states['binary_sensor.monitor_lan_magnum'].attributes.ram"
Puis dans l’appellé, j’utilise {{ ram }}.
Je cherche à comprendre ce qui pêche ici donc.
2ème souci, j’ai trouvé un pseudo palliatif, en passant par du javascript pour la conversion de l’affichage, c’est ce que j’ai fait pour la température:
{% if temp is defined %}
[[[ return '<ha-icon icon="mdi:thermometer" style="width: 12px; height: 12px; color: yellow;"></ha-icon><span>' + {{ temp }} + ' °C</span> ';]]]
{% endif %}
Sauf que dans le cas présent, je veux gérer le nombre d’infos restituées, en fonction des paramètres renseignés.
J’ai testé plusieurs approches, comme:
{% if cpu is defined %}
[[[ return '<ha-icon icon="mdi:server" style="width: 12px; height: 12px; color: deepskyblue;"></ha-icon> <span>CPU: <span style="color: var(--text-color-sensor);">' + {{ cpu }} + '%</span></span>'; ]]]
{% endif %}
{% if ram is defined %}
[[[ return '<ha-icon icon="mdi:memory" style="width: 12px; height: 12px; color: deepskyblue;"></ha-icon> <span>RAM: <span style="color: var(--text-color-sensor);">' + {{ ram }} + '%</span></span>'; ]]]
{% endif %}
{% if hdd is defined %}
[[[ return '<ha-icon icon="mdi:harddisk" style="width: 12px; height: 12px; color: deepskyblue;"></ha-icon> <span>HDD: <span style="color: var(--text-color-sensor);">' + {{ hdd }} + '%</span></span>'; ]]]
{% endif %}
mais ça ne marche pas car a priori je ne peux avoir qu’une seule balise [[[ ]]].
puis j’ai testé en passant par une variable:
label: >
{% set result = "" %}
{% if ram is defined %} {%set result = result ~ '<ha-icon icon="mdi:memory" style="width: 12px; height: 12px; color: deepskyblue;"></ha-icon> <span>RAM: <span style="color: var(--text-color-sensor);">' ~ ram ~ '%</span></span>' %}{% endif %}
[[[ return {{result}};]]]
mais ce n’est pas mieux, même sans passer par les [[[ ]]], je n’arrive à rien:
label: >
{% set result = "test" %}
{% if temp is defined %}
{% set result = result ~ "test" %}
{% endif % }
{{result}}
Des pistes?