76#if defined(ESP32) || defined(ESP8266)
79#include "WeatherSensorCfg.h"
80#include "RollingCounter.h"
82#if defined(LIGHTNING_USE_PREFS)
83#include <Preferences.h>
93#define LIGHTNINGCOUNT_MAX_VALUE 1600
100#define LIGHTNING_UPD_RATE 6
107#define LIGHTNING_HIST_SIZE 10
132 int16_t hist[LIGHTNING_HIST_SIZE];
148 int deltaEvents = -1;
150 #if defined(LIGHTNING_USE_PREFS) || defined(INSIDE_UNITTEST)
153 .startupPrev =
false,
161 .updateRate = LIGHTNING_UPD_RATE
165 #if defined(LIGHTNING_USE_PREFS) && !defined(INSIDE_UNITTEST)
166 Preferences preferences;
175 Lightning(
const float quality_threshold = DEFAULT_QUALITY_THRESHOLD) :
211 log_w(
"setUpdateRate: rate cannot be 0");
214 if (60 % rate != 0) {
215 log_w(
"setUpdateRate: rate=%u must evenly divide 60 minutes", rate);
218 if (60 / rate > LIGHTNING_HIST_SIZE) {
219 log_w(
"setUpdateRate: rate=%u would require %u bins, but only %u available",
220 rate, 60 / rate, LIGHTNING_HIST_SIZE);
224 #if !defined(INSIDE_UNITTEST)
225 preferences.begin(
"BWS-LGT",
false);
226 uint8_t updateRatePrev = preferences.getUChar(
"updateRate", LIGHTNING_UPD_RATE);
227 preferences.putUChar(
"updateRate", rate);
230 static uint8_t updateRatePrev = LIGHTNING_UPD_RATE;
234 if (nvLightning.
updateRate != updateRatePrev) {
252 void hist_init(int16_t count = -1)
override;
254 #if defined(LIGHTNING_USE_PREFS) && !defined(INSIDE_UNITTEST)
255 void prefs_load(
void);
256 void prefs_save(
void);
272 void update(time_t timestamp, int16_t count, uint8_t distance,
bool startup =
false );
286 int pastHour(
bool *valid =
nullptr,
int *nbins =
nullptr,
float *quality =
nullptr);
308 bool lastEvent(time_t ×tamp,
int &events, uint8_t &distance);
Calculation number of lightning events during last sensor update cycle and during last hour (past 60 ...
Definition Lightning.h:144
int pastHour(bool *valid=nullptr, int *nbins=nullptr, float *quality=nullptr)
Get number of lightning events during past 60 minutes.
Definition Lightning.cpp:316
Lightning(const float quality_threshold=DEFAULT_QUALITY_THRESHOLD)
Definition Lightning.h:175
bool setUpdateRate(uint8_t rate=LIGHTNING_UPD_RATE)
Set expected update rate for pastHour() calculation.
Definition Lightning.h:208
void update(time_t timestamp, int16_t count, uint8_t distance, bool startup=false)
Update lightning data.
Definition Lightning.cpp:173
void hist_init(int16_t count=-1) override
Definition Lightning.cpp:112
void reset(void)
Definition Lightning.cpp:98
Base class for rolling counter implementations.
Definition RollingCounter.h:78
Definition Lightning.h:116
uint8_t updateRate
expected update rate for pastHour() calculation
Definition Lightning.h:134
time_t timestamp
Timestamp of last event.
Definition Lightning.h:129
bool startupPrev
Previous startup flag value.
Definition Lightning.h:121
uint32_t accCount
Accumulated counts (overflows and startups)
Definition Lightning.h:123
time_t lastUpdate
Timestamp of last update.
Definition Lightning.h:118
int16_t events
Number of events reported at last event.
Definition Lightning.h:127
int16_t prevCount
Previous counter value.
Definition Lightning.h:126
uint8_t distance
Distance at last event.
Definition Lightning.h:128
int16_t preStCount
Previous raw sensor counter (before startup)
Definition Lightning.h:122