mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 20:09:14 +03:00
версия с solid выгрузкой точек
This commit is contained in:
@@ -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
29
include/classes/IoTDB.h
Normal 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;
|
||||||
16
src/Main.cpp
16
src/Main.cpp
@@ -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
31
src/classes/IoTDB.cpp
Normal 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;
|
||||||
@@ -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() {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user