SinricPro Library
Loading...
Searching...
No Matches
EventLimiter.h
1#pragma once
2
3#include "SinricProConfig.h"
4#include "SinricProNamespace.h"
5
6namespace SINRICPRO_NAMESPACE {
7
8class EventLimiter {
9 public:
10 EventLimiter(unsigned long minimum_distance = 1000);
11 operator bool();
12 private:
13 unsigned long minimum_distance;
14 unsigned long next_event;
15 unsigned long extra_distance;
16 unsigned long fail_counter;
17};
18
19EventLimiter::EventLimiter(unsigned long minimum_distance)
20: minimum_distance(minimum_distance)
21, next_event(0)
22, extra_distance(0)
23, fail_counter(0) {}
24
25EventLimiter::operator bool() {
26 unsigned long current_millis = millis();
27 unsigned long fail_threshold = (minimum_distance / 4);
28
29 if ( current_millis >= next_event ) {
30
31 if ( fail_counter > fail_threshold ) {
32
33 extra_distance += minimum_distance;
34 fail_counter = 0;
35
36 } else {
37
38 extra_distance = 0;
39
40 }
41
42 next_event = current_millis + minimum_distance + extra_distance;
43 return false;
44
45 }
46
47 fail_counter++;
48 if (fail_counter == fail_threshold) Serial.printf("WARNING: YOUR CODE SENDS EXCESSIVE EVENTS! EVENTS ARE NOW LIMITED BY AN ADDITIONAL DELAY OF %lu SECONDS. PLEASE CHECK YOUR CODE!\r\n", extra_distance / 1000);
49
50 return true;
51}
52
53} // SINRICPRO_NAMESPACE
AirQuality.
Definition AirQualitySensor.h:19