Monitorer les charges de sa voiture électrique

Bonjour à tous

J’ai une voiture électrique que je recharge en 16 ampères sur une prise renforcée protégée par un disjoncteur et un différentiel indépendant en 20A ampère, Avec en 1 petit module zigbee Qui me permet d’analyser la consommation et potentiellement de désactiver la prise.
cf sujet ici

Je voulais désormais être capable d’avoir une trace de toutes mes sessions de charge. Ainsi qu’une synthèse Du coup de toutes mes recharges du mois dernier.

J’ai fouillé un peu sur les forums et je vais vous partager du coup ce que j’ai fait car ça intéressera certainement certains d’entre vous et puis je suis preneur des remarques.

1) installer hass-variable

Cela permet ensuite de pouvoir créer des entité/var qui ne s’initialise pas au redémarrage.

2) Les entités que j’utilise

  • sensor.chargeur_voiture_power : Fourni en watts la puissance instantanée délivrée par la prise de recharge.
  • sensor.consommation_chargeur_voiture : Ceci est une entité créée manuellement basée sur sensor.chargeur_voiture_power afin d’en calculer la consommation en kw/h
  • input_number.cout_kwh_electricite : Entité créée manuellement numérique qui définit le coût fixe de mon électricité en EUR/kwh
  • sensor.charge_voiture : Variables+History (cf point 1) créé pour l’occasion

3) L’initialisation

Un petit script ou automatisation à lancer une seule fois de façon manuelle, Il va définir les attributs de l’entité sensor.charge_voiture , Et si les attributs existent déjà ils vont être purgés et réinitialisés.

alias: Init Session charge
description: ""
trigger: []
condition: []
action:
  - alias: Init
    action: variable.update_sensor
    metadata: {}
    data:
      replace_attributes: "no"
      value: INIT
      attributes:
        sessionscharge: null
    target:
      entity_id: sensor.charge_voiture
    enabled: true
mode: single

4) Détection automatique des sessions de charge

Nouveau script d’automatisation

alias: Enregistrer les sessions de charges de voiture
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.chargeur_voiture_power
    for:
      hours: 0
      minutes: 1
      seconds: 0
    below: 5
  - platform: numeric_state
    entity_id:
      - sensor.chargeur_voiture_power
    above: 5
condition: []
action:
  - alias: Si début de charge
    if:
      - condition: and
        conditions:
          - condition: template
            value_template: >-
              {% if state_attr('sensor.charge_voiture', 'start_time') is not
              none %}
                false
              {% else %}
                true
              {% endif %}
            alias: Vérifier qu'une charge est pas déjà en cours
          - condition: numeric_state
            entity_id: sensor.chargeur_voiture_power
            above: 10
    then:
      - action: variable.update_sensor
        metadata: {}
        data:
          replace_attributes: "no"
          value: En charge
          attributes:
            start_time: "{{ now().timestamp() }}"
            start_conso: "{{ states('sensor.consommation_chargeur_voiture') }}"
        target:
          entity_id: sensor.charge_voiture
  - alias: Si fin de charge
    if:
      - condition: numeric_state
        entity_id: sensor.chargeur_voiture_power
        below: 5
    then:
      - if:
          - condition: template
            value_template: >-
              {% if state_attr('sensor.charge_voiture', 'start_time') is not
              none %}
                true
              {% else %}
                false
              {% endif %}
        then:
          - action: variable.update_sensor
            metadata: {}
            data:
              replace_attributes: true
              value: Fin de charge
              attributes:
                sessionscharge: >-
                  {% set diff_seconds = now().timestamp() -
                  state_attr('sensor.charge_voiture','start_time') %} {% set
                  conso = (states('sensor.consommation_chargeur_voiture') |
                  float) - state_attr('sensor.charge_voiture','start_conso') %}
                  {% set hours = (diff_seconds / 3600) | int %} {% set minutes =
                  ((diff_seconds % 3600) / 60) | int %} {% set sessioncharge = 
                    {
                      'consommation': conso | float | round(2),
                      'durée': '%02d:%02d' | format(hours, minutes) ,
                      'début': state_attr('sensor.charge_voiture','start_time') | int | timestamp_custom('%d/%m/%Y %H:%M', true), 
                      'fin':  now().strftime('%d/%m/%Y %H:%M'),
                      'coût': ((conso | float) * (states('input_number.cout_kwh_electricite') | float) / 1000)  | round(2),
                      'puissance_start': state_attr('sensor.charge_voiture','start_conso'),
                      'puissance_end': (states('sensor.consommation_chargeur_voiture') | float)
                    } 


                  %}

                  {% if state_attr('sensor.charge_voiture', 'sessionscharge') is
                  not none %}
                    {{ state_attr('sensor.charge_voiture', 'sessionscharge') + [sessioncharge] }}
                  {% else %}
                    [ {{ sessioncharge }} ]
                  {% endif %}
            target:
              entity_id: sensor.charge_voiture
        else:
          - action: system_log.write
            metadata: {}
            data:
              level: error
              message: >-
                Erreur : Fin de charge détecté mais absence de début de charge
                dans le modèle
  - alias: Init
    action: variable.update_sensor
    metadata: {}
    data:
      replace_attributes: "no"
      value: INIT
      attributes:
        sessionscharge: null
    target:
      entity_id: sensor.charge_voiture
    enabled: false
