Suivi consommation voiture électrique

Bonjour,

J’essaie de suivre la consommation de voiture électrique. Il s’agit d’une Dacia Spring et j’ai activé l’intégration Renault. Ça fonctionne plutôt bien et je remonte un certain nombre d’information dans Home Assistant.

Ce que je souhaite faire :

  1. Suivre la consommation de la voiture
  2. Compter les cycles de charge de la batterie

Pour le point #1, j’essaie d’utiliser un Utility Metter suivant la consommation quotidienne, hebdo et mensuel. Mais je ne parvient pas à configurer correctement. J’utilise la sonde de l’intégration Renault qui me remonte le niveau de batterie en Kwh dont la valeur varie entre 0 et 27 Kwh. Comment faire ?

Pour le point #2, je ne m’y suis pas encore penché. L’intégration Renault me remonte le comteur KM et le niveau de batterie en %.

Merci pour votre aide !

Salut,

bon ce pas évident de faire ce que tu veux, surtout avec une utility meter.
C’est plutôt fait pour un compteur incrémental et pas vraiment pour suivre un niveau de batterie qui se vide.

Il y a peut-être quelque chose que ne connais pas, mais de base si j’avais à la faire je partirais sur une entité template, potentiellement trigger-based sensor qui incrémenterait sa valeur à chaque fois que la batterie baisse. Ce qui donnerait un compteur qui ensuite pourrait être utilisé comme source pour un utility meter.

Le lien direct vers la doc:
Trigger-Based Sensor

Pour les cycles… ben là… faut déjà être d’accord sur ce qui constitue un cycle… et ensuite trouver comment ce serait caractérisé rien qu’en suivant l’évolution de la batterie…

Salut

Pour le point 1, si le DIY ne te derange pas, tu peux utiliser un PZEM pour mesurer le courant dans la ligne qui va ala prise de ta voiture electrique.

Pour le point 2 via la récupération des infos ODB une fois par jour ? Je sais que @jybi89 avait commencé à toucher le sujet, mais je ne sais pas s’il l’a finalisé.

Salut à vous deux,

Merci pour vos conseils.

Citation
Il y a peut-être quelque chose que ne connais pas, mais de base si j’avais à la faire je partirais sur une entité template, potentiellement trigger-based sensor qui incrémenterait sa valeur à chaque fois que la batterie baisse. Ce qui donnerait un compteur qui ensuite pourrait être utilisé comme source pour un utility meter.

Bon, et bien je ne connaissait pas ce type de sensor. Je croi que je suis arrivé à mon but.

Je partage mon test avec un slider pour valider.

- sensor:
    - name: "Niveau de batterie dacia test"
      unique_id: battery_level_dacia_test
      unit_of_measurement: "Kwh"
      state: "{{ states('input_number.niveau_batterie_test') | float | round(2) }}"

- trigger:
    - platform: state
      entity_id: input_number.niveau_batterie_test
  sensor:
    - name: "Battery Consumption"
      unique_id: sensor.battery_consumption
      unit_of_measurement: "Kwh"
      device_class: energy
      state_class: total_increasing
      state: >-
        {% set current = this.state | float(0) %}

        {% set delta = trigger.to_state.state | float - trigger.from_state.state | float %}
        {% if (delta < 0) %}
          {% set delta = (delta * -1) %}
        {% else %}
          {% set delta = 0 %}
        {% endif %}

        {{ current + delta }}
      attributes:
        delta: >-
          {% set delta = trigger.to_state.state | float - trigger.from_state.state | float %}
          {% if (delta < 0) %}
            {{ delta * -1 }}
          {% else %}
            {{ 0 }}
          {% endif %}

Avec ça, lorsque la batterie se décharge, la quantité d’énergie consommé augmente. Lorsqu’elle se décharge, rien ne passe. Parfait.

Pour le cycle, je vais ouvrir un autre sujet car en effet un problème à la fois, c’est plus simple. Je test en condition réel et je revient :wink:

1 « J'aime »

Salut,

Je reviens car hélas ça ne fonctionne pas tout à fait. En fait au moment du reload/reboot d’Home Assistant tout est remis à 0 :frowning:

Une idée de comment conserver l’état du sensor après reload/reboot ?

Salut,

j’étais pas très explicite :slight_smile:
Il va falloir un utility_meter pour ça.

