Afficher des litres en m3

Mon problème

Bonjour a tous

J’ai installé un compteur d’eau a impulsion pour suivre ma consommation d’eau.
Celui ci me donne 1 impulsion à chaque litre.

j’ai mis le code suivant dans ESP32 pour récupérer chaque impulsion.

Code ESP32
# Définition du test impulsion cpt essai
  - platform: gpio
    name: ${friendly_name} impulsion
    id: impulsion_cpt
    pin:
      number: GPIO25
      mode: INPUT_PULLUP
      inverted: True

Je récupère l’information de monter de impulsion dans un compteur par une automatisation

Code automatisation
alias: test compteur impulsion
description: "comptage impulsion litres"
trigger:
  - platform: state
    entity_id:
      - binary_sensor.sensor_impulsion
    from: "off"
    to: "on"
condition: []
action:
  - service: counter.increment
    data: {}
    target:
      entity_id: counter.compteur_impulsion
mode: single

J’affiche ensuite ce compteur sur une carte, l’affichage indiqué est en Litres normal, mais je voudrais l’afficher en mètre-cube mais je ne sais pas quel code il faut mettre pour y arriver.
cpt_l

Code Carte
type: custom:button-card
entity: counter.compteur_impulsion
name: compteur Impulsion (L)
icon: mdi:counter
aspect_ratio: 3/2
show_state: true
show_last_changed: false
styles:
  card:
    - background-color: white
    - border-radius: 10%
    - filter: opacity(100%)
    - padding: 1px
    - text-transform: null
    - font-size: 18px
    - color: blue
    - border: 2px solid var(--google-grey)
  icon:
    - color: blue
  name:
    - color: black
    - font-size: 15px

Si quelqu’un peut m’aider pour arriver à afficher le résultat en M3 au lieu des litres

J’ai aussi mis un pulse Counter, mais ce n’est pas aussi précis, il arrive que j’ai un décalage dans le comptage (environ 10%), mais je l’ai conserver pour avoir un affichage instantanée en litres minute.

Ma configuration


[center]## System Information

version core-2022.11.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.7
os_name Linux
os_version 5.15.61-v8
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 5000
Installed Version 1.28.3
Stage running
Available Repositories 1156
Downloaded Repositories 43
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 9.3
update_channel stable
supervisor_version supervisor-2022.10.2
agent_version 1.4.1
docker_version 20.10.18
disk_total 219.4 GB
disk_used 16.3 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.6.1), Samba share (10.0.0), File editor (5.4.2), Duck DNS (1.15.0), Mosquitto broker (6.1.3), MariaDB (2.5.1), NGINX Home Assistant SSL proxy (3.1.5), Nginx Proxy Manager (0.12.3), Simple Scheduler (0.64), Check Home Assistant configuration (3.11.0), Node-RED (13.5.3), Studio Code Server (5.4.1), Plex Media Server (3.1.2), Home Assistant Google Drive Backup (0.109.2), ESPHome (2022.11.1), Network UPS Tools (0.11.0), Zigbee2MQTT (1.28.2-1)
Dashboards
dashboards 2
resources 35
views 16
mode storage
Recorder
oldest_recorder_run 10 novembre 2022 à 23:24
current_recorder_run 17 novembre 2022 à 23:07
estimated_db_size 732.34 MiB
database_engine sqlite
database_version 3.38.5
[/center]

Salut @pascal_ha

Perso je passerai par un sensor template basé sur ton « counter » :

Un truc qui ressemblerait à ça :

template:
  - sensor:
    - name: "Compteur Eau m³"
      unique_id: compteur_eau
      device_class: water
      icon: mdi:counter
      state: "{{ (states('counter.compteur_impulsion') | float(0) / 1000) | round(2) }}"
      state_class: total_increasing
      unit_of_measurement: "m³"

Bonjour @pascal_ha

dans ton code ESP tu peux a la définition de ton sensor mettre un filtre
je t’ai joint deux exemples

  - platform: template
    name: power channel a
    id: power_channel_a
    unit_of_measurement: W
    lambda: return id(current_channel_A).state ;
    filters:
      - multiply: 235
  
  - platform: total_daily_energy
    name: energy_channel_a
    power_id: power_channel_a
    unit_of_measurement: kWh
    device_class: energy    
    filters:
      - multiply: .001

ci joint la doc

a toi de voir si tu délègue la conversion a ton ESP (ma contribution) ou a homeassistant celle de @Herbs herbs

1 « J'aime »

Merci pour votre aide a tous les deux.

J’ai cree un sensor template

#sensor:
# compteur eau m3

- platform: template
  sensors:
    compteur_eau_m3:
      friendly_name: "compteur eau m3"
      unit_of_measurement: "m3"
      value_template:  "{{ (states('counter.compteur_impulsion') | float(0) / 1000) | round(2) }}"       
      icon_template: mdi:counter
      device_class: water
#      state_class: total_increasing

Mais la ligne State_class me renvoi une erreur

Invalid config for [sensor.template]: [state_class] is an invalid option for [sensor.template]. Check: sensor.template->sensors->compteur_eau_m3->state_class. (See ?, line ?).

