Capteur qui reprends le dernier activé d'un groupe et sa date

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 :wink:
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 »