Bonjour à tous.
Depuis les dernières versions, le décompte de validation du certificat SSL n’est plus implémenté lorsque nous ajoutons l’intégration: « Expiration du certificat ».
Nous n’avons maintenant qu’un seul sensor nous indiquant la date d’expiration de notre certificat, sous la forme :
« sensor.cert_expiry_timestamp_URLDUDOMAINE »
Ce n’étais pas le cas avant. Une modification a eu lieu, afin d’éviter un contrôle continu du temps présent. Nous avions un autre sensor avec le décompte en jour (par exemple : 13 jours restants). Nous pouvions alors facilement créer une automatisation qui nous permettait d’avoir une notification si le certificat expirait sous peu.
Afin de recréer ce sensor, j’ai cherché avec l’aide de @Clemalex, comment déterminer le nombre de jour restant entre la date d’aujourd’hui, et la date d’expiration. Toutes la recherche (intéressante lorsque l’on veut comprendre la démarche de réflexion) se trouve dans le reste du post.
Je vais m’attarder ici sur le résultat.
PRE REQUIS
Pour commencer, il nous faut évidemment un certificat SSL, puis l’intégration (que vous pouvez ajouter via l’UI). Vous aurez donc la création du premier sensor.
Il nous faudra aussi un sensor date.
Le problème avec l’ancienne méthode, c’est qu’elle ne correspondait pas à une utilisation économe des performances du serveur. Le sensor était mis à jour à chaque changement de temps. Le sensor date, lui ne se met a jour qu’une fois par jour.
Ajoutez dans vos sensors l’exemple suivant:
sensor:
- platform: time_date
display_options:
- 'date'
Vous aurez donc 2 sensors :
states('sensor.cert_expiry_timestamp_URLDUDOMAINE')
équivalent à un chaine de caractère représentant la date d’expiration du certificat au format :
« ANNEE-MOIS-JOURTHEURE:MINUTE:SECONDE+DECALAGE HORAIRE » (vous noterez la présence du « T » pour séparer la date et l’heure, et le + pour séparé l’heure du décalage horaire).
states('sensor.date')
équivalent à une chaine de caractère représentant la date du jour au format:
« ANNEE-MOIS-JOUR ».
CALCUL
Pour trouver le nombre de jour entre ces 2 sensors, nous devrons convertir les chaines de caractères en format « datetime », puis effectuer la soustraction. Comme nous serons en format « datetime », nous pourrons récupérer le nombre de jour du résultat.
- Pour ce faire, nous avons besoin de maitriser les formats des deux sensor à l’aide de la fonction :
strptime (je vous laisse lire le chapitre TIME de la docs) :
strptime(states('sensor.cert_expiry_timestamp_URLDUDOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00')
strptime(states('sensor.date'), "%Y-%m-%d")
Ici, nous indiquons pour les deux sensors, ou se trouve l’année, le mois, le jour, etc dans leur chaine de caractère.
- Les deux sensors étant maintenant au format « datetime », nous pouvons les soustraires, et recuperer l’attribut « jour » du résultat :
(strptime(states('sensor.cert_expiry_timestamp_URLDUDOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00')-strptime(states('sensor.date'), "%Y-%m-%d")).days
Ici, soustraction des deux dates, puis récupération de l’attribut « jour » à l’aide de : .days
SENSOR
Je crée donc le template sensor de la forme suivante:
- Id Unique: cert_expiry_delay_URLDUDOMAINE
- Unité de mesure: Jour(s)
- Icone : un sablier (mdi:time-sand)
- Valeur du template:
{{(strptime(states('sensor.cert_expiry_timestamp_URLDUDOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00')-strptime(states('sensor.date'), "%Y-%m-%d")).days}}
sensor:
- platform: template
sensors:
cert_expiry_delay_URLDUDOMAINE:
friendly_name: "Expiration du certificat"
unit_of_measurement: "Jour(s)"
icon_template: mdi:timer-sand
value_template: >-
{{(strptime(states('sensor.cert_expiry_timestamp_URLDUDOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00')-strptime(states('sensor.date'), "%Y-%m-%d")).days}}
AUTOMATISATION
Les 2 sensors sont créés. Nous aurons donc chaque jour une mise à jour unique du délai restant. Nous pouvons donc créer une automatisation, via l’UI si vous le souhaitez, du type :
Si sensor.cert_expiry_delay_URLDUDOMAINE passe en dessous de 15, alors envoyer une notification.
alias: Expiration du certificat
description: ''
mode: single
trigger:
- platform: numeric_state
entity_id: sensor.cert_expiry_delay_URLDUDOMAINE
below: '15'
condition: []
action:
- service: notify.mobile_app_iphone
data:
title: Expiration du certificat
message: Le certificat arrive à expiration dans {{states('sensor.cert_expiry_delay_URLDUDOMAINE')}} jour(s).
Vous trouverez plus bas, d’autre possibilité pour l’automatisation.
Si vous souhaitez simplement avoir une automatisation, sans créer d’entité, rendez vous directement au post de @Clemalex.