From d17112b3ff1647ba435205db04bdfafa62e1d9d2 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Thu, 10 Dec 2020 05:13:09 +0300 Subject: [PATCH] uart --- data/items/uart-button.txt | 1 + data/items/uart-widget.txt | 1 + data/presets/7.c.txt | 4 ++++ data/presets/7.s.txt | 10 ++++++++++ data/presets/8.c.txt | 4 ++++ data/presets/8.s.txt | 7 +++++++ data/presets/9.c.txt | 2 ++ data/presets/9.s.txt | 3 +++ data/set.device.json | 5 ++++- data/widgets/anydataAlarm.json | 6 ++++++ data/widgets/inputDigitTemp.json | 1 + data/widgets/inputTimeClock.json | 1 + include/SoftUART.h | 2 ++ include/items/vButtonOut.h | 3 ++- src/SoftUART.cpp | 30 ++++++++++++++++-------------- src/Web.cpp | 1 + src/items/vButtonOut.cpp | 14 ++++++++++++-- src/items/vInOutput.cpp | 19 ++++++++++++------- src/main.cpp | 6 ++++-- 19 files changed, 93 insertions(+), 27 deletions(-) create mode 100644 data/items/uart-button.txt create mode 100644 data/items/uart-widget.txt create mode 100644 data/presets/7.c.txt create mode 100644 data/presets/7.s.txt create mode 100644 data/presets/8.c.txt create mode 100644 data/presets/8.s.txt create mode 100644 data/presets/9.c.txt create mode 100644 data/presets/9.s.txt create mode 100644 data/widgets/anydataAlarm.json diff --git a/data/items/uart-button.txt b/data/items/uart-button.txt new file mode 100644 index 00000000..ee2a6b22 --- /dev/null +++ b/data/items/uart-button.txt @@ -0,0 +1 @@ +0;button-out;id;toggle;Кнопки;Освещение;order;type[UART] \ No newline at end of file diff --git a/data/items/uart-widget.txt b/data/items/uart-widget.txt new file mode 100644 index 00000000..469ab016 --- /dev/null +++ b/data/items/uart-widget.txt @@ -0,0 +1 @@ +0;inoutput;id;anydata;Вывод;Вывод#uart;order \ No newline at end of file diff --git a/data/presets/7.c.txt b/data/presets/7.c.txt new file mode 100644 index 00000000..984c6b8d --- /dev/null +++ b/data/presets/7.c.txt @@ -0,0 +1,4 @@ +0;inoutput;text;anydataAlarm;Сигнализация;Движение:;1 +0;inoutput;time;anydataTime;Сигнализация;Время:;2 +0;button-in;sensor;na;na;na;3;pin[0];db[20] +0;button-out;reset;toggle;Сигнализация;Сбросить;4 \ No newline at end of file diff --git a/data/presets/7.s.txt b/data/presets/7.s.txt new file mode 100644 index 00000000..32d28e78 --- /dev/null +++ b/data/presets/7.s.txt @@ -0,0 +1,10 @@ +sensor = 1 +text обнаружено +time %date% +telegram text обнаружено#движение 1 +end +reset = 1 +text не#обнаружено +time %date% +reset 0 +end \ No newline at end of file diff --git a/data/presets/8.c.txt b/data/presets/8.c.txt new file mode 100644 index 00000000..d18bdd0b --- /dev/null +++ b/data/presets/8.c.txt @@ -0,0 +1,4 @@ +0;button-in;sensor;na;na;na;1;pin[0];db[20] +0;button-out;light;toggle;Освещение;Освещение;2;pin[13] +0;count-down;count;anydata;Освещение;Обратный#отчет;3 +0;inoutput;period;inputDigit;Освещение;Период#включения;4 \ No newline at end of file diff --git a/data/presets/8.s.txt b/data/presets/8.s.txt new file mode 100644 index 00000000..10d55654 --- /dev/null +++ b/data/presets/8.s.txt @@ -0,0 +1,7 @@ +sensor = 1 +light 1 +count period +end +count = 0 +light 0 +end \ No newline at end of file diff --git a/data/presets/9.c.txt b/data/presets/9.c.txt new file mode 100644 index 00000000..502f3ae4 --- /dev/null +++ b/data/presets/9.c.txt @@ -0,0 +1,2 @@ +0;button-out;light;toggle;Кнопки;Освещение;1;pin[13] +0;button-in;switch;na;na;na;2;pin[0];db[20] \ No newline at end of file diff --git a/data/presets/9.s.txt b/data/presets/9.s.txt new file mode 100644 index 00000000..6f6d7dcc --- /dev/null +++ b/data/presets/9.s.txt @@ -0,0 +1,3 @@ +switch = 1 +light change +end \ No newline at end of file diff --git a/data/set.device.json b/data/set.device.json index d72a8e7e..5f566c11 100644 --- a/data/set.device.json +++ b/data/set.device.json @@ -93,6 +93,8 @@ "/set?addItem=impuls-out": "20.Создать импульсы через заданный промежуток времени (управление шд)", "/set?addItem=count-down": "21.Таймер обратного отчета", "/set?addItem=modbus": "22.Прочитать регистр modbus устройства", + "/set?addItem=uart-button": "23.UART кнопка (шлет свое состояние в UART)", + "/set?addItem=uart-widget": "24.UART виджет (позволяет вывести полученные данные в любой виджет)", "/set?addItem=logging": "a.Логгирование и вывод в график любой величины", "/set?addItem=uptime": "b.Отобразить время работы устройства" } @@ -111,7 +113,8 @@ "/set?addPreset=5.c": "5.Выключить все (пример работы сценариев)", "/set?addPreset=6.c": "6.Включить кнопку на определенное время (пример работы таймера обратного отчета)", "/set?addPreset=7.c": "7.Охранный датчик движения", - "/set?addPreset=8.c": "8.Датчик движения включающий свет" + "/set?addPreset=8.c": "8.Датчик движения включающий свет с настраиваемой задержкой", + "/set?addPreset=9.c": "9.Управление светом с помощью выключателя и приложения" } }, { diff --git a/data/widgets/anydataAlarm.json b/data/widgets/anydataAlarm.json new file mode 100644 index 00000000..d793d350 --- /dev/null +++ b/data/widgets/anydataAlarm.json @@ -0,0 +1,6 @@ +{ + "widget": "anydata", + "after": "", + "color":"red", + "icon": "walk" +} \ No newline at end of file diff --git a/data/widgets/inputDigitTemp.json b/data/widgets/inputDigitTemp.json index 0ed891e1..28f19081 100644 --- a/data/widgets/inputDigitTemp.json +++ b/data/widgets/inputDigitTemp.json @@ -2,5 +2,6 @@ "widget" : "input", "color" : "green", "type" : "number", + "size" : "small", "icon": "thermometer" } \ No newline at end of file diff --git a/data/widgets/inputTimeClock.json b/data/widgets/inputTimeClock.json index 695f6bd1..ab3186f8 100644 --- a/data/widgets/inputTimeClock.json +++ b/data/widgets/inputTimeClock.json @@ -2,5 +2,6 @@ "widget" : "input", "color" : "orange", "type" : "time", + "size" : "small", "icon": "alarm-outline" } \ No newline at end of file diff --git a/include/SoftUART.h b/include/SoftUART.h index 1955616f..7af320cc 100644 --- a/include/SoftUART.h +++ b/include/SoftUART.h @@ -2,6 +2,8 @@ #include "SoftwareSerial.h" +extern SoftwareSerial* myUART; + extern void uartInit(); extern void uartHandle(); extern void parse(String& incStr); \ No newline at end of file diff --git a/include/items/vButtonOut.h b/include/items/vButtonOut.h index 1f6f2614..7a11bc82 100644 --- a/include/items/vButtonOut.h +++ b/include/items/vButtonOut.h @@ -10,7 +10,7 @@ typedef std::vector MyButtonOutVector; class ButtonOut { public: - ButtonOut(String pin, boolean inv, String key); + ButtonOut(String pin, boolean inv, String key, String type); ~ButtonOut(); @@ -21,6 +21,7 @@ class ButtonOut { String _pin; boolean _inv; String _key; + String _type; }; diff --git a/src/SoftUART.cpp b/src/SoftUART.cpp index d142e26e..70cf2680 100644 --- a/src/SoftUART.cpp +++ b/src/SoftUART.cpp @@ -23,26 +23,28 @@ void uartInit() { } void uartHandle() { - if (!jsonReadBool(configSetupJson, "uart")) { - return; - } - static String incStr; - if (myUART->available()) { - char inc; - inc = myUART->read(); - incStr += inc; - if (inc == '\n') { - parse(incStr); - incStr = ""; + if (myUART != nullptr) { + if (!jsonReadBool(configSetupJson, "uart")) { + return; + } + static String incStr; + if (myUART->available()) { + char inc; + inc = myUART->read(); + incStr += inc; + if (inc == '\n') { + parse(incStr); + incStr = ""; + } } } } void parse(String& incStr) { + incStr.replace("\r\n", ""); + incStr.replace("\r", ""); + incStr.replace("\n", ""); if (incStr.indexOf("set") != -1) { - incStr.replace("\r\n", ""); - incStr.replace("\r", ""); - incStr.replace("\n", ""); incStr = deleteBeforeDelimiter(incStr, " "); SerialPrint("I", "UART", incStr); orderBuf += incStr; diff --git a/src/Web.cpp b/src/Web.cpp index ee5f8dc5..613b930c 100644 --- a/src/Web.cpp +++ b/src/Web.cpp @@ -38,6 +38,7 @@ void web_init() { #ifndef FLASH_SIZE_1MB addPreset(request->getParam("addPreset")->value()); #endif + jsonWriteStr(configSetupJson, "warning1", F("

