From f01fea9bac274844c277acb9d4987bbb6182e0aa Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <67171972+IoTManagerProject@users.noreply.github.com> Date: Sat, 15 Jan 2022 23:29:52 +0100 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=20=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=D1=82=D1=8C=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC?= =?UTF-8?q?=D1=83=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=D0=B8=D0=B4=D0=B6=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data_svelte/config.json | 2 +- data_svelte/widgets/alarm.json | 6 ++++ data_svelte/widgets/anydata.json | 5 +++ data_svelte/widgets/anydataAlarm.json | 6 ++++ data_svelte/widgets/anydataAmp.json | 5 +++ data_svelte/widgets/anydataHtz.json | 5 +++ data_svelte/widgets/anydataHum.json | 6 ++++ data_svelte/widgets/anydataPpb.json | 5 +++ data_svelte/widgets/anydataPpm.json | 5 +++ data_svelte/widgets/anydataPress.json | 5 +++ data_svelte/widgets/anydataTemp.json | 16 +++++++++ data_svelte/widgets/anydataTime.json | 5 +++ data_svelte/widgets/anydataVlt.json | 5 +++ data_svelte/widgets/anydataWhr.json | 5 +++ data_svelte/widgets/anydataWtt.json | 5 +++ data_svelte/widgets/btn.json | 6 ++++ data_svelte/widgets/chart.json | 5 +++ data_svelte/widgets/chart2.json | 4 +++ data_svelte/widgets/chart3.json | 5 +++ data_svelte/widgets/chart4.json | 4 +++ data_svelte/widgets/fillgauge.json | 7 ++++ data_svelte/widgets/inputDate.json | 6 ++++ data_svelte/widgets/inputDigit.json | 5 +++ data_svelte/widgets/inputDigitTemp.json | 7 ++++ data_svelte/widgets/inputText.json | 6 ++++ data_svelte/widgets/inputTime.json | 5 +++ data_svelte/widgets/inputTimeClock.json | 7 ++++ data_svelte/widgets/progress-line.json | 12 +++++++ data_svelte/widgets/progress-round.json | 11 ++++++ data_svelte/widgets/range.json | 9 +++++ data_svelte/widgets/select.json | 8 +++++ data_svelte/widgets/toggle.json | 5 +++ data_svelte/widgets/toggleSunMoon.json | 5 +++ include/CreateWidget.h | 8 +++++ include/ESPConfiguration.h | 1 + include/utils/FileUtils.h | 3 +- src/CreateWidget.cpp | 47 +++++++++++++++++++++++++ src/ESPConfiguration.cpp | 1 + src/utils/FileUtils.cpp | 11 ++++++ 39 files changed, 272 insertions(+), 2 deletions(-) create mode 100644 data_svelte/widgets/alarm.json create mode 100644 data_svelte/widgets/anydata.json create mode 100644 data_svelte/widgets/anydataAlarm.json create mode 100644 data_svelte/widgets/anydataAmp.json create mode 100644 data_svelte/widgets/anydataHtz.json create mode 100644 data_svelte/widgets/anydataHum.json create mode 100644 data_svelte/widgets/anydataPpb.json create mode 100644 data_svelte/widgets/anydataPpm.json create mode 100644 data_svelte/widgets/anydataPress.json create mode 100644 data_svelte/widgets/anydataTemp.json create mode 100644 data_svelte/widgets/anydataTime.json create mode 100644 data_svelte/widgets/anydataVlt.json create mode 100644 data_svelte/widgets/anydataWhr.json create mode 100644 data_svelte/widgets/anydataWtt.json create mode 100644 data_svelte/widgets/btn.json create mode 100644 data_svelte/widgets/chart.json create mode 100644 data_svelte/widgets/chart2.json create mode 100644 data_svelte/widgets/chart3.json create mode 100644 data_svelte/widgets/chart4.json create mode 100644 data_svelte/widgets/fillgauge.json create mode 100644 data_svelte/widgets/inputDate.json create mode 100644 data_svelte/widgets/inputDigit.json create mode 100644 data_svelte/widgets/inputDigitTemp.json create mode 100644 data_svelte/widgets/inputText.json create mode 100644 data_svelte/widgets/inputTime.json create mode 100644 data_svelte/widgets/inputTimeClock.json create mode 100644 data_svelte/widgets/progress-line.json create mode 100644 data_svelte/widgets/progress-round.json create mode 100644 data_svelte/widgets/range.json create mode 100644 data_svelte/widgets/select.json create mode 100644 data_svelte/widgets/toggle.json create mode 100644 data_svelte/widgets/toggleSunMoon.json create mode 100644 include/CreateWidget.h create mode 100644 src/CreateWidget.cpp diff --git a/data_svelte/config.json b/data_svelte/config.json index 81a4d579..befe882f 100644 --- a/data_svelte/config.json +++ b/data_svelte/config.json @@ -61,7 +61,7 @@ "type": "Reading", "subtype": "InputValue", "id": "txt", - "widget": "input", + "widget": "inputDigit", "page": "Лимиты", "descr": "Порог" }, diff --git a/data_svelte/widgets/alarm.json b/data_svelte/widgets/alarm.json new file mode 100644 index 00000000..e0e636c3 --- /dev/null +++ b/data_svelte/widgets/alarm.json @@ -0,0 +1,6 @@ +{ + "widget": "anydata", + "icon": "body", + "color": "red", + "descrColor": "red" +} \ No newline at end of file diff --git a/data_svelte/widgets/anydata.json b/data_svelte/widgets/anydata.json new file mode 100644 index 00000000..4157b9c9 --- /dev/null +++ b/data_svelte/widgets/anydata.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "", + "icon": "" +} \ No newline at end of file diff --git a/data_svelte/widgets/anydataAlarm.json b/data_svelte/widgets/anydataAlarm.json new file mode 100644 index 00000000..d793d350 --- /dev/null +++ b/data_svelte/widgets/anydataAlarm.json @@ -0,0 +1,6 @@ +{ + "widget": "anydata", + "after": "", + "color":"red", + "icon": "walk" +} \ No newline at end of file diff --git a/data_svelte/widgets/anydataAmp.json b/data_svelte/widgets/anydataAmp.json new file mode 100644 index 00000000..0cc40403 --- /dev/null +++ b/data_svelte/widgets/anydataAmp.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "Amp", + "icon": "speedometer" +} \ No newline at end of file diff --git a/data_svelte/widgets/anydataHtz.json b/data_svelte/widgets/anydataHtz.json new file mode 100644 index 00000000..4836a81a --- /dev/null +++ b/data_svelte/widgets/anydataHtz.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "Htz", + "icon": "speedometer" +} \ No newline at end of file diff --git a/data_svelte/widgets/anydataHum.json b/data_svelte/widgets/anydataHum.json new file mode 100644 index 00000000..966c6ba5 --- /dev/null +++ b/data_svelte/widgets/anydataHum.json @@ -0,0 +1,6 @@ +{ + "widget": "anydata", + "after": "%", + "icon": "water", + "color": "#88AADF" +} diff --git a/data_svelte/widgets/anydataPpb.json b/data_svelte/widgets/anydataPpb.json new file mode 100644 index 00000000..037e77d3 --- /dev/null +++ b/data_svelte/widgets/anydataPpb.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "ppb", + "icon": "body" + } \ No newline at end of file diff --git a/data_svelte/widgets/anydataPpm.json b/data_svelte/widgets/anydataPpm.json new file mode 100644 index 00000000..e4d134e7 --- /dev/null +++ b/data_svelte/widgets/anydataPpm.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "ppm", + "icon": "body" + } \ No newline at end of file diff --git a/data_svelte/widgets/anydataPress.json b/data_svelte/widgets/anydataPress.json new file mode 100644 index 00000000..e67af2c8 --- /dev/null +++ b/data_svelte/widgets/anydataPress.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "mm", + "icon": "speedometer" +} \ No newline at end of file diff --git a/data_svelte/widgets/anydataTemp.json b/data_svelte/widgets/anydataTemp.json new file mode 100644 index 00000000..0f063a71 --- /dev/null +++ b/data_svelte/widgets/anydataTemp.json @@ -0,0 +1,16 @@ +{ + "widget": "anydata", + "after": "°С", + "icon": "thermometer", + "font": "OCR A Std", + "color": [ + { "level": -20, "value": "#0000CC" }, + { "level": -10, "value": "#0000CC" }, + { "level": 0, "value": "#0000CC" }, + { "level": 12, "value": "#3366FF" }, + { "level": 16, "value": "#33CCFF" }, + { "level": 18, "value": "#009933" }, + { "level": 30, "value": "#FF9900" }, + { "level": 40, "value": "red" } + ] +} diff --git a/data_svelte/widgets/anydataTime.json b/data_svelte/widgets/anydataTime.json new file mode 100644 index 00000000..821c4dab --- /dev/null +++ b/data_svelte/widgets/anydataTime.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "", + "icon": "speedometer" +} \ No newline at end of file diff --git a/data_svelte/widgets/anydataVlt.json b/data_svelte/widgets/anydataVlt.json new file mode 100644 index 00000000..f2a10747 --- /dev/null +++ b/data_svelte/widgets/anydataVlt.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "Vlt", + "icon": "speedometer" +} \ No newline at end of file diff --git a/data_svelte/widgets/anydataWhr.json b/data_svelte/widgets/anydataWhr.json new file mode 100644 index 00000000..e523bedd --- /dev/null +++ b/data_svelte/widgets/anydataWhr.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "Whr", + "icon": "speedometer" +} \ No newline at end of file diff --git a/data_svelte/widgets/anydataWtt.json b/data_svelte/widgets/anydataWtt.json new file mode 100644 index 00000000..c1211050 --- /dev/null +++ b/data_svelte/widgets/anydataWtt.json @@ -0,0 +1,5 @@ +{ + "widget": "anydata", + "after": "Wtt", + "icon": "speedometer" +} \ No newline at end of file diff --git a/data_svelte/widgets/btn.json b/data_svelte/widgets/btn.json new file mode 100644 index 00000000..67dcc0d3 --- /dev/null +++ b/data_svelte/widgets/btn.json @@ -0,0 +1,6 @@ +{ + "widget": "btn", + "size": "large", + "color": "green", + "send": "test" +} \ No newline at end of file diff --git a/data_svelte/widgets/chart.json b/data_svelte/widgets/chart.json new file mode 100644 index 00000000..878ce0e4 --- /dev/null +++ b/data_svelte/widgets/chart.json @@ -0,0 +1,5 @@ +{ + "widget": "chart", + "dateFormat": "HH:mm", + "pointRadius": 0 +} \ No newline at end of file diff --git a/data_svelte/widgets/chart2.json b/data_svelte/widgets/chart2.json new file mode 100644 index 00000000..9ecc61e3 --- /dev/null +++ b/data_svelte/widgets/chart2.json @@ -0,0 +1,4 @@ +{ + "widget": "chart", + "dateFormat": "HH:mm" +} \ No newline at end of file diff --git a/data_svelte/widgets/chart3.json b/data_svelte/widgets/chart3.json new file mode 100644 index 00000000..e2783cea --- /dev/null +++ b/data_svelte/widgets/chart3.json @@ -0,0 +1,5 @@ +{ + "widget": "chart", + "dateFormat": "DD.MM.YYYY", + "type":"bar" +} \ No newline at end of file diff --git a/data_svelte/widgets/chart4.json b/data_svelte/widgets/chart4.json new file mode 100644 index 00000000..11d05d24 --- /dev/null +++ b/data_svelte/widgets/chart4.json @@ -0,0 +1,4 @@ +{ + "widget": "chart", + "dateFormat": "DD.MM.YYYY" +} \ No newline at end of file diff --git a/data_svelte/widgets/fillgauge.json b/data_svelte/widgets/fillgauge.json new file mode 100644 index 00000000..34315ea8 --- /dev/null +++ b/data_svelte/widgets/fillgauge.json @@ -0,0 +1,7 @@ +{ + "widget": "fillgauge", + "circleColor": "#00FFFF", + "textColor": "#FFFFFF", + "waveTextColor": "#000000", + "waveColor": "#00FFFF" +} \ No newline at end of file diff --git a/data_svelte/widgets/inputDate.json b/data_svelte/widgets/inputDate.json new file mode 100644 index 00000000..ecc3113d --- /dev/null +++ b/data_svelte/widgets/inputDate.json @@ -0,0 +1,6 @@ +{ + "widget" : "input", + "size" : "small", + "color" : "orange", + "type" : "date" +} \ No newline at end of file diff --git a/data_svelte/widgets/inputDigit.json b/data_svelte/widgets/inputDigit.json new file mode 100644 index 00000000..20196c6a --- /dev/null +++ b/data_svelte/widgets/inputDigit.json @@ -0,0 +1,5 @@ +{ + "widget" : "input", + "color" : "blue", + "type" : "number" +} \ No newline at end of file diff --git a/data_svelte/widgets/inputDigitTemp.json b/data_svelte/widgets/inputDigitTemp.json new file mode 100644 index 00000000..28f19081 --- /dev/null +++ b/data_svelte/widgets/inputDigitTemp.json @@ -0,0 +1,7 @@ +{ + "widget" : "input", + "color" : "green", + "type" : "number", + "size" : "small", + "icon": "thermometer" +} \ No newline at end of file diff --git a/data_svelte/widgets/inputText.json b/data_svelte/widgets/inputText.json new file mode 100644 index 00000000..3484d53b --- /dev/null +++ b/data_svelte/widgets/inputText.json @@ -0,0 +1,6 @@ +{ + "widget" : "input", + "size" : "small", + "color" : "orange", + "type" : "text" +} \ No newline at end of file diff --git a/data_svelte/widgets/inputTime.json b/data_svelte/widgets/inputTime.json new file mode 100644 index 00000000..e39942a4 --- /dev/null +++ b/data_svelte/widgets/inputTime.json @@ -0,0 +1,5 @@ +{ + "widget" : "input", + "color" : "blue", + "type" : "time" +} \ No newline at end of file diff --git a/data_svelte/widgets/inputTimeClock.json b/data_svelte/widgets/inputTimeClock.json new file mode 100644 index 00000000..ab3186f8 --- /dev/null +++ b/data_svelte/widgets/inputTimeClock.json @@ -0,0 +1,7 @@ +{ + "widget" : "input", + "color" : "orange", + "type" : "time", + "size" : "small", + "icon": "alarm-outline" +} \ No newline at end of file diff --git a/data_svelte/widgets/progress-line.json b/data_svelte/widgets/progress-line.json new file mode 100644 index 00000000..b2a95529 --- /dev/null +++ b/data_svelte/widgets/progress-line.json @@ -0,0 +1,12 @@ +{ + "widget": "progress-line", + "icon": "sunny", + "descrColor": "", + "color": "", + "max": "100", + "background": "", + "stroke": "10", + "disabled": "", + "before": "", + "after": "" +} \ No newline at end of file diff --git a/data_svelte/widgets/progress-round.json b/data_svelte/widgets/progress-round.json new file mode 100644 index 00000000..bf3ddae5 --- /dev/null +++ b/data_svelte/widgets/progress-round.json @@ -0,0 +1,11 @@ +{ + "widget": "progress-round", + "descrColor": "", + "max": "100", + "stroke": "20", + "color": "#45ccce", + "background": "#777", + "before": "", + "semicircle": "1", + "after": "" +} \ No newline at end of file diff --git a/data_svelte/widgets/range.json b/data_svelte/widgets/range.json new file mode 100644 index 00000000..4d1e0ff3 --- /dev/null +++ b/data_svelte/widgets/range.json @@ -0,0 +1,9 @@ + { + "widget" : "range", + "descrColor": "red", + "after" : "%", + "k" : 0.0977, + "min" : 0, + "max" : 100, + "debounce": 500 +} \ No newline at end of file diff --git a/data_svelte/widgets/select.json b/data_svelte/widgets/select.json new file mode 100644 index 00000000..bad018fd --- /dev/null +++ b/data_svelte/widgets/select.json @@ -0,0 +1,8 @@ +{ + "widget": "select", + "options": [ + "Выключен", + "Включен" + ], + "status": 0 +} \ No newline at end of file diff --git a/data_svelte/widgets/toggle.json b/data_svelte/widgets/toggle.json new file mode 100644 index 00000000..4e9eed5e --- /dev/null +++ b/data_svelte/widgets/toggle.json @@ -0,0 +1,5 @@ +{ + "widget": "toggle", + "icon": "", + "iconOff": "" +} \ No newline at end of file diff --git a/data_svelte/widgets/toggleSunMoon.json b/data_svelte/widgets/toggleSunMoon.json new file mode 100644 index 00000000..5501aa75 --- /dev/null +++ b/data_svelte/widgets/toggleSunMoon.json @@ -0,0 +1,5 @@ +{ + "widget": "toggle", + "icon": "sunny", + "iconOff": "moon" +} \ No newline at end of file diff --git a/include/CreateWidget.h b/include/CreateWidget.h new file mode 100644 index 00000000..3e85ecae --- /dev/null +++ b/include/CreateWidget.h @@ -0,0 +1,8 @@ +#pragma once +#include "Global.h" + +extern void createWidget(String& parameters); + +extern bool loadWidget(const String& filename, String& buf); + +extern const String getWidgetFile(const String& name); \ No newline at end of file diff --git a/include/ESPConfiguration.h b/include/ESPConfiguration.h index 928e202d..95ac715c 100644 --- a/include/ESPConfiguration.h +++ b/include/ESPConfiguration.h @@ -1,6 +1,7 @@ #pragma once #include "Global.h" #include "Classes/IoTSensor.h" +#include "CreateWidget.h" extern std::vector iotSensors; // вектор ссылок базового класса IoTSensor - список всех запущенных сенсоров diff --git a/include/utils/FileUtils.h b/include/utils/FileUtils.h index 274ba22a..92d31b95 100644 --- a/include/utils/FileUtils.h +++ b/include/utils/FileUtils.h @@ -6,4 +6,5 @@ extern File seekFile(const String& filename, size_t position = 0); extern const String writeFile(const String& filename, const String& str); extern const String readFile(const String& filename, size_t max_size); extern const String filepath(const String& filename); -extern bool cutFile(const String& src, const String& dst); \ No newline at end of file +extern bool cutFile(const String& src, const String& dst); +extern const String addFileLn(const String& filename, const String& str); \ No newline at end of file diff --git a/src/CreateWidget.cpp b/src/CreateWidget.cpp new file mode 100644 index 00000000..16b2f3c2 --- /dev/null +++ b/src/CreateWidget.cpp @@ -0,0 +1,47 @@ +#include "CreateWidget.h" + +void createWidget(String& parameters) { + String id = jsonReadStr(parameters, "id"); + String widget = jsonReadStr(parameters, "widget"); + String order = jsonReadStr(parameters, "order"); + String page = jsonReadStr(parameters, "page"); + String descr = jsonReadStr(parameters, "descr"); + + if (widget != "na") { + String buf = "{}"; + if (!loadWidget(widget, buf)) { + return; + } + // if (_cnt != "") { + // if (widget.indexOf("chart") != -1) jsonWriteStr(buf, "maxCount", _cnt); + // } + +#ifdef GATE_MODE + jsonWriteStr(buf, "info", " "); +#endif + + jsonWriteStr(buf, "page", page); + jsonWriteStr(buf, "order", order); + jsonWriteStr(buf, "descr", descr); + jsonWriteStr(buf, "topic", prex + "/" + id); + +#ifdef LAYOUT_IN_RAM + all_widgets += widget + "\r\n"; +#else + addFileLn("layout.txt", buf); +#endif + } +} + +bool loadWidget(const String& widget, String& buf) { + buf = readFile(getWidgetFile(widget), 2048); + bool res = !(buf == "Failed" || buf == "Large"); + if (!res) { + SerialPrint("E", "module", "on load" + widget); + } + return res; +} + +const String getWidgetFile(const String& name) { + return "/widgets/" + name + ".json"; +} diff --git a/src/ESPConfiguration.cpp b/src/ESPConfiguration.cpp index a6eaac04..338d41d6 100644 --- a/src/ESPConfiguration.cpp +++ b/src/ESPConfiguration.cpp @@ -20,6 +20,7 @@ void configure(String path) { myIoTSensor = (IoTSensor*)getAPI_AnalogAdc(jsonArrayElement); if (myIoTSensor) { iotSensors.push_back(myIoTSensor); + createWidget(jsonArrayElement); } //================================================================================================================ } diff --git a/src/utils/FileUtils.cpp b/src/utils/FileUtils.cpp index 9b0970ba..dc74f13f 100644 --- a/src/utils/FileUtils.cpp +++ b/src/utils/FileUtils.cpp @@ -63,4 +63,15 @@ bool cutFile(const String& src, const String& dst) { dstFile.close(); FileFS.remove(srcPath); return true; +} + +const String addFileLn(const String& filename, const String& str) { + String path = filepath(filename); + auto file = FileFS.open(path, "a"); + if (!file) { + return "failed"; + } + file.println(str); + file.close(); + return "sucсess"; } \ No newline at end of file