From 4c7b14bcc86ef70c93fb09c8ad083197ae120071 Mon Sep 17 00:00:00 2001 From: biver Date: Mon, 14 Nov 2022 19:28:14 +0300 Subject: [PATCH 1/5] =?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=B2=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=20Nextion?= =?UTF-8?q?=20=D0=B4=D1=80=D0=BE=D0=B1=D0=BD=D1=8B=D0=B5=20=D0=B7=D0=BD?= =?UTF-8?q?=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/UART/Uart.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/modules/sensors/UART/Uart.cpp b/src/modules/sensors/UART/Uart.cpp index a55cfa13..df2501f5 100644 --- a/src/modules/sensors/UART/Uart.cpp +++ b/src/modules/sensors/UART/Uart.cpp @@ -105,14 +105,20 @@ class UART : public IoTItem { case 2: // формат событий для Nextion ID=Value0xFF0xFF0xFF printStr += eventItem->getID(); - if (printStr.indexOf("_") == -1) return; // пропускаем событие, если нет используемого признака типа данных - _txt или _vol + int indexOf_ = printStr.indexOf("_"); + if (indexOf_ == -1) return; // пропускаем событие, если нет используемого признака типа данных - _txt или _vol if (printStr.indexOf("_txt") > 0) { printStr.replace("_txt", ".txt=\""); printStr += eventItem->getValue(); printStr += "\""; + } else if (printStr.indexOf("_val") > 0) { + printStr.replace(".", ""); + printStr.replace("_val", ".val="); + printStr += eventItem->getValue(); } else { - printStr.replace("_", "."); + if (indexOf_ == printStr.length()) printStr.replace("_", ""); + else printStr.replace("_", "."); printStr += "="; printStr += eventItem->getValue(); } From 9ad3ea9a35b792779043cc7976665772cdf3806c Mon Sep 17 00:00:00 2001 From: biver Date: Mon, 14 Nov 2022 19:31:55 +0300 Subject: [PATCH 2/5] =?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=B2=D0=B8=D0=B4=D0=B6=D0=B5=D1=82=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=20ina?= =?UTF-8?q?219?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data_svelte/widgets.json | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/data_svelte/widgets.json b/data_svelte/widgets.json index cab0dbe2..61be1240 100644 --- a/data_svelte/widgets.json +++ b/data_svelte/widgets.json @@ -209,6 +209,27 @@ "after": "ppm", "icon": "speedometer" }, + { + "name": "anydatamAmp", + "label": "миллиАмперы", + "widget": "anydata", + "after": "mAmp", + "icon": "speedometer" + }, + { + "name": "anydatamVlt", + "label": "миллиВольты", + "widget": "anydata", + "after": "mVlt", + "icon": "speedometer" + }, + { + "name": "anydatamWt", + "label": "миллиВатты", + "widget": "anydata", + "after": "mWt", + "icon": "speedometer" + }, { "name": "nil", "label": "Без виджета" From 4606f49df003e14f1e4f46b8707625454df6d268 Mon Sep 17 00:00:00 2001 From: biver Date: Mon, 14 Nov 2022 19:33:50 +0300 Subject: [PATCH 3/5] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D0=BC=20kWh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data_svelte/widgets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_svelte/widgets.json b/data_svelte/widgets.json index 61be1240..4c681bff 100644 --- a/data_svelte/widgets.json +++ b/data_svelte/widgets.json @@ -47,7 +47,7 @@ "name": "anydataWth", "label": "Энергия", "widget": "anydata", - "after": "kWt/Hr", + "after": "kWh", "icon": "speedometer" }, { From 02b2ef77a002c232fe06e03eaf0f9c775896ee8f Mon Sep 17 00:00:00 2001 From: biver Date: Mon, 14 Nov 2022 19:37:37 +0300 Subject: [PATCH 4/5] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D0=BC=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D1=80=D0=B0=20test=20=D0=B4=D0=BB=D1=8F=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/virtual/LogingDaily/modinfo.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/virtual/LogingDaily/modinfo.json b/src/modules/virtual/LogingDaily/modinfo.json index 9688920c..45623902 100644 --- a/src/modules/virtual/LogingDaily/modinfo.json +++ b/src/modules/virtual/LogingDaily/modinfo.json @@ -14,7 +14,7 @@ "int": 1, "logid": "t", "points": 365, - "test": 0 + "column": 0 } ], "about": { @@ -34,7 +34,7 @@ "int": "Интервал логирования в мнутах, частота проверки смены суток в минутах. Не рекомендуется менять", "logid": "ID накопительной величины которую будем логировать", "points": "Максимальное количество точек", - "test": "Режим тестирования - график будет обновляться не раз в сутки, а кадый заданный в int интервал" + "column": "Режим тестирования - график будет обновляться не раз в сутки, а кадый заданный в int интервал. Суточные столбики - 0, Минутные столбики - 1" } }, "defActive": true, From 45dea185c55d44a808bff6900fca26e1b1a5be52 Mon Sep 17 00:00:00 2001 From: biver Date: Mon, 14 Nov 2022 20:21:50 +0300 Subject: [PATCH 5/5] =?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": {