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
}