Bonjour,
Je cherche a faire une tuile qui m’affiche le dernier capteur demouvement activé d’une liste et la date et heure de la dernière détéction.
J’ai ce template :
- sensor:
- name: "Dernier Capteur Activé"
state: >
{% set sensors = expand('binary_sensor.presence')
| selectattr('state', 'eq', 'on')
| list %}
{% if sensors | length > 0 %}
{{ sensors | max(attribute='last_changed') | attribute('entity_id') }}
{% else %}
"Aucun capteur actif"
{% endif %}
attributes:
last_triggered: >
{% set sensors = expand('binary_sensor.presence')
| selectattr('state', 'eq', 'on')
| list %}
{% if sensors | length > 0 %}
{{ sensors | max(attribute='last_changed') | attribute('last_changed') }}
{% else %}
"Aucune activation récente"
{% endif %}
Il passe en unvaliable quand un capteur est on et « Aucun capteur actif » quand off. binary_sensor.presence est mon groupe de sensors présence.
Ce que je veux c’est l’affichage du nom du dernier capteur actif qui reste permanent.
Est ce que quelqu’un a une idée ?
Bonjour @Idaho947,
Quelque chose comme ça semble fonctionner pour moi, ‹ binary_sensor.windowsopen › est un groupe.
{% set sensors = expand(state_attr('binary_sensor.windowsopen', 'entity_id'))
| selectattr('state', 'eq', 'on')
|map(attribute='last_changed')
|map(attribute='entity_id')
| list %}
{% if sensors | length > 0 %}
Bruno
{% set t = expand('binary_sensor.windowsopen') | selectattr('state', 'eq', 'on') | map(attribute='last_changed') | max %}
{% set s = (expand('binary_sensor.windowsopen') | selectattr('last_changed', 'eq', t) | list)[0] %}
{{s.name}}
{{s.last_changed}}
{{s.entity_id}}
{% else %}
"Aucun capteur actif"
{% endif %}
A optimiser
Bob
1 « J'aime »
En effet mais comment faire pour que le dernier capteur actif soit affiché tout le temps ?
Salut
Il existe une fonction sort en jinja…
{% set list_triee = expand('group.carburants')|sort(attribute='last_changed') %}
{% for item in list_triee %}
{{- item.entity_id -}} : {{- item.last_changed }}
{%endfor%}
{% set preums = list_triee | first %}
{{ preums.last_changed }}
{% set der = list_triee | last %}
{{ der.last_changed }}
Donc on peut récuperer le dernier ou le premier
Voire changer le sens du tri
1 « J'aime »
Merci a vous deux.
J’ai fait ça qui semble fonctionner :
- sensor:
- name: "Dernier capteur présence"
state: >
{% set sensors = expand('binary_sensor.presence') %}
{% set active_sensors = sensors | selectattr('state', 'eq', 'on') | list %}
{% set inactive_sensors = sensors | selectattr('state', 'eq', 'off') | list %}
{% if active_sensors | length > 0 %}
{% set latest_active = active_sensors | max(attribute='last_changed') %}
{{ latest_active.name }} - {{ latest_active.last_changed | as_timestamp | timestamp_custom('%d/%m %H:%M', true) }}
{% elif inactive_sensors | length > 0 %}
{% set latest_inactive = inactive_sensors | max(attribute='last_changed') %}
{{ latest_inactive.name }} - {{ latest_inactive.last_changed | as_timestamp | timestamp_custom('%d/%m %H:%M', true) }}
{% else %}
"Aucun capteur actif"
{% endif %}
J’ai pas tout compris à la fonction short pour l’instannt.
C’est exactement le même principe que max (ou min). La différence c’est que max/min ça donne 1 élément dans une liste, alors que sort, ça trie la liste complète
1 « J'aime »