ESPhome acquisition discret

Bonjour à tous,
Dans ma future maison, j’ai prévu un compteur d’eau à impulsion.
Je cherche donc à configurer une carte via ESPHome pour faire l’acquisition de ce simple discret.

Ca à l’air tout simple, mais je suis pas expert…
Et quoi que je fasse sur mon yaml, je n’arrive pas à faire ressortir les sensors sur Home assistant !

Voilà un extract de mon code actuel.
Sur cette carte j’avais déjà un capteur de présence, celui fonctionne toujours. j’ai bien les sensor et binary_sensor de vivant sous HA.
Mais j’essaie d’ajouter : total_pulses_ev et impulsion_ev, mais rien à faire ils ne resssortent pas sous HA…

Si quelqu’un peut m’aiguiller…

Merci !

globals:
  - id: total_pulses_ev
    type: int
    restore_value: false
    initial_value: '0'  # initial value, read from power meter and divided by 0.075

binary_sensor:
  - platform: ld2410
    has_target:
      name: Presence
    has_moving_target:
      name: Moving Target
    has_still_target:
      name: Still Target
  - platform: gpio
    id: impulsion_ev
    pin:
      number: GPIO38
      mode: INPUT_PULLUP
    filters:
      - delayed_on: 70ms
    on_press:
      then:
        - lambda: id(total_pulses_ev) += 1;

sensor:
  - platform: ld2410
    light:
      name: light
    moving_distance:
      name : Moving Distance
    still_distance:
      name: Still Distance
    moving_energy:
      name: Move Energy
    still_energy:
      name: Still Energy
    detection_distance:
      name: Detection Distance
1 « J'aime »

Bonsoir

Je ne suis pas un expert en ESP, Mais j’ai l’impression qu’il te manque le Name pour ton compteur.

Voici mon code, si cela peut d’aider

globals:
    
  - id: ef_pulse_counter
    type: float #Le counter n'est pas integer car il sert aussi pour la division m3
    initial_value: "0" 

#################
# Binary Sensor #
#################

# binary sensor comptage impulsion eau froide et adoucie
binary_sensor:

# EAU FROIDE
  - platform: gpio
    pin:
      number: GPIO32
      allow_other_uses: true
      mode: INPUT_PULLUP
      inverted: True
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms 
    name: "${friendly_name1} counter state"
    id: ef_counter_state

    on_press:
      then:

        - lambda: |-
            // increment le compteur EF puis publish mqtt
            id(ef_pulse_counter) += 1;
            id(ef_counter_pulse).publish_state(id(ef_pulse_counter));
            id(ef_counter_l).publish_state(id(ef_pulse_counter)/1);
            id(ef_counter_m3).publish_state(id(ef_pulse_counter)/1000);
1 « J'aime »

Super c’est ça tout simplement.
Je pensais que l’idée suffisait…
Merci beaucoup.

et pour ton publish MQTT, ta variable ef_counter_pulse elle est définie quelque part dans ton code ?

Oui, j’ai un code pour avoir le nombre impulsion, litres et m3

# Comptage impulsion  
  - platform: template
    name: "${friendly_name2} counter pulse"
    id: ef_counter_pulse
    unit_of_measurement: ''
    accuracy_decimals: 0  # Précision en entiers
    icon: "mdi:counter"
    #update_interval: 5s  # Mise à jour sur changement de valeur
 
# Comptage litres 
  - platform: template
    name: "${friendly_name2} counter l"
    id: ef_counter_l
    unit_of_measurement: 'L'
    accuracy_decimals: 0  # Précision en entiers
    state_class: total_increasing    
    device_class: water

# Comptage m³ (utilisé pour le compteur services HA)
  - platform: template
    name: "${friendly_name2} counter m3"
    id: ef_counter_m3
    unit_of_measurement: 'm³'
    accuracy_decimals: 3  # Précision en entiers
    state_class: total_increasing
    device_class: water    

Bon je ne m’en sors pas…
Je comprends pas le comportement de ces machines.

