On récupère en sortie une entité dont l’état est le nom de domaine le plus près à expirer et un attribut qui correspond à la date d’expiration du certificat pour celui ci.
Il y a deux exemples pour arriver au même résultat.
Pour l’un, j’utilise une boucle pour l’autre je navigue dans une liste.
N’hésitez pas à poser des questions et à partager vos modèles
Prérequis
Utiliser l’intégration Certificate Expiry ou tout autre entité dont le format est strictement identique (YYYY-MM-DDTHH:mm:ss+00:00)
En utilisant une boucle
sensor:
- platform: template
sensors:
prochaine_certificat_a_expirer_avec_boucle:
friendly_name: "Prochain certificat à expirer"
attribute_templates:
timestamp: >
{# Définition de la liste des entités #}
{% set liste_des_entites= ['sensor.cert_expiry_timestamp_ndd1_duckdns_org','sensor.cert_expiry_timestamp_ndd2_duckdns_org'] %}
{# Définition du `namespace` afin de pouvoir récupérer la valeur définie dans la boucle en dehors de celle-ci (spécificité du Jinja)#}
{%set prochain_evenement = namespace(timestamp='') %}
{# Boucle parcourant tous les éléments de la liste `liste_des_entites` #}
{% for entite in liste_des_entites %}
{% if loop.first %}
{# Au premier passage on récupère les informations de la première entité de la liste #}
{% set prochain_evenement.timestamp = (as_timestamp(states(entite))|float) %}
{% else %}
{# On compare la valeur précédemment stockée avec celle correspondant au nouvel index de la boucle #}
{% if (as_timestamp(states(entite))|float) < prochain_evenement.timestamp %}
{# la valeur de l'entité est inférieure à celle stockée, donc c'est elle qu'on stocke dorénavant #}
{% set prochain_evenement.timestamp = (as_timestamp(states(entite))|float) %}
{% endif %}
{% endif %}
{% endfor %}
{{ prochain_evenement.timestamp }}
value_template: >
{# Définition de la liste des entités #}
{% set liste_des_entites= ['sensor.cert_expiry_timestamp_ndd1_duckdns_org','sensor.cert_expiry_timestamp_ndd2_duckdns_org'] %}
{# Définition du `namespace` afin de pouvoir récupérer la valeur définie dans la boucle #}
{%set prochain_evenement = namespace(timestamp='', nom_de_l_entite='') %}
{# Boucle parcourant tous les éléments de la liste `liste_des_entites` #}
{% for entite in liste_des_entites %}
{% if loop.first %}
{# Au premier passage on récupère les informations de la première entité de la liste #}
{% set prochain_evenement.timestamp = (as_timestamp(states(entite))|float) %}
{% set prochain_evenement.nom_de_l_entite = entite %}
{% else %}
{# On compare la valeur précédemment stockée avec celle correspondant au nouvel index de la boucle #}
{% if (as_timestamp(states(entite))|float) < prochain_evenement.timestamp %}
{# la valeur de l'entité est inférieure à celle stockée, donc c'est elle qu'on stocke dorénavant #}
{% set prochain_evenement.timestamp = (as_timestamp(states(entite))|float) %}
{% set prochain_evenement.nom_de_l_entite = entite %}
{% endif %}
{% endif %}
{% endfor %}
{{ prochain_evenement.nom_de_l_entite.split('sensor.cert_expiry_timestamp_')[1] }}
En parcourant une liste
- platform: template
sensors:
prochaine_certificat_a_expirer_sans_boucle:
friendly_name: "Prochain certificat à expirer"
attribute_templates:
timestamp: >
{# Définition de la liste des entités #}
{% set liste_des_entites = ['sensor.cert_expiry_timestamp_ndd1_duckdns_org', 'sensor.cert_expiry_timestamp_ndd2_duckdns_org'] %}
{% set timestamp_des_entites = [as_timestamp(states('sensor.cert_expiry_timestamp_ndd1_duckdns_org'))|float,as_timestamp(states('sensor.cert_expiry_timestamp_ndd2_duckdns_org'))|float] %}
{% set entite_la_plus_petite = timestamp_des_entites|min %}
{{timestamp_des_entites[timestamp_des_entites.index(entite_la_plus_petite)]}}
value_template: >
{# Définition de la liste des entités #}
{% set liste_des_entites = ['sensor.cert_expiry_timestamp_ndd1_duckdns_org', 'sensor.cert_expiry_timestamp_ndd2_duckdns_org'] %}
{% set timestamp_des_entites = [as_timestamp(states('sensor.cert_expiry_timestamp_ndd1_duckdns_org'))|float,as_timestamp(states('sensor.cert_expiry_timestamp_ndd2_duckdns_org'))|float] %}
{% set entite_la_plus_petite = timestamp_des_entites|min %}
{{liste_des_entites[timestamp_des_entites.index(entite_la_plus_petite)].split('sensor.cert_expiry_timestamp_')[1]}}