mode: single

5) lovelace card

Et pour l’instant j’ai fait une rapide carte en markdown

type: markdown
content: >-
  {% if state_attr('sensor.charge_voiture', 'start_time') is not none %}
    # Charge en cours
  {% endif %}


  {% set sessions = state_attr('sensor.charge_voiture','sessionscharge') %}


  {% if sessions is defined and sessions is not none and sessions | length > 0

  %}
    ## Dernière charge
      {% set dernier_session = sessions[-1] %}
      {% set consommation = dernier_session['consommation'] %}
      {% set cout = dernier_session['coût'] %}
      {% set duree = dernier_session['durée'] %}
    - Coût  : {{cout}} €
    - Durée : {{duree}}
    - Puissance {{(consommation / 1000) | round(2)}} kW/H

  ## Synthèse

  {% set total_cost = namespace(mc=0,mp=0) %}



  {% set mois_precedent = (now().month - 1) %}

  {% set annee_mois_precedent = (now().year) %}

  {% if mois_precedent == 0%}
    {% set mois_precedent = 12 %}
    {% set annee_mois_precedent = (now().year - 1) %}
  {% endif %}


  {% for session in state_attr('sensor.charge_voiture', 'sessionscharge') %}
    {% set fin_date = strptime(session.fin, '%d/%m/%Y %H:%M') %}
    {% if fin_date.month == now().month and fin_date.year == now().year %}
      {% set total_cost.mc = total_cost.mc + session.coût %}
    {% endif %}
    {% if fin_date.month == mois_precedent and fin_date.year == annee_mois_precedent %}
      {% set total_cost.mp = total_cost.mp + session.coût %}
    {% endif %}
  {% endfor %}

  - Coût de la recharge pour le mois précédent : {{ total_cost.mp | round(2) }}
  €

  - Coût de la recharge pour le mois en cours : {{ total_cost.mc | round(2) }} €


  {% else %}
     ## Aucune session de charge trouvée
     Dès qu'une charge complète aura été effectuée, vous trouverez des informations ici.
  {% endif %}


2 « J'aime »

Bonjour,

J’ai essayé de creer les automatisations mais je ne comprends pas comment creer les entités.
Pouvez vous detailler le type de chaque entité :

  • sensor.consommation_chargeur_voiture
  • input_number.cout_kwh_electricite
  • sensor.charge_voiture
    Merci beaucoup par avance

salut

ba tout est ecrit
pour

et ensuite j’ai mis 0,2054 €/kwh

pour : sensor.charge_voiture : suivre le point 3

Merci pour cette réponse, il me reste l’entité

  • sensor.consommation_chargeur_voiture
    Que je nais pas comment créer, dois je creer une entrée de type " Combiner l’état de plusieurs capteurs" ?

Merci

Non mais pour l’entité consommation du chargeur de voiture ça peut pas se créer il faut avoir une sonde au niveau de là où tu recharge ta voiture

Par exemple une prise connectée

Oui je comprends bien , j’ai une pince amperemerique qui enregistre la puissance consommée au moment de la charge, mais tu dis:
" * sensor.consommation_chargeur_voiture : Ceci est une entité créée manuellement basée sur sensor.chargeur_voiture_power afin d’en calculer la consommation en kw/h"
et je comprends donc qu il faut la creer manuellement mais je ne sais pas de quelle type est cette entrée.

Certaines sondes calculent la consommation sinon effectivement tu peux calculer la consommation toi-même à partir de la puissance