Ci-dessous le code mon ESPhome.
J’ai bien le binary_sensor donnant le status qui remonte dans Home Assistant.
Mais le binary_sensor pour la détection d’impulsion ne remonte pas…

esphome:
  name: capteurlocaltech
  friendly_name: "Capteur Local Tech"
  platformio_options:
    board_build.extra_flags:
      - "-DARDUINO_USB_CDC_ON_BOOT=0"

esp32:
  board: lolin_s2_mini
  framework:
    type: arduino

# Enable logging
logger:

uart:
  tx_pin: GPIO18
  rx_pin: GPIO33
  baud_rate: 256000

ld2410:

# Enable Home Assistant API
api:
  encryption:
    key: "xxx"

ota:
  password: "xxx"

wifi:
  manual_ip:
    # Set this to the IP of the ESP
    static_ip: xxx
    # Set this to the IP address of the router. Often ends with .1
    gateway: xxx
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: xxx
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Presence1 Fallback Hotspot"
    password: "xxx"

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO21
      mode: INPUT_PULLUP
      inverted: True
    name: impulsion ev
    internal: true
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms
  - platform: status
    name: "État de connexion à Home Assistant"

captive_portal:
    

Essaye de mettre des " pour le name

name: "impulsion ev"
id: impulsion_ev

Hello,
Ca y est j’ai emménagé dans ma nouvelle maison, et j’essaie de mettre en place mon compteur à impulsion.
Alors niveau ESPhome j’avais bien une acquisition de données. Mon souci est que ca comptais n’importe quoi.

J’ai mesuré à l’oscilloscope la sortie du compteur.
De base je mesure le 50Hz +/-60mV, soit contact ouvert.
Et l’impulsion j’ai bien un contact fermé donc rien du tout, 0V.

Au début dans mon code je n’avais pas les lignes:

      mode: INPUT_PULLUP
      inverted: True
    internal: true

J’avais bien une acquisition, mais du 50Hz j’ai l’impression…

J’ai donc mis le code complet ci-dessous, et maintenant j’ai plus rien dans HA…
(Si je supprime les lignes ca re fonctionne)

=> Si quelqu’un a une idée de ce qui ne va pas… Merci !
Je pense que c’est le mode INPUT_PULLUP qui fait défaut, mais si je le mets ca ne fonctionne plus sous HA.
De plus sur cette carte S2 mini, peut-être n’y a-t-il pas de résistance de pullup ? Dans ce cas comment faire ?

esphome:
  name: capteurlocaltech
  friendly_name: "Capteur Local Tech"
  platformio_options:
    board_build.extra_flags:
      - "-DARDUINO_USB_CDC_ON_BOOT=0"

esp32:
  board: lolin_s2_mini
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxx"

ota:
  - password: "xxx"
    platform: esphome

wifi:
  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.1.57
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.1.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Presence1 Fallback Hotspot"
    password: ""

binary_sensor:
  - platform: status
    name: "État de connexion à Home Assistant"
  - platform: gpio
    pin:
      number: GPIO21
      mode: INPUT_PULLUP
      inverted: True
    name: "Impulsion EV"
    internal: true
    id: impulsion_ev
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms
    on_press:
      then:
        - lambda: |-
            // increment le compteur EF puis publish mqtt
            id(ev_pulse_counter) += 1;
            id(ev_counter_pulse).publish_state(id(ev_pulse_counter));
            id(ev_counter_l).publish_state(id(ev_pulse_counter)/1);
            id(ev_counter_m3).publish_state(id(ev_pulse_counter)/1000);

globals:
  - id: ev_pulse_counter
    type: float #Le counter n'est pas integer car il sert aussi pour la division m3
    initial_value: "0" 

sensor:
# Comptage impulsion  
  - platform: template
    name: "EV counter pulse"
    id: ev_counter_pulse
    unit_of_measurement: ''
    accuracy_decimals: 0  # Précision en entiers
    icon: "mdi:counter"
    update_interval: 1s
 
