# Création de l'entité temps restant d'un certificat SSL

**URL:** <https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670>\
**Category:** Intégration\
**Created:** [Décembre 24, 2020, 3:19 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670 "2020-12-24T15:19:07Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Landaisbenj](https://forum.hacf.fr/user_avatar/forum.hacf.fr/landaisbenj/32/1464_2.png) [@Landaisbenj](https://forum.hacf.fr/u/Landaisbenj)\
**Post date:** [Décembre 24, 2020, 3:19 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/1 "2020-12-24T15:19:07Z")

</div>

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: «&nbsp;[Expiration du certificat](https://www.home-assistant.io/integrations/cert_expiry)&nbsp;».

Nous n’avons maintenant qu’un seul sensor nous indiquant la date d’expiration de notre certificat, sous la forme :

> «&nbsp;sensor.cert\_expiry\_timestamp\_URLDUDOMAINE&nbsp;»

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](https://www.home-assistant.io/integrations/time_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:

```auto
sensor:
  - platform: time_date
    display_options:
      - 'date'

```

Vous aurez donc 2 sensors :

1. `states('sensor.cert_expiry_timestamp_URLDUDOMAINE')` équivalent à un chaine de caractère représentant la date d’expiration du certificat au format :

> «&nbsp;ANNEE-MOIS-JOURTHEURE:MINUTE:SECONDE+DECALAGE HORAIRE&nbsp;» ([vous noterez la présence du «&nbsp;T&nbsp;» pour séparer la date et l’heure](https://forum.hacf.fr/t/alerte-temps-restant-certificat-ssl/1670/16), et le + pour séparé l’heure du décalage horaire).

1. `states('sensor.date')` équivalent à une chaine de caractère représentant la date du jour au format:

> «&nbsp;ANNEE-MOIS-JOUR&nbsp;».

**CALCUL**

Pour trouver le nombre de jour entre ces 2 sensors, nous devrons convertir les chaines de caractères en format «&nbsp;datetime&nbsp;», puis effectuer la soustraction. Comme nous serons en format «&nbsp;datetime&nbsp;», nous pourrons récupérer le nombre de jour du résultat.

1. 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)](https://www.home-assistant.io/docs/configuration/templating/) :

```auto
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._

1. Les deux sensors étant maintenant au format «&nbsp;datetime&nbsp;», nous pouvons les soustraires, et recuperer l’attribut «&nbsp;jour&nbsp;» 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 «&nbsp;jour&nbsp;» à l’aide de :_ `.days`

**SENSOR**  
Je crée donc le [template sensor](https://www.home-assistant.io/integrations/template/) de la forme suivante:

1. Id Unique: cert\_expiry\_delay\_URLDUDOMAINE
2. Unité de mesure: Jour(s)
3. Icone : un sablier (mdi:time-sand)
4. 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}}`

```auto
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.

```auto
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](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/4) de @Clemalex.

---

<div class="post-metadata">

**Author:** ![Guillaume\_B](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/g/35a633/32.png) [@Guillaume\_B](https://forum.hacf.fr/u/Guillaume_B)\
**Post date:** [Décembre 24, 2020, 3:42 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/2 "2020-12-24T15:42:10Z")

</div>

La commande suivante retourne le nombre de jours restants

```auto
ssl-cert-check -b -c chemin vers le fichier .pem | awk '{print $NF}'

```

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 24, 2020, 3:54 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/3 "2020-12-24T15:54:55Z")

</div>

> [@Landaisbenj](#):
>
> Auriez-vous des pistes ?

Voici un déclencheur qui devrait fonctionner (se déclenche à minuit, tous les jours, 15 jours avant, ajouter un `delay` si t’as pas envie d’être réveillé 😉) en calculant à partir de la date actuelle du serveur :

```yaml
trigger:
    - platform: template
      value_template: >-
       {{ as_timestamp(strptime(states("sensor.date"),"%Y-%m-%d") + timedelta(days=15) ) | timestamp_custom("%Y-%m-%d") >= states("sensor.cert_expiry_timestamp_NOM_DE_DOMAINE").split('T')[0] }}

```

Il faut avoir activé l’entité `date` de [cette plateforme](https://www.home-assistant.io/integrations/time_date/).  
Pour les explications, il faudra attendre après le/les réveillons 😇

 ![Noël](https://forum.hacf.fr/uploads/default/original/2X/3/3ef8e9ab4f74ed935513d141dca8f80689d6cb73.png) Bon réveillon !

PS:  
l’équivalent en calculant dans l’autre sens, à partir de la date du certificat :

```yaml
{{as_timestamp(strptime(states("sensor.cert_expiry_timestamp_NOM_DE_DOMAINE").split("T")[0],"%Y-%m-%d") - timedelta(days=15)) | timestamp_custom("%Y-%m-%d") <= states("sensor.date")}}

```

et à partir de l’entité `sensor.time` :

```yaml
{{ as_timestamp(states.sensor.time.last_changed + timedelta(days=15) ) | timestamp_custom("%Y-%m-%d") >= states("sensor.cert_expiry_timestamp_NOM_DE_DOMAINE").split('T')[0] }}

```

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 26, 2020, 9:43 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/4 "2020-12-26T21:43:22Z")

</div>

### Au final, je ferais ainsi :

#### Ce que l’on cherche à faire :

On a une entité qui contient la date de fin de la validité du certificat SSL pour se connecter de manière sécurisée à un serveur, et on souhaite être prévenu `15 jours` avant (puis les suivants jusqu’à la date fatidique si pas renouvelé).

#### Pré-requis

On va utiliser la date du jour du serveur ([documentation](https://www.home-assistant.io/integrations/time_date/)).  
Dans notre fichier de configuration, il faut ajouter :

```yaml
sensor:
  - platform: time_date
    display_options:
      - 'date' # crée une entité représentant la date du jour

```

#### L’entité contenant l’information

Comme nous avons ajouter l’intégration [Certificate Expiry](https://www.home-assistant.io/integrations/cert_expiry/) , nous avons une entité représentant la date d’expiration du certificat dont nous voulons être averti de la péremption prochaine (à 15 jours).

```yaml
Entité: sensor.cert_expiry_timestamp_NOM_DE_DOMAINE
Etat: 2021-03-17T18:47:39+00:00

```

Bien que ce format semble être de la classe `datetime`, il n’en est rien.

Ce n’est pas grave, on va nous même convertir ce texte, de classe `string`, vers la classe `datetime` afin de pouvoir faire des calculs avec la notion de temps (+/- 15 jours, heures, minutes, etc.)

#### Conversion en datetime

Dans l’éditeur de modèle (présent dans l’onglet `Modèle` de la vue `Options de développement`), si on tape :

```yaml
{{states('sensor.cert_expiry_timestamp_NOM_DE_DOMAINE')}}

```

On récupère l’état sous forme de texte (string)… il nous faut le convertir en classe `datetime` ([documentation](https://www.educative.io/edpresso/how-to-convert-a-string-to-a-date-in-python)):

```yaml
{{ strptime(states('sensor.cert_expiry_timestamp_NOM_DE_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00') }}

```

Avec ce code, on récupère bien un objet de la classe `datetime` auquel on peux faire des calculs de temps.

Dans notre cas, nous avons dit que nous aimerions être averti 15 jours avant la date d’expiration, il nous faut donc calculer la date d’expiration moins 15 jours. C’est possible de façon très facile avec la fonction `timedelta` ([documentation](https://docs.python.org/fr/3/library/datetime.html#datetime.timedelta)) :

```yaml
{{strptime(states('sensor.cert_expiry_timestamp_NOM_DE_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00') - timedelta(days=15)}}

```

On vient donc de trouver la formule qui nous permet d’obtenir la date à partir de laquelle nous voulons être avertie de la future expiration.

Il nous reste donc à être averti.

#### L’automatisation

Pour être averti, cela va passer par une automatisation.  
Pour l’action, je vous laisse choisir votre plateforme préférée et l’ajouter dans la partie `action` de l’automatisation.  
Je vais me consacrer ici aux déclencheurs et conditions de l’automatisation.

#### Déclencheur de l’automatisation

Pour rappel, nous voulons être averti 15 jours avant la date d’expiration du certificat, ce sera donc notre déclencheur.  
En français cela donne donc :

> Est-ce que la date d’aujourd’hui est égale ou supérieure à la date d’expiration du certificat - 15 jours ?

La version code donne donc :

```yaml
{{ states('sensor.date') >= strptime(states('sensor.cert_expiry_timestamp_NOM_DE_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00') - timedelta(days=15)}}

```

⚠ Pour qu’une automatisation se déclenche, il faut que l’un de ses déclencheurs (nous, nous n’en avons qu’un ici) renvoit l’état `Vrai`.  
Mais notre code renverra constamment `Faux`. Pourquoi ? Car l’état de l’entité `sensor.date` a le format `ANNEE-MOIS-JOUR`, et on le compare à un objet ayant le format `ANNEE-MOIS-DATE HH:MM:SS`.  
Il faut donc `raccourcir` notre objet afin d’avoir le même format que l’entité `sensor.date`.

Pour cela, on va utiliser la fonction `as_timestamp` ([documentation](https://www.home-assistant.io/docs/configuration/templating/)) qui permet de convertir en timestamp afin de pourvoit appliquer le `filtre` : `timestamp_custom` ([documentation](https://www.home-assistant.io/docs/configuration/templating/)).

Pour rappel, le code suivant renvoi la date à laquelle doivent commencer les notifications :

```yaml
{{strptime(states('sensor.cert_expiry_timestamp_NOM_DE_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00') - timedelta(days=15)}}

```

renvoi (par exemple avec mon certificat - 15jours) :

```bash
2021-03-02 18:47:39

```

On va donc raccourcir le retour d’état avec ce code :

```auto
{{as_timestamp(strptime(states('sensor.cert_expiry_timestamp_NOM_DE_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00') - timedelta(days=15)) | timestamp_custom('%Y-%m-%d')}}

```

qui renvoi :

```bash
2021-03-02

```

Bingo ! On va pouvoir comparer ce résultat avec l’entité `sensor.date`👍

Nous pouvons donc maintenant écrire le déclencheur de l’automatisation ainsi :

```yaml
{{ states('sensor.date') >= as_timestamp(strptime(states('sensor.cert_expiry_timestamp_NOM_DE_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00') - timedelta(days=15)) | timestamp_custom('%Y-%m-%d')}}

```

Malheureusement, si on met ce code dans le déclencheur de l’automatisation, nous ne serons notifié qu’une seule fois.  
Pourquoi ? Car une fois de que la date sera à 15 jours de l’expiration, le résultat du modèle va passer à `Vrai` et ce, jusqu’à ce que la date d’expiration du certificat repasse au dessus du seuil des 15 jours.

Donc nous devons utiliser ce code comme `condition` de l’automatisation et non pas comme déclencheur.  
Et le déclencheur alors ? Et bien on va faire déclencher l’automatisation tous les jours avec le code suivant :

```yaml
trigger:
    - platform: state
      entity_id: sensor.date

```

#### Condition de l’automatisation

L’automatisation va donc s’exécuter à chaque changement d’état de l’entité `sensor.date` (donc tous les jours à minuit).  
On va donc conditionner l’exécution des actions sur le fait d’être dans la période des 15 jours avant l’expiration :

```yaml
condition: "{{ states('sensor.date') >= as_timestamp(strptime(states('sensor.cert_expiry_timestamp_NOM_DE_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00') - timedelta(days=15)) | timestamp_custom('%Y-%m-%d')}}"

```

Et voila !

### Pour résumer

Voici donc le code complet de l’automatisation :

```yaml
automation:
  - alias: 'alerte_expiration_certificat'
    id: 'alerte_expiration_certificat'
    trigger:
    - platform: homeassistant
      event: start
    - platform: state
      entity_id: sensor.date
    condition: "{{ states('sensor.date') >= as_timestamp(strptime(states('sensor.cert_expiry_timestamp_<NOM_DE_DOMAINE>'), '%Y-%m-%dT%H:%M:%S+00:00') - timedelta(days=states('input_number.ssl_seuil')|int)) | timestamp_custom('%Y-%m-%d')}}"
    action:
      - service: persistent_notification.create
        data:
          message: "Le certificat pour NOM_DE_DOMAINE est bientôt expiré ! \n Merci de le renouveller !"
          title: "Certificat SSL/TLS"
          notification_id: "{{ (range(1, 9999)|random) }}"

```

Alors oui, j’ai ajouter un déclencheur :

```yaml
    - platform: homeassistant
      event: start

```

qui correspond au démarrage du serveur afin de recevoir une notification en cas de démarrage sans attendre le jour d’après (imaginez un redémarrage à 23:59 et le serveur est opérationnel à 00:01, vous loupez une journée 😱 😉)

Alors re-oui, j’ai implémenté le fait de gérer le seuil d’alerte (les fameux 15 jours) par l’entité `input_number.ssl_seuil` :

```bash
states('input_number.ssl_seuil')|int

```

afin de rendre l’édition du seuil possible par l’interface graphique. Si vous ne savez pas implémenter cette entité, demandez dans les commentaires 👍.

Alors non, je n’ai pas voulu ajouter les lignes :

```yaml
    - platform: state
      entity_id: input_number.ssl_seuil

```

afin de déclencher l’automatisation également sur le changement d’état de l’entité gérant le seuil 😉.

Voilà, mes explications sont finies.  
Si vous avez des questions…n’hésitez pas 👍

---

<div class="post-metadata">

**Author:** ![Landaisbenj](https://forum.hacf.fr/user_avatar/forum.hacf.fr/landaisbenj/32/1464_2.png) [@Landaisbenj](https://forum.hacf.fr/u/Landaisbenj)\
**Post date:** [Décembre 27, 2020, 8:51 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/5 "2020-12-27T08:51:40Z")

</div>

Merci @Clemalex. C’est impressionnant de détails. Si on pouvait tous faire comme cela, on y gagnerait…

Merci de ton retour. Je continue de chercher de mon coté, car je cherche à le faire dans l’autre sens:  
Creer un sensor avec le nombre de jour restant, pour pouvoir l’afficher sur le lovelace, et creer l’automatisation a partir de là.

---

<div class="post-metadata">

**Author:** ![Landaisbenj](https://forum.hacf.fr/user_avatar/forum.hacf.fr/landaisbenj/32/1464_2.png) [@Landaisbenj](https://forum.hacf.fr/u/Landaisbenj)\
**Post date:** [Décembre 27, 2020, 9:58 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/6 "2020-12-27T09:58:11Z")

</div>

Bon, j’avance petit à petit, j’ai vraiment eu du mal a me situer entre les datetimes, et les string. J’ai enfin une valeure en datetime avec: .

```auto
(strptime(states('sensor.cert_expiry_timestamp_URL_DU_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00')
-
strptime((states('sensor.date')), "%Y-%m-%d"))

```

Il ne me manque maintenant plus qu’a trouver comment ne récuperer que le nombre de jour (les heures etant aussi affichées)

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 27, 2020, 10:15 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/7 "2020-12-27T10:15:17Z")

</div>

> [@Landaisbenj](#):
>
> ```auto
> (strptime(states('sensor.cert_expiry_timestamp_URL_DU_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00')
> -
> strptime((states('sensor.date')), "%Y-%m-%d"))
> 
> ```

T’es pas loin… 🤤

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 27, 2020, 10:22 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/8 "2020-12-27T10:22:31Z")

</div>

Je te laisse chercher ou je dis comment faire ?

> **Ne pas ouvrir si tu veux chercher toi-même !**
>
> > [@Clemalex](#):
> >
> > > [@Landaisbenj](#):
> > >
> > > ````auto
> > > > (strptime(states('sensor.cert_expiry_timestamp_URL_DU_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00')
> > > -
> > > strptime((states('sensor.date')), "%Y-%m-%d"))
> > > > ```
> > > 
> > > ````
> > 
> > T’es pas loin… 🤤
> 
> Quand je disais que tu n’étais pas loin, c’est vraiment le cas.
> 
> En fait, ton code correspond à [cet exercice](https://www.w3resource.com/python-exercises/python-basic-exercise-14.php) 😉
> 
> Ton code calcul un `delta` entre deux dates car tu as eu la bonne idée de convertir tout ce petit monde en objet `datetime`, du coup, les calculs de date deviennent possible 👍.
> 
> Du coup, il faut simplement rajouter que tu veux juste récupérer le nombre de jours en ajoutant `.days`
> 
> Ce qui donne comme nouvelle entité :
> 
> ```yaml
> sensor:
> - platform: template
> sensors:
> cert_days:
> friendly_name: "Nombre de jour restant"
> value_template: >
> {{(strptime(states('sensor.cert_expiry_timestamp_URL_DU_DOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00')
> -
> strptime((states('sensor.date')), "%Y-%m-%d")).days }}
> 
> ```
> 
> N’oublies pas de poster l’automatisation qui va avec 🥰

---

<div class="post-metadata">

**Author:** ![Landaisbenj](https://forum.hacf.fr/user_avatar/forum.hacf.fr/landaisbenj/32/1464_2.png) [@Landaisbenj](https://forum.hacf.fr/u/Landaisbenj)\
**Post date:** [Décembre 27, 2020, 10:46 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/9 "2020-12-27T10:46:55Z")

</div>

Pfffiouuuuuu Des heures et des heures, pour arriver a cette conclusion, en sachant que j’etais deja passé par cette case la .day, et .day() 😭 😭 😭 🤣 🤣 🤣 tout ca pour un «&nbsp;s&nbsp;» lol. Bon merci pour ton partage, j’ai reussi en tombant sur un site a trouver ce .days aussi. Je vais modifier mon poste support, en poste tutoriel, et indiquer comment creer le sensor, et l’automatisation qui ira avec.

C’était pas de la tarte moi qui n’y connais rien en python…

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 27, 2020, 10:47 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/10 "2020-12-27T10:47:25Z")

</div>

> [@Landaisbenj](#):
>
> Merci @Clemalex. C’est impressionnant de détails. Si on pouvait tous faire comme cela, on y gagnerait…

Oui, je suis d’accord 🥰.

> [@Landaisbenj](#):
>
> je cherche à le faire dans l’autre sens:  
> Creer un sensor avec le nombre de jour restant, pour pouvoir l’afficher sur le lovelace, et creer l’automatisation a partir de là.

Oui, j’avais compris que tu souhaitais retrouver l’entité que tu as perdue suite à la mise à jour…

Mais j’avais un besoin de tutoriel… 🙃

Au final, n’oublie pas de marquer la solution qui te conviens le mieux, ceux qui veulent comprendre feront défiler les posts un à un… 😀

---

<div class="post-metadata">

**Author:** ![Landaisbenj](https://forum.hacf.fr/user_avatar/forum.hacf.fr/landaisbenj/32/1464_2.png) [@Landaisbenj](https://forum.hacf.fr/u/Landaisbenj)\
**Post date:** [Décembre 27, 2020, 10:48 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/11 "2020-12-27T10:48:34Z")

</div>

> [@Clemalex](#):
>
> `.split("T")[0]`

Par contre, je l’ai compris, mais je ne t’ai pas vu expliquer ca.

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 27, 2020, 10:49 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/12 "2020-12-27T10:49:27Z")

</div>

> [@Landaisbenj](#):
>
> Je vais modifier mon poste support, en poste tutoriel, et indiquer comment creer le sensor, et l’automatisation qui ira avec.

Modifie le premier post comme tu le dit et je ferais le ménage dans les messages pour extraire mon tutoriel (qui ne réponds pas réellement à ton besoin) en pointant sur le tien 👍

---

<div class="post-metadata">

**Author:** ![Landaisbenj](https://forum.hacf.fr/user_avatar/forum.hacf.fr/landaisbenj/32/1464_2.png) [@Landaisbenj](https://forum.hacf.fr/u/Landaisbenj)\
**Post date:** [Décembre 27, 2020, 10:50 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/13 "2020-12-27T10:50:12Z")

</div>

> [@Clemalex](#):
>
> ```auto
> cert_days:
> friendly_name: "Nombre de jour restant"
> value_template: >
> {{(strptime(states('sensor.cert_expiry_timestamp_URL_DU_DOMAINE').split("T")[0], '%Y-%m-%d')
> -
> strptime((states('sensor.date')), "%Y-%m-%d")).days }}
> 
> ```

Comme tu veux, mais je pense que tout ce qu’on as fait montre la démarche, et des fois c’est plus explicite…

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 27, 2020, 10:50 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/14 "2020-12-27T10:50:50Z")

</div>

> [@Landaisbenj](#):
>
> Par contre, je l’ai compris, mais je ne t’ai pas vu expliquer ca.

Oups ! j’édites car ça ne sert pas.

Je voulais voir si en ne récupérant que la date, sans les heures, je pouvais introduire cette explication… 😁

---

<div class="post-metadata">

**Author:** ![Landaisbenj](https://forum.hacf.fr/user_avatar/forum.hacf.fr/landaisbenj/32/1464_2.png) [@Landaisbenj](https://forum.hacf.fr/u/Landaisbenj)\
**Post date:** [Décembre 27, 2020, 10:51 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/15 "2020-12-27T10:51:55Z")

</div>

Oui mais ca reste intéressant. La fonction split peut resservir plus tard pour autre chose, du coup de la trouver par hasard sur un tel poste pourra aider pour une autre recherche. Perso moi je me la met de coté.

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 27, 2020, 10:56 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/16 "2020-12-27T10:56:16Z")

</div>

Dès fois, j’ai la mémoire courte, j’ai expliqué la function `split` ici :  
[https://forum.hacf.fr/t/automatisation-avec-input-number-cover/1320/33?u=clemalex](https://forum.hacf.fr/t/automatisation-avec-input-number-cover/1320/33?u=clemalex)

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Décembre 27, 2020, 10:57 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/17 "2020-12-27T10:57:33Z")

</div>

> [@Landaisbenj](#):
>
> Comme tu veux, mais je pense que tout ce qu’on as fait montre la démarche

Je suis à 💯 d’accord, le plus important n’est pas le code mais la démarche et la réflexion pour y arriver !

Ca marche, je laisse ici 👍

---

<div class="post-metadata">

**Author:** ![Sylvain\_G](https://forum.hacf.fr/user_avatar/forum.hacf.fr/sylvain_g/32/1528_2.png) [@Sylvain\_G](https://forum.hacf.fr/u/Sylvain_G)\
**Post date:** [Janvier 24, 2022, 10:46 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/18 "2022-01-24T10:46:03Z")

</div>

Désolé de relancer un si vieux post mais j’ai un soucis pour le mettre en oeuvre.

J’ai mis ce code :

```auto
# Création d'un capteur pour avoir le nombre de jours avant expiration du certificat.
#
# https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670
# https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/4
#
platform: template
sensors:
  cert_expiry_delay_URLDUDOMAINE:
    friendly_name: "Expiration du certificat URLDUDOMAINE"
    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}}

```

Et j’ai cette logs dans le journal de HA suite au rédémarrage :

```nohighlight
TemplateError('TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime'') while processing template 'Template("{{(strptime(states('sensor.cert_expiry_timestamp_URLDUDOMAINE'), '%Y-%m-%dT%H:%M:%S+00:00')-strptime(states('sensor.date'), "%Y-%m-%d")).days}}")' for attribute '_attr_native_value' in entity 'sensor.cert_expiry_delay_URLDUDOMAINE'

```

Evidemment, je n’ai pas `URLDUDOMAINE` dans mon code et les logs mais mon nom de domaine 😇

J’ai un peu de mal à comprendre la log … 🤔

---

<div class="post-metadata">

**Author:** ![TROM](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/t/958977/32.png) [@TROM](https://forum.hacf.fr/u/TROM)\
**Post date:** [Mars 1, 2022, 10:42 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/19 "2022-03-01T22:42:29Z")

</div>

> [@Clemalex](#):
>
> Alors re-oui, j’ai implémenté le fait de gérer le seuil d’alerte (les fameux 15 jours) par l’entité `input_number.ssl_seuil` :
> 
> ```auto
> states('input_number.ssl_seuil')|int
> 
> ```
> 
> afin de rendre l’édition du seuil possible par l’interface graphique. Si vous ne savez pas implémenter cette entité, demandez dans les commentaires 👍.

Bonjour,

Je suis preneur d’une explication, après recherche, je tourne en rond… Je précise que je suis débutant

Merci par avance

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Mars 1, 2022, 11:25 UTC](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670/20 "2022-03-01T23:25:09Z")

</div>

Une explication sur quoi ? Ma réponse comporte déjà énormément de détails…  
Donc si tu en veux plus, explique où tu bloques exactement et ce que tu as fais…

[Page suivante](https://forum.hacf.fr/t/creation-de-lentite-temps-restant-dun-certificat-ssl/1670.md?page=2)
