diff --git a/tasmota/xsns_53_sml.ino b/tasmota/xsns_53_sml.ino index 9385802fc..9eecf5612 100755 --- a/tasmota/xsns_53_sml.ino +++ b/tasmota/xsns_53_sml.ino @@ -2418,6 +2418,8 @@ struct SML_COUNTER { uint8_t sml_cnt_old_state; uint32_t sml_cnt_last_ts; uint32_t sml_counter_ltime; + uint32_t sml_counter_lfalltime; + uint32_t sml_counter_pulsewidth; uint16_t sml_debounce; uint8_t sml_cnt_updated; @@ -2434,10 +2436,10 @@ uint8_t sml_counter_pinstate; uint8_t sml_cnt_index[MAX_COUNTERS] = { 0, 1, 2, 3 }; void IRAM_ATTR SML_CounterIsr(void *arg) { -uint32_t index = *static_cast(arg); + uint32_t index = *static_cast(arg); -uint32_t time = millis(); -uint32_t debounce_time; + uint32_t time = millis(); + uint32_t debounce_time; if (digitalRead(meter_desc_p[sml_counters[index].sml_cnt_old_state].srcpin) == bitRead(sml_counter_pinstate, index)) { return; @@ -2450,6 +2452,8 @@ uint32_t debounce_time; if bitRead(sml_counter_pinstate, index) { // falling edge RtcSettings.pulse_counter[index]++; + sml_counters[index].sml_counter_pulsewidth = time - sml_counters[index].sml_counter_lfalltime; + sml_counters[index].sml_counter_lfalltime = time; sml_counters[index].sml_cnt_updated = 1; } sml_counters[index].sml_counter_ltime = time; @@ -2855,7 +2859,7 @@ init10: } RtcSettings.pulse_counter[cindex] = Settings->pulse_counter[cindex]; - InjektCounterValue(meters, RtcSettings.pulse_counter[cindex]); + InjektCounterValue(meters, RtcSettings.pulse_counter[cindex],0.0); cindex++; } } else { @@ -3062,8 +3066,8 @@ void SetDBGLed(uint8_t srcpin, uint8_t ledpin) { // fast counter polling void SML_Counter_Poll(void) { -uint16_t meters,cindex=0; -uint32_t ctime=millis(); + uint16_t meters,cindex=0; + uint32_t ctime=millis(); for (meters=0; meters