# Comptage litres 
  - platform: template
    name: "EV counter l"
    id: ev_counter_l
    unit_of_measurement: 'L'
    accuracy_decimals: 0  # Précision en entiers
    state_class: total_increasing    
    device_class: water
    update_interval: 1s

# Comptage m³ (utilisé pour le compteur services HA)
  - platform: template
    name: "EV counter m3"
    id: ev_counter_m3
    unit_of_measurement: 'm³'
    accuracy_decimals: 3  # Précision en entiers
    state_class: total_increasing
    device_class: water
    update_interval: 1s


captive_portal:

Si ton S2 mini (que je ne connais pas, j’utilise que des ESP32-wroom) n’a pas de résistance, tu peux mettre des résistances comme ci-dessous :


https://espacerm.com/webgen/resistance-de-pull-up-et-de-pulldown/

Pour le code, j’utilise celui-ci (sur un ESP32).

#################
# 1er partie du code 
# TON CODE
#################
esphome:
  name: capteurlocaltech
  friendly_name: "Capteur Local Tech"
  platformio_options:
    board_build.extra_flags:
      - "-DARDUINO_USB_CDC_ON_BOOT=0"

esp32:
  board: lolin_s2_mini
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxx"

ota:
  - password: "xxx"
    platform: esphome

wifi:
  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.1.57
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.1.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Presence1 Fallback Hotspot"
    password: ""

###############################
#2eme partie du code 
# MON CODE SUR ESP32 VROOM
###############################


captive_portal:

##########################
# Device Specific Config
##########################

# Name device mask
substitutions:
  name: Compteur ECS
  friendly_name1: "Sensor ECS"
  friendly_name2: "Compteur ECS"

# essai
globals:
    
  - id: ecs_pulse_counter
    type: float #Le counter n'est pas integer car il sert aussi pour la division m3
    initial_value: "0" 

#################
# Binary Sensor #
#################

# Binary sensor utilisé pour comptage des impulsions et Totalisateur
binary_sensor:

  - platform: gpio
    pin:
      number: GPIO21
      allow_other_uses: true
      mode: INPUT_PULLUP
      inverted: True
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms 
    name: "${friendly_name1} counter state"
    id: ecs_counter_state

    on_press:
      then: 
        - lambda: |-
            // increment le compteur ECS puis publish mqtt
            id(ecs_pulse_counter) += 1;
            id(ecs_counter_pulse).publish_state(id(ecs_pulse_counter));
            id(ecs_counter_l).publish_state(id(ecs_pulse_counter)/1);
            id(ecs_counter_m3).publish_state(id(ecs_pulse_counter)/1000);

    
####################################
# Sensors with general information.
####################################
sensor:

##########
# sensor #
##########
# Débit d'eau instantané l/mm (0 après 10s)
# Ne pas utiliser pour comptage (comptage erroné)
  - platform: pulse_meter
    name: "${friendly_name1} pulse"
    id: pulse_id_ecs
    pin:
      number: GPIO21
      allow_other_uses: true
      inverted: true
      mode:
        input: true
        pullup: true
    internal_filter: 100ms    
    icon: mdi:water
    timeout: 100s
    unit_of_measurement: 'L/mn'
    filters:
      - multiply: 1

# Comptage impulsion  
  - platform: template
    name: "${friendly_name2} counter pulse"
    id: ecs_counter_pulse
    unit_of_measurement: ''
    accuracy_decimals: 0  # Précision en entiers
    icon: "mdi:counter"
    #update_interval: 5s  # Mise à jour sur changement de valeur

 
# Comptage litres 
  - platform: template
    name: "${friendly_name2} counter l"
    id: ecs_counter_l
    unit_of_measurement: 'L'
    accuracy_decimals: 0  # Précision en entiers
    state_class: total_increasing    
    device_class: water

# Comptage m³ (utilisé pour le compteur services HA)
  - platform: template
    name: "${friendly_name2} counter m3"
    id: ecs_counter_m3
    unit_of_measurement: 'm³'
    accuracy_decimals: 3  # Précision en entiers
    state_class: total_increasing
    device_class: water