diff --git a/include/classes/IoTItem.h b/include/classes/IoTItem.h index fa8533a8..c87f925c 100644 --- a/include/classes/IoTItem.h +++ b/include/classes/IoTItem.h @@ -27,6 +27,7 @@ class IoTItem { int getIntFromNet(); virtual String getValue(); long getInterval(); + bool isGlobal(); void setInterval(long interval); void setIntFromNet(int interval); diff --git a/src/classes/IoTItem.cpp b/src/classes/IoTItem.cpp index 4a4e3721..095e6c18 100644 --- a/src/classes/IoTItem.cpp +++ b/src/classes/IoTItem.cpp @@ -59,6 +59,8 @@ String IoTItem::getValue() { long IoTItem::getInterval() { return _interval; } +bool IoTItem::isGlobal() { return _global;} + //определяем тип прилетевшей величины void IoTItem::setValue(const String& valStr, bool genEvent) { value.isDecimal = isDigitDotCommaStr(valStr); diff --git a/src/modules/sensors/UART/Uart.cpp b/src/modules/sensors/UART/Uart.cpp index e0a1ea31..3aaa31e0 100644 --- a/src/modules/sensors/UART/Uart.cpp +++ b/src/modules/sensors/UART/Uart.cpp @@ -90,30 +90,31 @@ class UART : public IoTItem { } void onRegEvent(IoTItem* eventItem) { - if (!_myUART) return; + if (!_myUART || !eventItem) return; String printStr = ""; switch (_eventFormat) { case 0: return; // не указан формат, значит не следим за событиями case 1: // формат событий IoTM с использованием json - eventItem->getNetEvent(printStr); - _myUART->println(printStr); + if (eventItem->isGlobal()) { + eventItem->getNetEvent(printStr); + _myUART->println(printStr); + } break; case 2: // формат событий для Nextion ID=Value0xFF0xFF0xFF printStr += eventItem->getID(); - printStr += "="; - if (eventItem->value.isDecimal) - printStr += eventItem->getRoundValue(); - else { + if (printStr.indexOf("_") == -1) return; // пропускаем событие, если нет используемого признака типа данных - _txt или _vol + if (printStr.indexOf("_val") > 0) { + printStr.replace("_val", ".val="); + printStr += eventItem->getValue(); + } else if (printStr.indexOf("_txt") > 0) { + printStr.replace("_txt", ".txt="); printStr += "\""; - printStr += eventItem->value.valS; + printStr += eventItem->getValue(); printStr += "\""; - } - _myUART->print(printStr); - _myUART->write(0xff); - _myUART->write(0xff); - _myUART->write(0xff); + } else return; + uartPrintFFF(printStr); break; } } @@ -122,12 +123,27 @@ class UART : public IoTItem { uartHandle(); } - void uartPrint(const String& msg) { + void uartPrintFFF(const String& msg) { + if (_myUART) { + _myUART->print(msg); + _myUART->write(0xff); + _myUART->write(0xff); + _myUART->write(0xff); + } + } + + void uartPrintln(const String& msg) { if (_myUART) { _myUART->println(msg); } } + void uartPrint(const String& msg) { + if (_myUART) { + _myUART->print(msg); + } + } + void uartPrintHex(const String& msg) { if (!_myUART) return; @@ -141,14 +157,33 @@ class UART : public IoTItem { } IoTValue execute(String command, std::vector ¶m) { - if (command == "print") { + if (command == "println") { if (param.size() == 1) { - uartPrint(param[0].valS); + if (param[0].isDecimal) uartPrintln((String)param[0].valD); + else uartPrintln(param[0].valS); + } + } else if (command == "print") { + if (param.size() == 1) { + if (param[0].isDecimal) uartPrint((String)param[0].valD); + else uartPrint(param[0].valS); } } else if (command == "printHex") { if (param.size() == 1) { uartPrintHex(param[0].valS); } + } else if (command == "printFFF") { + if (param.size() == 2) { + String strToUart = ""; + if (param[0].isDecimal) + strToUart = param[0].valD; + else + strToUart = param[0].valS; + + if (param[1].valD) + uartPrintFFF("\"" + strToUart + "\""); + else + uartPrintFFF(strToUart); + } } return {}; diff --git a/src/modules/sensors/UART/modinfo.json b/src/modules/sensors/UART/modinfo.json index 02a35f33..f9e68cda 100644 --- a/src/modules/sensors/UART/modinfo.json +++ b/src/modules/sensors/UART/modinfo.json @@ -35,8 +35,31 @@ "tx": "TX пин", "rx": "RX пин", "speed": "Скорость UART", - "eventFormat": "Выбор формата обмена сообщениями с другими контроллерами. =0 - не указан формат, значит не следим за событиями, =1 - формат событий IoTM с использованием json, =2 - формат событий для Nextion отправка событий: ID=Value0xFF0xFF0xFF прием ордеров: ID=Value" - } + "eventFormat": "Выбор формата обмена сообщениями с другими контроллерами. =0 - не указан формат, значит не следим за событиями, =1 - формат событий IoTM с использованием json, =2 - формат событий для Nextion отправка событий: ID.val=Value0xFF0xFF0xFF прием ордеров: ID=Value. Отправляться будут события тех элементов, которые имеют суффикс в ИД _val или _txt, которые влияют на передаваемый формат." + }, + "retInfo": "Содержит полученное последнее по UART сообщение.", + "funcInfo": [ + { + "name": "println", + "descr": "Отправить в UART строку текста и признак завершения строки (перевод строки).", + "params": ["Строка текста"] + }, + { + "name": "print", + "descr": "Отправить в UART строку текста.", + "params": ["Строка текста"] + }, + { + "name": "printHex", + "descr": "Отправить в UART HEX-строку.", + "params": ["HEX-строка."] + }, + { + "name": "printFFF", + "descr": "Отправить в UART текстовую строку и hex метку 3 байта 0xFF0xFF0xFF.", + "params": ["Строка текста", "1 - обернуть строку в кавычки, 0 - отправить без кавычек"] + } + ] }, "defActive": true, "usedLibs": {