Sensor3/lib/patrix/data.cpp

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--;
}
}