добавляем функцию отправки сообщений в телеграм для дневного графика

This commit is contained in:
Dmitry Borisenko
2022-12-10 02:13:23 +01:00
parent fc6d159f5d
commit 66729fa1dc
9 changed files with 87 additions and 113 deletions

View File

@@ -9,6 +9,8 @@ class LogingDaily : public IoTItem {
String id;
String filesList = "";
String descr;
int _publishType = -2;
int _wsNum = -1;
@@ -16,6 +18,8 @@ class LogingDaily : public IoTItem {
int testMode;
int telegram;
IoTItem *dateIoTItem;
String prevDate = "";
@@ -29,13 +33,15 @@ class LogingDaily : public IoTItem {
jsonRead(parameters, F("id"), id);
jsonRead(parameters, F("points"), points);
jsonRead(parameters, F("test"), testMode);
jsonRead(parameters, F("telegram"), telegram);
jsonRead(parameters, F("descr"), descr);
if (points > 365) {
points = 365;
SerialPrint("E", F("LogingDaily"), "'" + id + "' user set more points than allowed, value reset to 365");
}
jsonRead(parameters, F("int"), interval);
interval = interval * 1000 * 60; //приводим к милисекундам
interval = interval * 1000 * 60; // приводим к милисекундам
}
void doByInterval() {
@@ -45,7 +51,7 @@ class LogingDaily : public IoTItem {
}
void execute() {
//если объект логгирования не был создан
// если объект логгирования не был создан
if (!isItemExist(logid)) {
SerialPrint("E", F("LogingDaily"), "'" + id + "' LogingDaily object not exist, return");
return;
@@ -53,51 +59,60 @@ class LogingDaily : public IoTItem {
String value = getItemValue(logid);
//если значение логгирования пустое
// если значение логгирования пустое
if (value == "") {
SerialPrint("E", F("LogingDaily"), "'" + id + "' LogingDaily value is empty, return");
return;
}
//если время не было получено из интернета
// если время не было получено из интернета
if (!isTimeSynch) {
SerialPrint("E", F("LogingDaily"), "'" + id + "' Сant LogingDaily - time not synchronized, return");
SerialPrint("E", F("LogingDaily"), "'" + id + "' Cant LogingDaily - time not synchronized, return");
return;
}
String logData;
float currentValue = value.toFloat();
//прочитаем предудущее значение
// прочитаем предудущее значение
float prevValue = readDataDB(id + "-v").toFloat();
//сохраним в базу данных текущее значение, понадобится в следующие сутки
// сохраним в базу данных текущее значение, понадобится в следующие сутки
saveDataDB(id + "-v", value);
float difference = currentValue - prevValue;
if (telegram == 1) {
String msg = descr + " " + String(currentValue) + " " + String(difference);
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
if ((*it)->getSubtype() == "TelegramLT" || "Telegram") {
(*it)->sendTelegramMsg(false, msg);
}
}
}
jsonWriteInt(logData, "x", unixTime - 120);
jsonWriteFloat(logData, "y1", difference);
//прочитаем путь к файлу последнего сохранения
// прочитаем путь к файлу последнего сохранения
String filePath = readDataDB(id);
//если данные о файле отсутствуют, создадим новый
// если данные о файле отсутствуют, создадим новый
if (filePath == "failed" || filePath == "") {
SerialPrint("E", F("LogingDaily"), "'" + id + "' file path not found, start create new file");
createNewFileWithData(logData);
return;
}
//считаем количество строк и определяем размер файла
// считаем количество строк и определяем размер файла
size_t size = 0;
int lines = countJsonObj(filePath, size);
SerialPrint("i", F("LogingDaily"), "'" + id + "' " + "lines = " + String(lines) + ", size = " + String(size));
//если количество строк до заданной величины и дата не менялась
// если количество строк до заданной величины и дата не менялась
if (lines <= points && !hasDayChanged()) {
//просто добавим в существующий файл новые данные
// просто добавим в существующий файл новые данные
addNewDataToExistingFile(filePath, logData);
//если больше или поменялась дата то создадим следующий файл
// если больше или поменялась дата то создадим следующий файл
} else {
createNewFileWithData(logData);
}
@@ -106,20 +121,20 @@ class LogingDaily : public IoTItem {
void createNewFileWithData(String &logData) {
logData = logData + ",";
String path = "/lgd/" + id + "/" + id + ".txt"; //создадим путь вида /lgd/id/id.txt
//создадим пустой файл
if (writeEmptyFile(path) != "sucсess") {
String path = "/lgd/" + id + "/" + id + ".txt"; // создадим путь вида /lgd/id/id.txt
// создадим пустой файл
if (writeEmptyFile(path) != "success") {
SerialPrint("E", F("LogingDaily"), "'" + id + "' file writing error, return");
return;
}
//запишем в него данные
if (addFile(path, logData) != "sucсess") {
// запишем в него данные
if (addFile(path, logData) != "success") {
SerialPrint("E", F("LogingDaily"), "'" + id + "' data writing error, return");
return;
}
//запишем путь к нему в базу данных
if (saveDataDB(id, path) != "sucсess") {
// запишем путь к нему в базу данных
if (saveDataDB(id, path) != "success") {
SerialPrint("E", F("LogingDaily"), "'" + id + "' db file writing error, return");
return;
}
@@ -128,7 +143,7 @@ class LogingDaily : public IoTItem {
void addNewDataToExistingFile(String &path, String &logData) {
logData = logData + ",";
if (addFile(path, logData) != "sucсess") {
if (addFile(path, logData) != "success") {
SerialPrint("i", F("LogingDaily"), "'" + id + "' file writing error, return");
return;
};
@@ -221,7 +236,7 @@ class LogingDaily : public IoTItem {
}
}
//просто максимальное количество точек
// просто максимальное количество точек
int calculateMaxCount() {
return 86400;
}