vire là, en commentaire elle ne sert à rien de toute façon

1 « J'aime »

Bonjour Pulpy

Je l’ai mis en commentaire car elle me provoque une erreur sans le #

Quel est intérêt de cette ligne ?

Si tu mets pas les logs et les infos qui correspondent, tu ne nous facile pas vraiment la tache.

1 « J'aime »

C’est parce que tu utilises « Legacy sensor configuration format » ça devrait fonctionner avec le « nouveau » format.

Après comme a dit @Pulpy-Luke ça sert pas à grand chose :wink:

1 « J'aime »

Bonjour @jrvrcd

Merci pour ton aide

tu vas peut être pouvoir m’aider à comprendre mes petits soucis

Dans mon ESP J’ai mis le code suivant

Code ESP
############Counter meter ###################
## Debit detecteur compteur d´eau
  - platform: pulse_counter
    pin: GPIO25
    unit_of_measurement: 'L'
    id: pulse
    name: "${friendly_name} pulse"
    update_interval : 60s 
    filters:
      - lambda: return (x/2);
    
# Consommation eau du jour L et  m3
  - platform: integration
    name: "${friendly_name2} Litre"
    id: pulse_l
    unit_of_measurement: "L"
    accuracy_decimals: 0
    sensor: pulse
    time_unit: min
  - platform: integration
    name: "${friendly_name2} m3"
    id: pulse_m3
    unit_of_measurement: "m³"
    accuracy_decimals: 3
    sensor: pulse
    time_unit: min
    filters:
      - lambda: return (x/1000);
    

############################
# Binary sensor
############################
binary_sensor:
############################################################
# Définition du test impulsion cpt essai
  - platform: gpio
    name: ${friendly_name} impulsion
    id: impulsion_cpt
    pin:
      number: GPIO25
      mode: INPUT_PULLUP
      inverted: True
#    filters:
#      - delayed_on: 100ms
#      - delayed_off: 500ms
#      - delayed_on_off: 100ms

############### EAU #####################################################

Ce code fonctionne voir screen, mais :
cpt_eau_2

  • J’ai un décalage dans le comptage des pulses qui est complètement aléatoire. (des fois je me retrouve avec des litres en plus ??)
  • Lorsque j’update ESP le compteur repart à Zéro (C’est pour cela que j’ai mis le binary pour utiliser et compter sur HA ( avec le comptage des impulsions je suis 100% juste)

Oui désolé, j’ai pas été trop clair dans ma description

ça c’est vraiment dépendant du ‹ capteur ›. Sur les capteurs optiques par exemple quand la ‹ marque › s’arrête pile ne face, ça perture la mesure, sur les capteurs à effet hall, c’est moins le cas.
Il y a aussi le calibrage qui joue (1 pulse = X litres), le lambda que tu as mis, le nombre de décimal.
Il faut prévoir de recaller le truc de temps en temps

Oui c’est le comportement par défaut : restart = perte de la mémoire. Pour moi il faut absolument mettre uniquement le pulse coté ESP, et faire le comptage (cumul) dans HA et pas dans l’esp, comme ça pas de perte…

Voir mon code directement dans l’esp.
Avec ça tu as directement les 2
Phil

########### EAU ##################################################################################

Debit detecteur compteur d´eau

  • platform: pulse_meter
    id: capteur_inductif_eau_pulse
    pin:
    number: GPIO25
    mode: INPUT_PULLUP
    name: « Debit compteur d’eau »
    unit_of_measurement: « l/mn »
    icon: mdi:water
    internal_filter: 200ms

#########################

Consommation Totale d’Eau Jour

total:
  name: "Compteur Eau Jour"
  icon: mdi:water
  device_class: water   
  unit_of_measurement: 'L'
  accuracy_decimals: 0
  filters:
    - multiply: 1  # (pour resrer en l)
  id: compteur_eau_jour

#########################
#########################

Consommation eau du jour en m3

  • platform: template
    name: « Compteur eau Jour m3 »
    icon: mdi:water
    lambda: |-
    return id(compteur_eau_jour).state * 0.001;
    device_class: water
    unit_of_measurement: « m³ »
    accuracy_decimals: 3
    id: compteur_eau_jour_m3
    state_class: total_increasing

########### EAU #######################################

Pouvez me dire si il est possible de changer la valeur du compteur pulse (id: pulse_l)
pour fixer une valeur de départ dans mon cas « 1179 »?

J’ai trouvé ceci Dans le guide ESPHOME pour les Pulse Counter Sensor
Mais je comprend pas comment sa fonctionne, a quel endroit faut il mettre la nouvelle valeur ?

(Re)Régler le nombre total d’impulsions

En utilisant cette action, vous pouvez réinitialiser/définir le nombre total d’impulsions. Cela peut être utile si vous souhaitez le total capteur pour correspondre à ce que vous voyez sur votre compteur vous êtes essayant de correspondre.

# Set pulse counter total from home assistant using this service call:
api:
  services:
    - service: set_pulse_total
      variables:
        new_pulse_total: int
      then:
        - pulse_counter.set_total_pulses:
            id: pulse_counter_id
            value: !lambda 'return new_pulse_total;'