44 lines
884 B
C++
44 lines
884 B
C++
#include "data.h"
|
|
#include "ArduinoJson.h"
|
|
#include "mqtt.h"
|
|
|
|
#define ENTRY_COUNT 1500
|
|
|
|
struct Entry {
|
|
const char *name = "";
|
|
time_t timestamp = 0;
|
|
double value = NAN;
|
|
};
|
|
|
|
Entry data[ENTRY_COUNT];
|
|
|
|
Entry *dataRead = data;
|
|
|
|
Entry *dataWrite = data;
|
|
|
|
size_t dataCount = 0;
|
|
|
|
bool dataAdd(const char *name, const time_t timestamp, const double value) {
|
|
if (dataCount >= ENTRY_COUNT) {
|
|
return false;
|
|
}
|
|
dataWrite->name = name;
|
|
dataWrite->timestamp = timestamp;
|
|
dataWrite->value = value;
|
|
dataWrite = (dataWrite - data + 1) % ENTRY_COUNT + data;
|
|
dataCount++;
|
|
return true;
|
|
}
|
|
|
|
void dataLoop() {
|
|
if (dataCount == 0) {
|
|
return;
|
|
}
|
|
JsonDocument json;
|
|
json["timestamp"] = dataRead->timestamp;
|
|
json["value"] = dataRead->value;
|
|
if (mqttPublishData(dataRead->name, json)) {
|
|
dataRead = (dataRead - data + 1) % ENTRY_COUNT + data;
|
|
dataCount--;
|
|
}
|
|
} |