Enregistrer l'historique d'un ensemble de données

Bonjour à tous,

Mon problème

Je possède un véhicule électrique et je cherche à historiser un ensemble de données lors de chaque charge. L’idée est de faire ce que propose l’application du constructeur (Renault) mais en mieux (notamment ajouter l’énergie consommée réelle et le prix) et surtout le stocker dans mon HA et l’avoir en visuel dans mon dashboard.

Pour ce faire j’ai créé un ensemble d’helper et 2 automations :

  • L’une qui s’exécute lorsque la charge débute, elle set tous les helper avec la valeur actuel
  • L’autre qui s’exécute à la fin de la charge. Elle set une variable sous forme de template puis envoie une notification sur mon téléphone avec les infos et stocke le template dans une variable via cette intégration (car ça ne rentre pas dans un input_text). J’affichage ensuite les infos via custom:logbook-card

ça donne ce résultat (j’avais testé au début sans les emojis) :
image

Le système fonctionne bien mais je me dis qu’il y a peut être mieux pour faire ce système et faciliter l’historisation ?

Voici le YAML des 2 automatisations :

# Voiture - début de charge
- id: car_start_charging
  alias: Voiture - début de charge
  trigger:
  - platform: state
    entity_id: binary_sensor.scenic_en_charge
    from: "off"
    to: "on"
  action:
  - service: input_number.set_value
    data:
      entity_id: input_number.pourcentage_batterie_scenic_debut_charge
      value: "{{ states('sensor.scenic_batterie') | int }}"
  - service: input_number.set_value
    data:
      entity_id: input_number.autonomie_scenic_debut_charge
      value: "{{ states('sensor.scenic_autonomie_de_la_batterie') | int }}"
  - service: input_number.set_value
    data:
      entity_id: input_number.consommation_prise_debut_charge
      value: "{{ states('sensor.consommation_prise_voiture_em0_total_active_energy') | float }}"
  - service: input_datetime.set_datetime
    data:
      entity_id: input_datetime.scenic_date_heure_debut_charge
      datetime: "{{ now() }}"
  
# Voiture - fin de charge    
- id: car_end_charging
  alias: Voiture - fin de charge
  trigger:
  - platform: state
    entity_id: binary_sensor.scenic_en_charge
    from: "on"
    to: "off"
  action:
  - variables:
      charge_time_seconds: >
        {{ as_timestamp(now()) - as_timestamp(states('input_datetime.scenic_date_heure_debut_charge')) }}

      charge_summary: >
        🕙 Début et fin : du {{ as_timestamp(states('input_datetime.scenic_date_heure_debut_charge')) | timestamp_custom('%d/%m/%Y %H:%M:%S') }} au {{ now().strftime('%d/%m/%Y %H:%M:%S') }}
        
        ⌛ Temps de charge : {{ (charge_time_seconds / 3600) | int }}h {{ ((charge_time_seconds % 3600) / 60) | int }}m {{ (charge_time_seconds % 60) | int }}s
        
        🔋 Batterie : de {{ states('input_number.pourcentage_batterie_scenic_debut_charge') | int }}% jusqu'à {{ states('sensor.scenic_batterie') | int }}%
        
        🚘 Autonomie en km : de {{ states('input_number.autonomie_scenic_debut_charge') | int }} km jusqu'à {{ states('sensor.scenic_autonomie_de_la_batterie') | int }} km
        
        📈 Gain batterie par heure : {{
            (
                (
                    states('sensor.scenic_batterie') | float - states('input_number.pourcentage_batterie_scenic_debut_charge') | float
                ) / 
                (
                    (as_timestamp(now()) - as_timestamp(states('input_datetime.scenic_date_heure_debut_charge'))) / 3600
                )
            ) | round(0)
        }}% / heure
        
        ⚡ Energie consommée : {{ (states('sensor.consommation_prise_voiture_em0_total_active_energy') | float - states('input_number.consommation_prise_debut_charge') | float) | round(2) }} kWh
        
        💶 Coût : {{ ((states('sensor.consommation_prise_voiture_em0_total_active_energy') | float - states('input_number.consommation_prise_debut_charge') | float) * states('input_number.prix_electricite_actuel') | float) | round(2) }} €
     
  - service: var.set
    data:
      entity_id: var.scenic_charge_recap
      value: "{{ charge_summary }}"

  - service: notify.mobile_app_smartphone
    data:
      title: 🔋 Fin de charge du Scénic
      message: >
        {{ charge_summary }}

Merci d’avance pour vos avis :slight_smile:

Ma configuration


System Information

version core-2024.8.1
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.4
os_name Linux
os_version 6.6.31-haos-raspi
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4810
Installed Version 1.34.0
Stage running
Available Repositories 1386
Downloaded Repositories 22
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 12.4
update_channel stable
supervisor_version supervisor-2024.08.0
agent_version 1.6.0
docker_version 26.1.4
disk_total 28.5 GB
disk_used 8.0 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Advanced SSH & Web Terminal (18.0.0), File editor (5.8.0), Z-Wave JS (0.6.2), Samba share (12.3.2), Mosquitto broker (6.4.1), Zigbee2MQTT (1.39.1-1), SQLite Web (4.2.0), ESPHome (2024.7.3)
Dashboards
dashboards 3
resources 12
views 12
mode storage
Recorder
oldest_recorder_run 5 août 2024 à 07:55
current_recorder_run 13 août 2024 à 16:30
estimated_db_size 547.75 MiB
database_engine sqlite
database_version 3.45.3
___

