версия с solid выгрузкой точек

This commit is contained in:
Dmitry Borisenko
2022-08-25 19:24:56 +02:00
parent a4b7eb00d7
commit 68774cec5f
5 changed files with 103 additions and 20 deletions

View File

@@ -85,12 +85,14 @@
"label": рафик1", "label": рафик1",
"widget": "chart", "widget": "chart",
"dateFormat": "HH:mm", "dateFormat": "HH:mm",
"maxCount": 255,
"pointRadius": 0 "pointRadius": 0
}, },
{ {
"name": "chart2", "name": "chart2",
"label": рафик2", "label": рафик2",
"widget": "chart", "widget": "chart",
"maxCount": 255,
"dateFormat": "HH:mm" "dateFormat": "HH:mm"
}, },
{ {
@@ -98,12 +100,14 @@
"label": рафик3", "label": рафик3",
"widget": "chart", "widget": "chart",
"dateFormat": "DD.MM.YYYY", "dateFormat": "DD.MM.YYYY",
"maxCount": 255,
"type": "bar" "type": "bar"
}, },
{ {
"name": "chart4", "name": "chart4",
"label": рафик4", "label": рафик4",
"widget": "chart", "widget": "chart",
"maxCount": 255,
"dateFormat": "DD.MM.YYYY" "dateFormat": "DD.MM.YYYY"
}, },
{ {

29
include/classes/IoTDB.h Normal file
View File

@@ -0,0 +1,29 @@
#pragma once
#include "Global.h"
#include <queue>
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<QueueItems> queue1;
QueueItems tmpItem;
};
extern IoTDB* myDB;

View File

@@ -1,5 +1,6 @@
#include "Main.h" #include "Main.h"
#include <time.h> #include <time.h>
#include "classes/IoTDB.h"
IoTScenario iotScen; // объект управления сценарием IoTScenario iotScen; // объект управления сценарием
@@ -70,7 +71,20 @@ void setup() {
// test // test
Serial.println("-------test start--------"); 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---------"); Serial.println("--------test end---------");
// симуляция добавления внешних событий // симуляция добавления внешних событий

31
src/classes/IoTDB.cpp Normal file
View File

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

View File

@@ -2,6 +2,8 @@
#include "classes/IoTItem.h" #include "classes/IoTItem.h"
#include "NTP.h" #include "NTP.h"
#define SOLID_UPLOADING
class Loging : public IoTItem { class Loging : public IoTItem {
private: private:
String logval; String logval;
@@ -46,7 +48,7 @@ class Loging : public IoTItem {
//если 2 ой раз и последующие разы //если 2 ой раз и последующие разы
} else { } else {
lines = countLines(fileName); lines = countLines(fileName);
if (lines <= 255) { if (lines <= 100) {
addFileLn(fileName, logData); addFileLn(fileName, logData);
} else { } else {
createFileWithIdDatatimeName(logData); createFileWithIdDatatimeName(logData);
@@ -73,7 +75,8 @@ class Loging : public IoTItem {
String directory = "logs"; String directory = "logs";
SerialPrint("I", "Loging", "in directory '" + directory + "' files:"); SerialPrint("I", "Loging", "in directory '" + directory + "' files:");
auto dir = FileFS.openDir(directory); auto dir = FileFS.openDir(directory);
String json_array; String oneSingleJson;
int maxCount = 0;
while (dir.next()) { while (dir.next()) {
String fname = dir.fileName(); String fname = dir.fileName();
@@ -86,34 +89,35 @@ class Loging : public IoTItem {
//выбираем только те файлы которые входят в выбранные сутки //выбираем только те файлы которые входят в выбранные сутки
if (fileUnixTime > reqUnixTime && fileUnixTime < reqUnixTime + 86400) { if (fileUnixTime > reqUnixTime && fileUnixTime < reqUnixTime + 86400) {
Serial.println("matched!"); Serial.println("matched!");
createOneSingleJson(json_array, "/logs/" + fname); #ifdef SOLID_UPLOADING
createOneSingleJson(oneSingleJson, "/logs/" + fname, maxCount);
#else
#endif
} }
} else { } else {
SerialPrint("i", "Loging", "file '" + fname + "' not used, deleted"); SerialPrint("i", "Loging", "file '" + fname + "' not used, deleted");
removeFile(directory + "/" + fname); removeFile(directory + "/" + fname);
} }
} }
json_array = "{\"status\":[" + json_array + "]}"; #ifdef SOLID_UPLOADING
json_array.replace("},]}", "}]}"); sendJson(oneSingleJson, maxCount);
Serial.println("final: "); #endif
Serial.println(json_array);
publishChart(id, json_array);
} }
void createOneSingleJson(String &json_array, String file) { void createOneSingleJson(String &oneSingleJson, String file, int &maxCount) {
File configFile = FileFS.open(file, "r"); File configFile = FileFS.open(file, "r");
if (!configFile) { if (!configFile) {
return; return;
} }
configFile.seek(0, SeekSet); configFile.seek(0, SeekSet);
int i = 0;
String buf = "{}"; String buf = "{}";
String unix_time; String unix_time;
String value; String value;
unsigned int psn; unsigned int psn;
unsigned int sz = configFile.size(); unsigned int sz = configFile.size();
do { do {
i++; maxCount++;
psn = configFile.position(); psn = configFile.position();
String line = configFile.readStringUntil('\n'); String line = configFile.readStringUntil('\n');
unix_time = selectToMarker(line, " "); unix_time = selectToMarker(line, " ");
@@ -121,7 +125,7 @@ class Loging : public IoTItem {
value = deleteBeforeDelimiter(line, " "); value = deleteBeforeDelimiter(line, " ");
jsonWriteFloat(buf, "y1", value.toFloat()); jsonWriteFloat(buf, "y1", value.toFloat());
if (unix_time != "" || value != "") { if (unix_time != "" || value != "") {
json_array += buf + ","; oneSingleJson += buf + ",";
} }
} while (psn < sz); } while (psn < sz);
@@ -129,6 +133,14 @@ class Loging : public IoTItem {
configFile.close(); 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() { void cleanLog() {
String directory = "logs/" + id; String directory = "logs/" + id;
auto dir = FileFS.openDir(directory); auto dir = FileFS.openDir(directory);
@@ -147,10 +159,3 @@ void *getAPI_Loging(String subtype, String param) {
return nullptr; return nullptr;
} }
} }
class fileDB {
private:
public:
fileDB() {
}
};