j’étais pas très explicite :slight_smile:
Il va falloir un utility_meter pour ça.

Ha, je l’avais bien vue mais je pensais pouvoir m’en passer et tout faire dans le trigger sensor. Bref, du coup les étapes sont bien décomposé. Le trigger sensor calcul le delta entre 2 valeurs, puis l’utility meter compte. Je viens d’ajuster la configuration et ça fonctionne plutôt bien. Au reboot c’est ok le utility meter concerve bien la valeur et l’energy s’incrémente. Voilà le code que j’utilise pour le moment :

Le trigger sensor

- trigger:
    - platform: state
      entity_id: sensor.dacia_battery_available_energy
      not_from:
        - "unknown"
        - "unavailable"
    - platform: event
      event_type: event_template_reloaded
      id: 'reload'
    - platform: homeassistant
      event: start
      id: 'start'
  sensor:
    - name: "Dacia Battery Consumption Discharge"
      unique_id: sensor.dacia_battery_consumption_discharge
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: >-
        {% set delta = 0 | float %}
        
        {% if (trigger.id == 'reload' or trigger.id == 'start') %}
          {{ delta | float }}
        {% else %}
          {% if (trigger.to_state.state != 'unavailable') and (trigger.from_state.state != 'unavailable') %}
            {% set delta = ((trigger.to_state.state | float) - (trigger.from_state.state | float)) | float %}
            {% if (delta < 0) %}
              {% set delta = ((delta * -1) | float) %}
            {% endif %}
          {% endif %}
          {{ delta | float }}
        {% endif %}

Le utility meter

utility_meter:
  dacia_battery_consumption_discharge_counter:
    source: sensor.dacia_battery_consumption_discharge
    name: Dacia Battery Consumption Counter
    unique_id: "ts78dm-49bncs-i790e5-cg3uhn-gd3frl-5vj8ad"
    delta_values: true

Je vais laisser tourner quelque jours pour voir si c’est OK, mais j’ai l’impression que c’est bien :slight_smile:

1 « J'aime »

Test après weekend ça fonctionne bien, très bien :slight_smile:

1 « J'aime »

Et puis si ça peut servir à d’autre voilà comment j’ai réglé mon problème de cycle de charge :

Visiblement dans l’industrie automobile on considère qu’un cycle de charge signifie que la batterie passe de 0 % à 100 % de charge. Donc j’ai choisi de compter le nombre de fois que ma batterie fait 0 - 100%, je compte les écart au moment de la charge.

Exemple :
Niveau de batterie (%) | écart (%)
100 => 0
30 => 0
60 => 30
40 => 0
100 => 60
20 => 0
90 => 70

=> (30 + 60 + 70) / 100 = 1,6 cycle de charge

Du coup au niveau de Home Assistant c’est la même logique que pour compter l’énergie consommée. Un tirgger sensor qui compte les delta au moment de la charge de la voiture, et ensuite un utility meter qui comte les delta.

- trigger:
  - platform: state
    entity_id: sensor.dacia_battery_level
    not_from:
      - "unknown"
      - "unavailable"
  - platform: event
    event_type: event_template_reloaded
    id: 'reload'
  - platform: homeassistant
    event: start
    id: 'start'
  sensor:
    - name: "Dacia Battery cycle"
      unique_id: sensor.dacia_battery_cycle
      unit_of_measurement: ""
      state_class: measurement
      state: >-
        {% set delta = 0 %}
        
        {% if (trigger.id != 'reload' and trigger.id != 'start') %}
          {% if (trigger.to_state.state != 'unavailable') and (trigger.from_state.state != 'unavailable') %}
            {% set delta = (trigger.to_state.state | float - trigger.from_state.state | float) | float %}
            {% set delta = (0 if (delta < 0) else ((delta | float) / 100)) | float %}
          {% endif %}
        {% endif %}

        {{ delta | float }}

Et le utility metter

  dacia_battery_cycle_counter:
    source: sensor.dacia_battery_cycle_2
    name: Dacia Battery Cycle Counter
    unique_id: "9rws1h-hxkgdz-jnqsdp-2rqwev-ms60j2-cd3b8v"
    delta_values: true

Bonjour @marcounet, ton code m’interesse enormement, mais je n’arrive pas à l’integrer a mon Home assistant. Ma voiture est une renault Mégane, mais je nvois pas comment tu as integrer ton code, tu peux m’aider ?
Merci à toi