Merci K20 pour ton code YAML ! Je vais l’utiliser pour ma Zoe.
Je voulais faire la même chose pour suivre les kilomètres réalisés entre 2 charges pour le comparer aux kilomètres estimés entre la fin de charge précédente et le début de la charge.
Concernant ton automatisation, est ce qu’il y a quelque chose à ajouter dans le fichier configuration.yaml ?
Comment doit on declarer la variable var.scenic_charge_recap?
Merci de ton aide :slight_smile:

Pour conserver l’historique, je me suis inspiré de l’excellent travail de @roumano en stockant les éléments dans un fichier csv.
Tu peux regarder les détails ici : Gestion de lave-vaisselle dans Home assistant - Home Assistant - Tutoriels & Partages / Automatisation / Scène / Script / BluePrint - Home Assistant Communauté Francophone
Ci-dessous le code chez moi, avec l’automatisation de fin de cycle de charge de ma voiture qui m’envoie une notification sur mon mobile, sur HA et qui renseigne le fichier csv.
Grâce à ceci, j’ai l’histoique des info sur plusieurs mois.

code automatisation fin de cycle-notifications
- id: '1681401962227'
  alias: 'Charge voiture : 3 - Fin, notifications'
  description: Charge voiture Fin, notifications
  trigger:
  - platform: numeric_state
    entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_2
    below: 10
    for:
      hours: 0
      minutes: 10
      seconds: 0
  condition:
  - condition: state
    entity_id: input_boolean.charge_voiture_cycle
    state: 'on'
  action:
  - service: input_boolean.turn_off
    data: {}
    target:
      entity_id: input_boolean.charge_voiture_cycle
  - service: notify.mobile_app_sm_s906b
    data:
      title: Charge voiture terminée
      message: La charge s'est déroulée de {{ ((state_attr('automation.charge_voiture_start_2','last_triggered'))
        | as_local).strftime("%Hh%M") }} à {{ now().strftime("%Hh%M") }}, coût {{
        ((states('sensor.charge_voiture_power_cycle') | float(default=0) * float(states('input_number.prix_du_kwh_d_electricite'))))  |
        round(2) }}€
  - service: persistent_notification.create
    data:
      title: Charge voiture terminée
      message: "La charge s'est déroulée de {{ ((state_attr('automation.charge_voiture_start_2','last_triggered'))
        | as_local).strftime(\"%Hh%M\") }} à {{ now().strftime(\"%Hh%M\") }}  \nDurée
        {{ float((((state_attr('automation.charge_voiture_fin','last_triggered'))
        - (state_attr('automation.charge_voiture_start_2','last_triggered'))).seconds
        / 3600 )) | int }}h {{float(((((state_attr('automation.charge_voiture_fin','last_triggered'))
        - (state_attr('automation.charge_voiture_start_2','last_triggered'))).seconds
        % 3600 )/60 ))| round(0) }}min \nLe cycle a consommé {{ states('sensor.charge_voiture_power_cycle')
        }}kWh, soit {{ ((states('sensor.charge_voiture_power_cycle') | float(default=0)
        * float(states('input_number.prix_du_kwh_d_electricite'))))  | round(2) }}€\n"
  - continue_on_error: true
    service: notify.send_message
    target:
      entity_id: notify.consommations2
    data:
      message: '{{ now().strftime("%d/%m/%Y") }} ; Voiture ; {{ ((state_attr(''automation.charge_voiture_start_2'',''last_triggered''))
        | as_local).strftime("%Hh%M") }} - {{ now().strftime("%Hh%M") }} ;  {{ (((state_attr(''automation.charge_voiture_fin'',''last_triggered''))
        - (state_attr(''automation.charge_voiture_start_2'',''last_triggered''))).seconds
        / 3600 )| int }}h{{((((state_attr(''automation.charge_voiture_fin'',''last_triggered''))
        - (state_attr(''automation.charge_voiture_start_2'',''last_triggered''))).seconds
        % 3600 )/60 )| round }}m ; {{ states(''sensor.charge_voiture_power_cycle'')
        }}kWh ; {{ ((states(''sensor.charge_voiture_power_cycle'') | float(default=0)
        * float(states(''input_number.prix_du_kwh_d_electricite''))))  | round(2)
        }} EUR'
  mode: single

Merci @Gilles2 pour ton retour. Entre temps j’ai enregistré les informations importantes dans une Google Sheet via l’intégration associée, j’enregistre également d’autres infos dans cette Sheet comme le kilométrage mensuel.

La var ne me sert plus que comme moyen rapide de voir les dernières charges en plus de la notification du matin.

@Jose555 oui j’ai dû rajouté ça dans mon fichier :

var:
  scenic_charge_recap:
    friendly_name: 'Récapitulatif charge Scénic'
    initial_value: ''
    icon: mdi:battery-charging