diff --git a/data_svelte/widgets.json b/data_svelte/widgets.json index de2d7354..f74875a1 100644 --- a/data_svelte/widgets.json +++ b/data_svelte/widgets.json @@ -85,12 +85,14 @@ "label": "График1", "widget": "chart", "dateFormat": "HH:mm", + "maxCount": 255, "pointRadius": 0 }, { "name": "chart2", "label": "График2", "widget": "chart", + "maxCount": 255, "dateFormat": "HH:mm" }, { @@ -98,12 +100,14 @@ "label": "График3", "widget": "chart", "dateFormat": "DD.MM.YYYY", + "maxCount": 255, "type": "bar" }, { "name": "chart4", "label": "График4", "widget": "chart", + "maxCount": 255, "dateFormat": "DD.MM.YYYY" }, { diff --git a/include/classes/IoTDB.h b/include/classes/IoTDB.h new file mode 100644 index 00000000..70acb09d --- /dev/null +++ b/include/classes/IoTDB.h @@ -0,0 +1,29 @@ +#pragma once +#include "Global.h" +#include + +using namespace std; + +struct QueueItems { + String myword; + uint8_t num; +}; + +class IoTDB; + +class IoTDB { + public: + IoTDB(); + ~IoTDB(); + + void push(QueueItems word); + void pop(); + QueueItems front(); + bool empty(); + + private: + queue queue1; + QueueItems tmpItem; +}; + +extern IoTDB* myDB; diff --git a/src/Main.cpp b/src/Main.cpp index 80d09123..472b4499 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -1,5 +1,6 @@ #include "Main.h" #include +#include "classes/IoTDB.h" IoTScenario iotScen; // объект управления сценарием @@ -70,7 +71,20 @@ void setup() { // test Serial.println("-------test start--------"); - Serial.println(strDateToUnix("25.08.2022")); + //=======проверка очереди из структур================= + + myDB = new IoTDB; + QueueItems myItem; + myItem.myword = "word1"; + myDB->push(myItem); + myItem.myword = "word2"; + myDB->push(myItem); + myItem.myword = "word3"; + myDB->push(myItem); + Serial.println(myDB->front().myword); + Serial.println(myDB->front().myword); + Serial.println(myDB->front().myword); + Serial.println("--------test end---------"); // симуляция добавления внешних событий diff --git a/src/classes/IoTDB.cpp b/src/classes/IoTDB.cpp new file mode 100644 index 00000000..8f46beab --- /dev/null +++ b/src/classes/IoTDB.cpp @@ -0,0 +1,31 @@ +#include "classes/IoTDB.h" + +IoTDB::IoTDB() {} +IoTDB::~IoTDB() {} + +//добавим элемент в конец очереди +void IoTDB::push(QueueItems word) { + queue1.push(word); +} + +//удалим элемент из начала очереди +void IoTDB::pop() { + if (!queue1.empty()) { + queue1.pop(); + } +} + +//вернуть элемент из начала очереди и удалить его +QueueItems IoTDB::front() { + if (!queue1.empty()) { + tmpItem = queue1.front(); + queue1.pop(); + } + return tmpItem; +} + +bool IoTDB::empty() { + return queue1.empty(); +} + +IoTDB* myDB; diff --git a/src/modules/virtual/Logging/Loging.cpp b/src/modules/virtual/Logging/Loging.cpp index 2da2df5e..d05ad5bd 100644 --- a/src/modules/virtual/Logging/Loging.cpp +++ b/src/modules/virtual/Logging/Loging.cpp @@ -2,6 +2,8 @@ #include "classes/IoTItem.h" #include "NTP.h" +#define SOLID_UPLOADING + class Loging : public IoTItem { private: String logval; @@ -46,7 +48,7 @@ class Loging : public IoTItem { //если 2 ой раз и последующие разы } else { lines = countLines(fileName); - if (lines <= 255) { + if (lines <= 100) { addFileLn(fileName, logData); } else { createFileWithIdDatatimeName(logData); @@ -73,7 +75,8 @@ class Loging : public IoTItem { String directory = "logs"; SerialPrint("I", "Loging", "in directory '" + directory + "' files:"); auto dir = FileFS.openDir(directory); - String json_array; + String oneSingleJson; + int maxCount = 0; while (dir.next()) { String fname = dir.fileName(); @@ -86,34 +89,35 @@ class Loging : public IoTItem { //выбираем только те файлы которые входят в выбранные сутки if (fileUnixTime > reqUnixTime && fileUnixTime < reqUnixTime + 86400) { Serial.println("matched!"); - createOneSingleJson(json_array, "/logs/" + fname); +#ifdef SOLID_UPLOADING + createOneSingleJson(oneSingleJson, "/logs/" + fname, maxCount); +#else + +#endif } } else { SerialPrint("i", "Loging", "file '" + fname + "' not used, deleted"); removeFile(directory + "/" + fname); } } - json_array = "{\"status\":[" + json_array + "]}"; - json_array.replace("},]}", "}]}"); - Serial.println("final: "); - Serial.println(json_array); - publishChart(id, json_array); +#ifdef SOLID_UPLOADING + sendJson(oneSingleJson, maxCount); +#endif } - void createOneSingleJson(String &json_array, String file) { + void createOneSingleJson(String &oneSingleJson, String file, int &maxCount) { File configFile = FileFS.open(file, "r"); if (!configFile) { return; } configFile.seek(0, SeekSet); - int i = 0; String buf = "{}"; String unix_time; String value; unsigned int psn; unsigned int sz = configFile.size(); do { - i++; + maxCount++; psn = configFile.position(); String line = configFile.readStringUntil('\n'); unix_time = selectToMarker(line, " "); @@ -121,7 +125,7 @@ class Loging : public IoTItem { value = deleteBeforeDelimiter(line, " "); jsonWriteFloat(buf, "y1", value.toFloat()); if (unix_time != "" || value != "") { - json_array += buf + ","; + oneSingleJson += buf + ","; } } while (psn < sz); @@ -129,6 +133,14 @@ class Loging : public IoTItem { configFile.close(); } + void sendJson(String &oneSingleJson, int &maxCount) { + oneSingleJson = "{\"maxCount\":" + String(maxCount) + ",\"status\":[" + oneSingleJson + "]}"; + oneSingleJson.replace("},]}", "}]}"); + Serial.println("final: "); + Serial.println(oneSingleJson); + publishChart(id, oneSingleJson); + } + void cleanLog() { String directory = "logs/" + id; auto dir = FileFS.openDir(directory); @@ -147,10 +159,3 @@ void *getAPI_Loging(String subtype, String param) { return nullptr; } } - -class fileDB { - private: - public: - fileDB() { - } -}; \ No newline at end of file