From cfebce9b0918325114bff5f92920a5a19570c48b Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 14 Apr 2021 09:57:23 +0100 Subject: [PATCH] Hlw8012/Bl0937 averages pulses over 200ms (#1) * Hlw8012/Bl0937 averages pulses over 200ms * Hlw8012/Bl0937 averages pulses over 200ms --- tasmota/xnrg_01_hlw8012.ino | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tasmota/xnrg_01_hlw8012.ino b/tasmota/xnrg_01_hlw8012.ino index 4f83c8e19..0c8ac6a20 100644 --- a/tasmota/xnrg_01_hlw8012.ino +++ b/tasmota/xnrg_01_hlw8012.ino @@ -47,7 +47,9 @@ struct HLW { uint32_t debug[HLW_SAMPLE_COUNT]; #endif volatile uint32_t cf_pulse_length = 0; + volatile uint32_t cf_summed_pulse_length = 0; volatile uint32_t cf_pulse_last_time = 0; + volatile uint32_t cf_pulse_counter = 0; uint32_t cf_power_pulse_length = 0; volatile uint32_t cf1_pulse_length = 0; @@ -86,7 +88,9 @@ void HlwCfInterrupt(void) // Service Power Hlw.load_off = false; } else { Hlw.cf_pulse_length = us - Hlw.cf_pulse_last_time; + Hlw.cf_summed_pulse_length += Hlw.cf_pulse_length; Hlw.cf_pulse_last_time = us; + Hlw.cf_pulse_counter++; Hlw.energy_period_counter++; } Energy.data_valid[0] = 0; @@ -124,7 +128,14 @@ void HlwEvery200ms(void) Hlw.cf_pulse_length = 0; // No load for some time Hlw.load_off = true; } - Hlw.cf_power_pulse_length = Hlw.cf_pulse_length; + + if(Hlw.cf_pulse_counter){ + Hlw.cf_power_pulse_length = Hlw.cf_summed_pulse_length/Hlw.cf_pulse_counter; + Hlw.cf_summed_pulse_length=0; + Hlw.cf_pulse_counter=0; + } else { + Hlw.cf_power_pulse_length=0; + } if (Hlw.cf_power_pulse_length && Energy.power_on && !Hlw.load_off) { hlw_w = (Hlw.power_ratio * Settings.energy_power_calibration) / Hlw.cf_power_pulse_length ; // W *10