Calcul de temps et recharge VE en heures creuses

Bonjour à tous,
J’ai finalement réussi à écrire le code avec chat GPT qui m’a bien aidé.
Je transmets donc le code à la communauté si cela peut en aider.

J’ai créé un premier sensor permettant de calculer le temps de charge restant en fonction du pourcentage de charge de la batterie :

- platform: template
  sensors:
    temps_charge_restant:
      friendly_name: "Temps de charge restant"
      value_template: >-
        {% set pourcentage_actuel = states('sensor.test_batterie_pourcentage') | float(0) %}
        {% set pourcentage_cible = 80 %}
        {% set temps_par_pourcentage = 210 %}
        
        {% if pourcentage_actuel < pourcentage_cible %}
          {% set pourcentage_manquant = pourcentage_cible - pourcentage_actuel %}
          {% set temps_total = pourcentage_manquant * temps_par_pourcentage %}
          {{ temps_total | int }}
        {% else %}
          21000
        {% endif %}
      unit_of_measurement: "secondes"
      entity_id: sensor.test_batterie_pourcentage

Et j’ai ensuite créé un 2e sensor qui me permet de calculer l’heure de début de charge afin de pouvoir la récupérer dans une automatisation :

- platform: template
  sensors:
    heure_debut_charge:
      friendly_name: "Heure de début de charge"
      value_template: >-
        {% set temps_restant = states('sensor.temps_charge_restant') | float(0) %}
        
        {% if temps_restant > 0 %}
          {% set maintenant = now() %}
          {% set fin_charge = maintenant.replace(hour=6, minute=0, second=0, microsecond=0) %}
          
          {# Si l'heure actuelle est déjà après 6h00, on programme la charge pour finir le lendemain à 6h00 #}
          {% if maintenant.hour >= 6 %}
            {% set fin_charge = fin_charge + timedelta(days=1) %}
          {% endif %}
          
          {# Calcul de l'heure de début en soustrayant le temps de charge restant à l'heure de fin #}
          {% set debut_charge = fin_charge - timedelta(seconds=temps_restant) %}
          {{ debut_charge.isoformat() }}
        {% else %}
          "none"
        {% endif %}
      device_class: timestamp
      entity_id:
        - sensor.temps_charge_restant

N’hésitez pas à venir poser des questions sur l’application de ce code.