* simplified alertIf()

* refactored TimeSeriesData to top-level class
This commit is contained in:
Scott Powell
2025-07-08 16:35:11 +10:00
parent de3e4bc27c
commit ac834922de
5 changed files with 82 additions and 91 deletions

View File

@@ -3,6 +3,8 @@
#include <Arduino.h> // needed for PlatformIO
#include <Mesh.h>
#include "TimeSeriesData.h"
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
#include <InternalFileSystem.h>
#elif defined(RP2040_PLATFORM)
@@ -90,33 +92,7 @@ protected:
Trigger() { triggered = false; time = 0; }
};
void alertIfLow(Trigger& t, float value, float threshold, const char* text);
void alertIfHigh(Trigger& t, float value, float threshold, const char* text);
class TimeSeriesData {
public:
float* data;
int num_slots, next;
uint32_t last_timestamp;
uint32_t interval_secs;
TimeSeriesData(float* array, int num, uint32_t secs) : num_slots(num), data(array), last_timestamp(0), next(0), interval_secs(secs) {
memset(data, 0, sizeof(float)*num);
}
TimeSeriesData(int num, uint32_t secs) : num_slots(num), last_timestamp(0), next(0), interval_secs(secs) {
data = new float[num];
memset(data, 0, sizeof(float)*num);
}
};
void recordData(TimeSeriesData& data, float value);
struct MinMaxAvg {
float _min, _max, _avg;
uint8_t _lpp_type, _channel;
};
void calcDataMinMaxAvg(const TimeSeriesData& data, uint32_t start_secs_ago, uint32_t end_secs_ago, MinMaxAvg* dest, uint8_t channel, uint8_t lpp_type);
void alertIf(bool condition, Trigger& t, const char* text);
virtual void onSensorDataRead() = 0; // for app to implement
virtual int querySeriesData(uint32_t start_secs_ago, uint32_t end_secs_ago, MinMaxAvg dest[], int max_num) = 0; // for app to implement