From 45dea185c55d44a808bff6900fca26e1b1a5be52 Mon Sep 17 00:00:00 2001 From: biver Date: Mon, 14 Nov 2022 20:21:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=BD?= =?UTF-8?q?=D0=B0=D0=B8=D0=B5=20=D0=BF=D0=BE=20=D1=81=D0=BE=D0=B1=D1=8B?= =?UTF-8?q?=D1=82=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/virtual/Loging/Loging.cpp | 60 ++++++++++++++++++++++++- src/modules/virtual/Loging/modinfo.json | 13 ++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/src/modules/virtual/Loging/Loging.cpp b/src/modules/virtual/Loging/Loging.cpp index 9fb21aec..3c26c933 100644 --- a/src/modules/virtual/Loging/Loging.cpp +++ b/src/modules/virtual/Loging/Loging.cpp @@ -9,6 +9,7 @@ class Loging : public IoTItem { private: String logid; String id; + String tmpValue; String filesList = ""; int _publishType = -2; @@ -103,7 +104,56 @@ class Loging : public IoTItem { //запускаем процедуру удаления старых файлов если память переполняется deleteLastFile(); } +void SetDoByInterval(String valse) { + String value = valse; + //если значение логгирования пустое + if (value == "") { + SerialPrint("E", F("LogingEvent"), "'" + id + "' loging value is empty, return"); + return; + } + //если время не было получено из интернета + if (!isTimeSynch) { + SerialPrint("E", F("LogingEvent"), "'" + id + "' Сant loging - time not synchronized, return"); + return; + } + regEvent(value, F("LogingEvent")); + String logData; + jsonWriteInt(logData, "x", unixTime); + jsonWriteFloat(logData, "y1", value.toFloat()); + //прочитаем путь к файлу последнего сохранения + String filePath = readDataDB(id); + //если данные о файле отсутствуют, создадим новый + if (filePath == "failed" || filePath == "") { + SerialPrint("E", F("LogingEvent"), "'" + id + "' file path not found, start create new file"); + createNewFileWithData(logData); + return; + } else { + //если файл все же есть но был создан не сегодня, то создаем сегодняшний + if (getTodayDateDotFormated() != getDateDotFormatedFromUnix(getFileUnixLocalTime(filePath))) { + SerialPrint("E", F("LogingEvent"), "'" + id + "' file too old, start create new file"); + createNewFileWithData(logData); + return; + } + } + + //считаем количество строк и определяем размер файла + size_t size = 0; + int lines = countJsonObj(filePath, size); + SerialPrint("i", F("LogingEvent"), "'" + id + "' " + "lines = " + String(lines) + ", size = " + String(size)); + + //если количество строк до заданной величины и дата не менялась + if (lines <= points && !hasDayChanged()) { + //просто добавим в существующий файл новые данные + addNewDataToExistingFile(filePath, logData); + //если больше или поменялась дата то создадим следующий файл + } else { + createNewFileWithData(logData); + } + //запускаем процедуру удаления старых файлов если память переполняется + deleteLastFile(); + + } void createNewFileWithData(String &logData) { logData = logData + ","; String path = "/lg/" + id + "/" + String(unixTimeShort) + ".txt"; //создадим путь вида /lg/id/133256622333.txt @@ -258,7 +308,9 @@ class Loging : public IoTItem { difference = currentMillis - prevMillis; if (difference >= interval) { prevMillis = millis(); - this->doByInterval(); + if(interval != 0){ + this->doByInterval(); + } } } } @@ -285,6 +337,12 @@ class Loging : public IoTItem { unsigned long getFileUnixLocalTime(String path) { return gmtTimeToLocal(selectToMarkerLast(deleteToMarkerLast(path, "."), "/").toInt() + START_DATETIME); } + void setValue(const IoTValue& Value, bool genEvent = true){ + value = Value; + this->SetDoByInterval(String(value.valD)); + SerialPrint("i", "Loging", "setValue:" + String(value.valD)); + regEvent(value.valS, "Loging", false, genEvent); + } }; void *getAPI_Loging(String subtype, String param) { diff --git a/src/modules/virtual/Loging/modinfo.json b/src/modules/virtual/Loging/modinfo.json index 1fb3da7f..53a962f7 100644 --- a/src/modules/virtual/Loging/modinfo.json +++ b/src/modules/virtual/Loging/modinfo.json @@ -14,6 +14,19 @@ "int": 5, "logid": "t", "points": 300 + }, + { + "global": 0, + "name": "График по событию", + "type": "Writing", + "subtype": "Loging", + "id": "log", + "widget": "chart2", + "page": "Графики", + "descr": "Температура", + "int": 0, + "num": 1, + "points": 300 } ], "about": {