Требуется перезагрузка

")); request->redirect("/?set.device"); } diff --git a/src/items/vButtonOut.cpp b/src/items/vButtonOut.cpp index 40263eba..bc1f6e2c 100644 --- a/src/items/vButtonOut.cpp +++ b/src/items/vButtonOut.cpp @@ -2,13 +2,15 @@ #include "Class/LineParsing.h" #include "Global.h" #include "BufferExecute.h" +#include "SoftUART.h" #include //this class save data to flash -ButtonOut::ButtonOut(String pin, boolean inv, String key) { +ButtonOut::ButtonOut(String pin, boolean inv, String key, String type) { _pin = pin; _inv = inv; _key = key; + _type = type; if (_pin != "") { pinMode(_pin.toInt(), OUTPUT); } @@ -18,6 +20,13 @@ ButtonOut::ButtonOut(String pin, boolean inv, String key) { ButtonOut::~ButtonOut() {} void ButtonOut::execute(String state) { + if (_type == "UART") { + if (jsonReadBool(configSetupJson, "uart")) { + if (myUART != nullptr) { + myUART->print(_key + " " + state); + } + } + } if (state != "" && _pin != "") { if (state == "change") { state = String(!digitalRead(_pin.toInt())); @@ -45,6 +54,7 @@ void buttonOut() { String key = myLineParsing.gkey(); String pin = myLineParsing.gpin(); String inv = myLineParsing.ginv(); + String type = myLineParsing.gtype(); bool invb = false; if (inv.toInt() == 1) invb = true; @@ -57,7 +67,7 @@ void buttonOut() { static bool firstTime = true; if (firstTime) myButtonOut = new MyButtonOutVector(); firstTime = false; - myButtonOut->push_back(ButtonOut(pin, invb, key)); + myButtonOut->push_back(ButtonOut(pin, invb, key, type)); sCmd.addCommand(key.c_str(), buttonOutExecute); } diff --git a/src/items/vInOutput.cpp b/src/items/vInOutput.cpp index d5966731..6581c1fb 100644 --- a/src/items/vInOutput.cpp +++ b/src/items/vInOutput.cpp @@ -1,10 +1,10 @@ #include "items/vInOutput.h" - #include - #include "Class/LineParsing.h" #include "Global.h" #include "BufferExecute.h" +#include "Clock.h" + //this class save date to flash InOutput::InOutput(String key, String widget) { _key = key; @@ -12,7 +12,7 @@ InOutput::InOutput(String key, String widget) { if (value == "") { if (widget.indexOf("Digit") != -1) { - value = "52"; + value = "25"; } if (widget.indexOf("Time") != -1) { value = "12:00"; @@ -52,13 +52,18 @@ void inOutput() { void inOutputExecute() { String key = sCmd.order(); String value = sCmd.next(); + //String type = sCmd.next(); + if (!isDigitStr(value)) { //если значение - текст if (value.indexOf(":") == -1) { //если этот текст не время - String tmp = getValue(value); - if(tmp != "no value") { - value = tmp; - value.replace("#"," "); + String valueJson = getValue(value); + if (valueJson != "no value") { //если это ключ переменной + value = valueJson; + } + else { //если это просто текст + value.replace("#", " "); + value.replace("%date%", timeNow->getDateTimeDotFormated()); } } } diff --git a/src/main.cpp b/src/main.cpp index 34c19945..44c52ff1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,6 +45,9 @@ void setup() { fileSystemInit(); SerialPrint("I", F("FS"), F("FS Init")); + SerialPrint("I", F("UART"), F("UART Init")); + uartInit(); + loadConfig(); SerialPrint("I", F("Conf"), F("Config Init")); @@ -92,8 +95,7 @@ void setup() { SerialPrint("I", F("Bus"), F("Bus Init")); busInit(); - SerialPrint("I", F("UART"), F("UART Init")); - uartInit(); + #ifdef SSDP_ENABLED SerialPrint("I", F("SSDP"), F("Ssdp Init"));