Compteur énergie. pulse_meter/pulse_counter ou autre?

Je me posais la questions de savoir si c’était mieux pulse_meter ou pulse_counter et au final votre solution du binary_sensor était la meilleure.

Pour les suivants qui se poseraient la question:

captive_portal:

globals:
  - id: last_pulse_time
    type: float
    restore_value: false
    initial_value: '0'
  - id: pv_power
    type: float
    restore_value: false
    initial_value: '0'
  - id: pv_total_pulses
    type: int
    restore_value: false
    initial_value: '0'

binary_sensor:
  - platform: gpio
    id: internal_pulse_counter
    pin:
      number: GPIO14  # Assure-toi que c'est le bon GPIO
      mode:
        input: true
        pullup: true
    internal: true
    filters:
      - delayed_on: 85ms
    on_press:
      then:
        - lambda: |-
            float now = millis() / 1000.0;  // Temps actuel en secondes
            float delta_t = now - id(last_pulse_time);
            if (delta_t > 0) {
              id(pv_power) = 36000.0 / delta_t;  // Calcul de la puissance
            }
            id(last_pulse_time) = now;  // Mise à jour du dernier pulse
            id(pv_total_pulses) += 1;  // Incrémentation du compteur total

sensor:
  - platform: template
    id: pv_production
    name: "Production Photovoltaïque"
    device_class: energy
    unit_of_measurement: "kWh"
    state_class: total_increasing
    icon: "mdi:solar-power"
    accuracy_decimals: 2
    lambda: return id(pv_total_pulses) * 0.01;  # 1 pulse = 0.01 kWh

  - platform: template
    id: puissance_pv
    name: "Puissance Photovoltaïque"
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    accuracy_decimals: 2
    lambda: |-
      return id(pv_power);

# Vérification périodique de la puissance et remise à zéro si aucune activité
interval:
  - interval: 300s  # Vérification toutes les 5 minutes
    then:
      - lambda: |-
          float now = millis() / 1000.0;
          float delta_t = now - id(last_pulse_time);
          if (delta_t > 600) {  // Si aucune mise à jour pendant 10 minutes
            id(pv_power) = 0;  // Réinitialisation de la puissance à zéro
          }