diff --git a/include/items/LoggingClass.h b/include/items/LoggingClass.h index bf3d06c7..d78c5654 100644 --- a/include/items/LoggingClass.h +++ b/include/items/LoggingClass.h @@ -9,19 +9,21 @@ typedef std::vector MyLoggingVector; class LoggingClass { public: + LoggingClass(unsigned long period, unsigned int maxPoints, String key); ~LoggingClass(); void loop(); - void writeDate(); private: + unsigned long currentMillis; unsigned long prevMillis; - unsigned long _period; unsigned int _maxPoints; String _key; + + void addNewDelOldData(const String filename, size_t maxPoints, String payload); }; extern MyLoggingVector* myLogging; diff --git a/src/items/LoggingClass.cpp b/src/items/LoggingClass.cpp index 45a0517f..8fffec28 100644 --- a/src/items/LoggingClass.cpp +++ b/src/items/LoggingClass.cpp @@ -13,12 +13,33 @@ void LoggingClass::loop() { unsigned long difference = currentMillis - prevMillis; if (difference >= _period) { prevMillis = millis(); - writeDate(); + addNewDelOldData("log." + _key + ".txt", _maxPoints, jsonReadStr(configLiveJson, _key)); } } -void LoggingClass::writeDate() { - SerialPrint("I", "Logging", _key); + +void LoggingClass::addNewDelOldData(const String filename, size_t maxPoints, String payload) { + String logData = readFile(filename, 5120); + size_t lines_cnt = itemsCount(logData, "\r\n"); + + SerialPrint("I", "Logging", "http://" + WiFi.localIP().toString() + "/" + filename + " (" + String(lines_cnt, DEC) + ")"); + + if ((lines_cnt > maxPoints + 1) || !lines_cnt) { + removeFile(filename); + lines_cnt = 0; + } + + if (lines_cnt > maxPoints) { + logData = deleteBeforeDelimiter(logData, "\r\n"); + if (timeNow->hasTimeSynced()) { + logData += timeNow->getTimeUnix() + " " + payload + "\r\n"; + writeFile(filename, logData); + } + } else { + if (timeNow->hasTimeSynced()) { + addFileLn(filename, timeNow->getTimeUnix() + " " + payload); + } + } } -MyLoggingVector* myLogging= nullptr; \ No newline at end of file +MyLoggingVector* myLogging = nullptr; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 37df130c..8bd9b7ca 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -98,10 +98,8 @@ void setup() { initialized = true; //this second POST makes the data to be processed (you don't need to connect as "keep-alive" for that to work) myLogging = new MyLoggingVector(); - myLogging->push_back(LoggingClass(5000, 1, "5 sec")); - myLogging->push_back(LoggingClass(10000, 1, "10 sec")); - - //myLogging->push_back(new LoggingClass()); + myLogging->push_back(LoggingClass(30000, 10, "analog-adc-1")); + //myLogging->push_back(LoggingClass(10000, 1, "10 sec")); } void loop() { @@ -124,6 +122,9 @@ void loop() { myNotAsyncActions->loop(); ts.update(); - myLogging->at(0).loop(); - myLogging->at(1).loop(); + if (myLogging != nullptr) { + for (unsigned int i = 0; i < myLogging->size(); i++) { + myLogging->at(i).loop(); + } + } } \ No newline at end of file