diff --git a/Cmd.ino b/Cmd.ino index d94bf500..c3978df8 100644 --- a/Cmd.ino +++ b/Cmd.ino @@ -18,9 +18,8 @@ void CMD_init() { sCmd.addCommand("logging", logging); - sCmd.addCommand("input", input); - sCmd.addCommand("valueUpSet", valueUpSet); - sCmd.addCommand("valueDownSet", valueDownSet); + sCmd.addCommand("inputDigit", inputDigit); + sCmd.addCommand("digitSet", digitSet); @@ -42,8 +41,7 @@ void CMD_init() { //======новые виджеты ver2.0=======// - sCmd.addCommand("inputNumber", inputNumber); - sCmd.addCommand("inputNumberSet", inputNumberSet); + sCmd.addCommand("inputText", inputText); sCmd.addCommand("inputTextSet", inputTextSet); @@ -62,23 +60,7 @@ void CMD_init() { //=================================// } -void inputNumber() { - String number = sCmd.next(); - String viget_name = sCmd.next(); - viget_name.replace("#", " "); - String page_name = sCmd.next(); - page_name.replace("#", " "); - String start_state = sCmd.next(); - String page_number = sCmd.next(); - jsonWrite(configJson, "inputNumberSet" + number, start_state); - createViget (viget_name, page_name, page_number, "vigets/viget.inputNumber.json", "inputNumberSet" + number); -} -void inputNumberSet() { - String number = sCmd.next(); - String value = sCmd.next(); - jsonWrite(configJson, "inputNumberSet" + number, value); - sendSTATUS("inputNumberSet" + number, value); -} + void inputText() { String number = sCmd.next(); @@ -301,63 +283,24 @@ void handleButton() { //===================================================================================================================================== //=========================================Добавление окна ввода переменной============================================================ -void input() { - - String name_ = sCmd.next(); - String number = name_.substring(5); - String start_value = sCmd.next(); - String step_ = sCmd.next(); +void inputDigit() { String value_name = sCmd.next(); + String number = value_name.substring(5); + String viget_name = sCmd.next(); + viget_name.replace("#", " "); String page_name = sCmd.next(); + page_name.replace("#", " "); + String start_state = sCmd.next(); String page_number = sCmd.next(); - - int psn1 = start_value.indexOf("."); //ищем позицию запятой - int digits = 0; - if (psn1 != -1) { //если она есть - String last_part = deleteBeforeDelimiter(start_value, "."); - digits = last_part.length() + 1; - } - - createViget ("", page_name, page_number, "vigets/viget.button.json", "valueDownSet" + number, "title", "-"); - createViget (value_name, page_name, String(page_number.toInt() + 1), "vigets/viget.alertbg.json", name_); - createViget ("", page_name, String(page_number.toInt() + 2), "vigets/viget.button.json", "valueUpSet" + number , "title", "+"); - - //jsonWrite(valuesJson, name_, start_value); - //saveValues (); - sendSTATUS(name_, start_value); - - jsonWrite(configJson, name_ + "step", step_); - jsonWrite(configJson, name_ + "digits", digits); + jsonWrite(configJson, "digitSet" + number, start_state); + createViget (viget_name, page_name, page_number, "vigets/viget.inputNum.json", "digitSet" + number); } - -void valueUpSet() { +void digitSet() { String number = sCmd.next(); - float val = jsonRead(configJson, "value" + number).toFloat(); - float step_ = jsonRead(configJson, "value" + number + "step").toFloat(); - int digits = jsonRead(configJson, "value" + number + "digits").toInt(); - val = val + step_; - String val_str = String(val); - val_str = selectToMarkerPlus (val_str, ".", digits); - jsonWrite(configJson, "value" + number, val_str); - //jsonWrite(valuesJson, "value" + number, val_str); - //saveValues (); - sendSTATUS("value" + number, val_str); + String value = sCmd.next(); + jsonWrite(configJson, "digitSet" + number, value); + sendSTATUS("digitSet" + number, value); } - -void valueDownSet() { - String number = sCmd.next(); - float val = jsonRead(configJson, "value" + number).toFloat(); - float step_ = jsonRead(configJson, "value" + number + "step").toFloat(); - int digits = jsonRead(configJson, "value" + number + "digits").toInt(); - val = val - step_; - String val_str = String(val); - val_str = selectToMarkerPlus (val_str, ".", digits); - jsonWrite(configJson, "value" + number, val_str); - //jsonWrite(valuesJson, "value" + number, val_str); - //saveValues (); - sendSTATUS("value" + number, val_str); -} - //===================================================================================================================================== //=========================================Добавление текстового виджета============================================================ void text() { diff --git a/Scenario.ino b/Scenario.ino index 8a1b5ac9..5b3543c8 100644 --- a/Scenario.ino +++ b/Scenario.ino @@ -13,26 +13,20 @@ void handleScenario() { if (tmp == "") return; i++; - if (scenario_line_status[i] == 1) { + if (scenario_line_status[i] == 1) { //Serial.println(i); String condition = selectToMarker (tmp, "\n"); //выделяем первую строку самого сценария button1 = 1 (условие) - String param_name = selectFromMarkerToMarker(condition, " " , 0); //из первой страки берем имя параметра button1 и вставляем в него Set и получаем buttonSet1 - String num1 = param_name.substring(param_name.length() - 1); - String num2 = param_name.substring(param_name.length() - 2, param_name.length() - 1); - if (isDigitStr(num1) && isDigitStr(num2)) { - param_name = param_name.substring(0, param_name.length() - 2) + "Set" + num2 + num1; - } else { - if (isDigitStr(num1)) { - param_name = param_name.substring(0, param_name.length() - 1) + "Set" + num1; - } - } //преобразуем из button1 в вид buttonSet1 ,param_name = buttonSet1 + String param_name = selectFromMarkerToMarker(condition, " " , 0); + + param_name = add_set(param_name); //из первой страки берем имя параметра button1 и вставляем в него Set и получаем buttonSet1 + String order = jsonRead(optionJson, "scenario_status"); //читаем весь файл событий String param = selectToMarker (order, ","); //читаем первое событие из файла событий if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку - String sign = selectFromMarkerToMarker(condition, " " , 1); //читаем знак (=) String value = selectFromMarkerToMarker(condition, " " , 2); //читаем значение (1) - if (value.indexOf("value") != -1) { + if (value.indexOf("digit") != -1) { + value = add_set(value); value = jsonRead(configJson, value); } boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады @@ -43,22 +37,22 @@ void handleScenario() { if (jsonRead(configJson, param_name) != value) flag = true; } if (sign == "<") { - if (jsonRead(configJson, param_name).toFloat() < value.toFloat()) flag = true; + if (jsonRead(configJson, param_name).toInt() < value.toInt()) flag = true; } if (sign == ">") { - if (jsonRead(configJson, param_name).toFloat() > value.toFloat()) flag = true; + if (jsonRead(configJson, param_name).toInt() > value.toInt()) flag = true; } if (sign == ">=") { - if (jsonRead(configJson, param_name).toFloat() >= value.toFloat()) flag = true; + if (jsonRead(configJson, param_name).toInt() >= value.toInt()) flag = true; } if (sign == "<=") { - if (jsonRead(configJson, param_name).toFloat() <= value.toFloat()) flag = true; + if (jsonRead(configJson, param_name).toInt() <= value.toInt()) flag = true; } if (flag) { tmp = deleteBeforeDelimiter(tmp, "\n"); //удаляем строку самого сценария оставляя только команды stringExecution(tmp); //выполняем все команды - + Serial.println("[SCENARIO] '" + condition + "'"); //Serial.println(" " + tmp); } @@ -75,7 +69,7 @@ void handleScenario() { } } -void eventGen (String event_name, String number) { //событие выглядит как имя плюс set плюс номер: button+Set+1 +void eventGen (String event_name, String number) { //событие выглядит как имя плюс set плюс номер: button+Set+1 if (jsonRead(configSetup, "scenario") == "1") { String tmp = jsonRead(optionJson, "scenario_status") ; //генерирование события @@ -83,3 +77,16 @@ void eventGen (String event_name, String number) { //событие выгля jsonWrite(optionJson, "scenario_status", tmp + event_name + number + ","); } } + +String add_set(String param_name) { + String num1 = param_name.substring(param_name.length() - 1); + String num2 = param_name.substring(param_name.length() - 2, param_name.length() - 1); + if (isDigitStr(num1) && isDigitStr(num2)) { + param_name = param_name.substring(0, param_name.length() - 2) + "Set" + num2 + num1; + } else { + if (isDigitStr(num1)) { + param_name = param_name.substring(0, param_name.length() - 1) + "Set" + num1; + } + } + return param_name; +} diff --git a/Sensors.ino b/Sensors.ino index 08782707..d6d81cbf 100644 --- a/Sensors.ino +++ b/Sensors.ino @@ -2,6 +2,7 @@ //=========================================Модуль аналогового сенсора============================================================ void analog() { static boolean flag = true; + String pin = sCmd.next(); String viget_name = sCmd.next(); String page_name = sCmd.next(); String type = sCmd.next(); @@ -22,7 +23,7 @@ void analog() { static int analog_old; - int analog_in = analogRead(A0); + int analog_in = analogRead(pin.toInt()); jsonWrite(configJson, "analog_in", analog_in); int analog = map(analog_in, diff --git a/Timers.ino b/Timers.ino index 37dc9fb9..06507ef5 100644 --- a/Timers.ino +++ b/Timers.ino @@ -48,7 +48,8 @@ void timerStart() { String period_of_time = sCmd.next(); String type = sCmd.next(); - if (period_of_time.indexOf("value") != -1) { + if (period_of_time.indexOf("digit") != -1) { + period_of_time = add_set(period_of_time); period_of_time = jsonRead(configJson, period_of_time); } diff --git a/Web_server.ino b/Web_server.ino index 0cb5a214..142472c8 100644 --- a/Web_server.ino +++ b/Web_server.ino @@ -219,4 +219,3 @@ void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventT } } #endif -//=================================================================================================================================== diff --git a/WiFi.ino b/WiFi.ino index 280b0dd2..86444523 100644 --- a/WiFi.ino +++ b/WiFi.ino @@ -73,19 +73,6 @@ void WIFI_init() { } bool StartAPMode() { - /* - Serial.println("WiFi up AP"); - IPAddress apIP(192, 168, 4, 1); - IPAddress staticGateway(192, 168, 4, 1); - IPAddress staticSubnet(255, 255, 255, 0); - WiFi.disconnect(); - WiFi.mode(WIFI_AP); - WiFi.softAPConfig(apIP, staticGateway, staticSubnet); - String _ssidAP = jsonRead(configSetup, "ssidAP"); - String _passwordAP = jsonRead(configSetup, "passwordAP"); - WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str()); - jsonWrite(configJson, "ip", apIP.toString()); - */ Serial.println("WiFi up AP"); WiFi.disconnect(); @@ -114,11 +101,19 @@ bool StartAPMode() { boolean RouterFind(String ssid) { int n = WiFi.scanComplete (); + Serial.println("n = " + String(n)); if (n == -2) { //Сканирование не было запущено, запускаем + Serial.println("[WIFI][i] scanning has not been triggered, starting scanning"); WiFi.scanNetworks (true, false); //async, show_hidden return false; } if (n == -1) { //Сканирование все еще выполняется + Serial.println("[WIFI][i] scanning still in progress"); + return false; + } + if (n == 0) { //Сканирование все еще выполняется + Serial.println("[WIFI][i] no any wifi sations, starting scanning"); + WiFi.scanNetworks (true, false); return false; } if (n > 0) { @@ -131,58 +126,16 @@ boolean RouterFind(String ssid) { Serial.print(")"); Serial.print(ssid); Serial.print("<=>"); - Serial.println(WiFi.SSID(i)); + if (i == n) { + Serial.print(WiFi.SSID(i)); + Serial.println("; "); + } else { + Serial.print(WiFi.SSID(i)); + Serial.print("; "); + } } } WiFi.scanDelete(); return false; } } - - -/* - boolean RouterFind(String ssid) { - - int n = WiFi.scanComplete(); - - Serial.print("status="); - Serial.println(n); - - if (n == -2) { //Сканирование не было запущено, запускаем - Serial.println("->enter to scanning function"); - WiFi.mode(WIFI_AP); - WiFi.scanNetworks (true, false, false, 5000); //async, show_hidden - Serial.println("->out of scanning function"); - return false; - - } - if (n == -1) { //Сканирование все еще выполняется - Serial.println("->scanning in progress"); - return false; - - } - if (n > 0) { //Найдено несколько сетей - for (int i = 0; i <= n; i++) { - if (WiFi.SSID(i) == ssid) { - Serial.println("router found"); - WiFi.scanDelete(); - return true; - } else { - Serial.print(i); - Serial.print(")"); - Serial.print(ssid); - Serial.print("<=>"); - Serial.println(WiFi.SSID(i)); - } - } - WiFi.scanDelete(); - Serial.println("->scanning deleted"); - return false; - } - } - - void wifi_reset() { - WiFi.mode(WIFI_STA); - WiFi.disconnect(true, true); - } -*/ diff --git a/data/config.all.txt b/data/config.all.txt index f92d39e9..8d361d0a 100644 --- a/data/config.all.txt +++ b/data/config.all.txt @@ -1,7 +1,8 @@ -inputNumber 1 Температура#максимальная moscow 60 1 -inputNumber 2 Температура#минимальная moscow 30 2 -inputText 1 Введите#текст moscow привет 3 -inputTime 1 Введите#время moscow 12.00 4 -inputDate 1 Введите#дату novorossiysk 10-01-2020 5 -button 1 na Включить#все Освещение 0 6 -analog Аналоговый#вход,#% Датчики progress-line 1 1024 1 1024 6 \ No newline at end of file +button 1 na Включить#все Освещение 0 1 +button 2 13 Прихожая Освещение 0 2 +button 3 14 Кухня Освещение 0 3 +pwm 1 3 Яркость#коредор: Освещение 1023 4 +pwm 2 4 Яркость#ванная: Освещение 510 5 +analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6 +button 4 na вкл:#>10,##выкл:#<10 Датчики 0 7 +inputDigit digit1 введите#число Датчики 10 8 \ No newline at end of file diff --git a/data/scenario.all.txt b/data/scenario.all.txt index b5f826c6..850fc65e 100644 --- a/data/scenario.all.txt +++ b/data/scenario.all.txt @@ -1,7 +1,16 @@ -inputNumber 1 Температура#максимальная moscow 60 1 -inputNumber 2 Температура#минимальная moscow 30 2 -inputText 1 Введите#текст moscow привет 3 -inputTime 1 Введите#время moscow 12.00 4 -inputDate 1 Введите#дату novorossiysk 10-01-2020 5 -button 1 na Включить#все Освещение 0 6 -analog Аналоговый#вход,#% Датчики progress-line 1 1024 1 1024 7 \ No newline at end of file +button1 = 1 +buttonSet 2 1 +buttonSet 3 1 +pwmSet 2 1024 +end +button1 = 0 +buttonSet 2 0 +buttonSet 3 0 +pwmSet 2 0 +end +analog > digit1 +buttonSet 4 1 +end +analog < digit1 +buttonSet 4 0 +end \ No newline at end of file diff --git a/data/vigets/old/viget.alertbg.json b/data/vigets/old/viget.alertbg.json deleted file mode 100644 index 13cd1cc7..00000000 --- a/data/vigets/old/viget.alertbg.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "id" : "", - "page" : "", - "widget" : "anydata", - "class1": "col-xs-4 text-center", - "class2": "stable", - "style2": "font-size:12px;float:center;", - "class3":"stable", - "style3": "font-size:25px;float:center;font-weight:bold;", - "descr" : "", - "topic" : "" - } diff --git a/data/vigets/old/viget.alertsm.json b/data/vigets/old/viget.alertsm.json deleted file mode 100644 index 4ad91aa1..00000000 --- a/data/vigets/old/viget.alertsm.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "id" : "", - "page" : "", - "widget" : "anydata", - "class1" : "item col-xs-12 text-center", - "class2": "ballanced", - "style2": "font-size:20px;float:left;font-weight:bold;", - "class3":"ballanced", - "style3": "font-size:17px;float:right;", - "descr" : "", - "topic" : "" - } diff --git a/data/vigets/old/viget.button.json b/data/vigets/old/viget.button.json deleted file mode 100644 index d94276c1..00000000 --- a/data/vigets/old/viget.button.json +++ /dev/null @@ -1,18 +0,0 @@ - { - "id": "", - "pageId":"", - "page": "", - "widget": "simple-btn", - "class1": "col-xs-4 text-center", - "class2": "ballanced", - "style2": "font-size:15px;float:left;font-weight:bold;", - "topic": "", - "class3": "button button-block", - "style3": "float:right;", - "widgetConfig": { - "fill": "#F5F5F5", - "fillPressed": "#4169E1", - "title": "-", - "delay":500 - } - } \ No newline at end of file diff --git a/data/vigets/old/viget.chart.json b/data/vigets/old/viget.chart.json deleted file mode 100644 index bb0ae087..00000000 --- a/data/vigets/old/viget.chart.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "id" : "", - "pageId": "", - "widget" : "chart", - "topic" : "", - "widgetConfig": { - - "maxCount": 200, - "type": "line", - "height": 200 - - } -} \ No newline at end of file diff --git a/data/vigets/old/viget.fillgauge.json b/data/vigets/old/viget.fillgauge.json deleted file mode 100644 index c434d0e1..00000000 --- a/data/vigets/old/viget.fillgauge.json +++ /dev/null @@ -1,23 +0,0 @@ - { - "id": "", - "page": "", - "pageId": "", - "widget": "fillgauge", - "descr": "", - "class2": "text-center ballanced", - "style2": "font-size:25px;font-weight:bold;padding-top:10px;padding-bottom:10px;", - "class3" : "text-center", - "style3": "padding-top:10px;padding-bottom:10px;", - "topic": "", - "width": "250px", - "height": "250px", - "widgetConfig": { - "circleColor": "#228B22", - "textColor": "#FFFFFF", - "waveTextColor": "#050000", - "waveColor": "#40E0D0", - "circleThickness": 0.05, - "textVertPosition": 0.5, - "waveAnimateTime": 500 - } - } \ No newline at end of file diff --git a/data/vigets/old/viget.gauge.json b/data/vigets/old/viget.gauge.json deleted file mode 100644 index 6c6c14e2..00000000 --- a/data/vigets/old/viget.gauge.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id" : "", - "pageId": "", - "widget" : "gauge", - "topic" : "", - "class1" : "item no-border no-padding text-center", - "descr" : "", - "widgetConfig" : { - "type" : "full", - "cap" : "round", - "append" : "", - "size" : 300, - "thick" : 20, - "maximum": 1024, - "color" : "#11c1f3", - "backgroundColor": "rgba(0,0,0, 0.2)" - } -} \ No newline at end of file diff --git a/data/vigets/old/viget.input_new.json b/data/vigets/old/viget.input_new.json deleted file mode 100644 index 3a2cc2ea..00000000 --- a/data/vigets/old/viget.input_new.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id" : "5", - "widget" : "input", - "topic" : "", - descr : "", - size : "small", - color : "orange", - type : "number", - status : 321 -} \ No newline at end of file diff --git a/data/vigets/old/viget.led.json b/data/vigets/old/viget.led.json deleted file mode 100644 index 6b392086..00000000 --- a/data/vigets/old/viget.led.json +++ /dev/null @@ -1,16 +0,0 @@ - { - "id": "", - "pageId": "", - "descr": "", - "class1": "col-xs-3 text-center", - "page": "", - "widget": "steel", - "topic": "", - "widgetConfig": { - "width": 60, - "height": 60, - "type": "Led", - "blink": false, - "LedColor": "RED_LED" - } - } diff --git a/data/vigets/old/viget.range.json b/data/vigets/old/viget.range.json deleted file mode 100644 index cf8a12a6..00000000 --- a/data/vigets/old/viget.range.json +++ /dev/null @@ -1,13 +0,0 @@ - { - "id": "", - "page": "", - "descr": "", - "widget": "range", - "class3": "ballanced", - "style3": "font-size:25px;float:left;font-weight:bold;", - "topic": "", - "widgetConfig": { - "maxValue": 1023, - "minValue": 0 - } - } diff --git a/data/vigets/old/viget.status.json b/data/vigets/old/viget.status.json deleted file mode 100644 index 618a05d2..00000000 --- a/data/vigets/old/viget.status.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "id" : "1", - "page" : "", - "pageId":"", - "widget" : "anydata", - "class1" : "item rounded text-center no-padding", - "class2": "ballanced", - "style2": "", - "class3":"ballanced", - "style3": "font-size:10px;float:right;", - "descr" : "", - "topic" : "" - } \ No newline at end of file diff --git a/data/vigets/old/viget.termometr.json b/data/vigets/old/viget.termometr.json deleted file mode 100644 index 0fed8f9d..00000000 --- a/data/vigets/old/viget.termometr.json +++ /dev/null @@ -1,15 +0,0 @@ - { - "id": "", - "page": "", - "pageId": "", - "widget": "steel", - "topic": "/DS", - "widgetConfig": { - "width": "auto", - "height": 150, - "type": "Linear", - "titleString": "Спальня", - "unitString": "°C", - "threshold": 30 - } - } \ No newline at end of file diff --git a/data/vigets/old/viget.toggle.json b/data/vigets/old/viget.toggle.json deleted file mode 100644 index cc554fb3..00000000 --- a/data/vigets/old/viget.toggle.json +++ /dev/null @@ -1,11 +0,0 @@ - { - "id": "", - "page": "", - "pageId": "", - "widget": "toggle", - "descrStyle": "font-size:20px;float:left;font-weight:bold;", - "descrStyleOff": "font-size:20px;float:left;", - "color": "#8997ff", - "descr": "", - "topic": "" - } \ No newline at end of file diff --git a/data/vigets/viget.inputNumber.json b/data/vigets/viget.inputNum.json similarity index 100% rename from data/vigets/viget.inputNumber.json rename to data/vigets/viget.inputNum.json diff --git a/data/vigets/viget.progressR.json b/data/vigets/viget.progressR.json index dfb29034..99bde43e 100644 --- a/data/vigets/viget.progressR.json +++ b/data/vigets/viget.progressR.json @@ -7,5 +7,6 @@ "color" : "#45ccce", "background": "#777", "before" : "", + "semicircle" : "1", "after" : "" } \ No newline at end of file diff --git a/data/vigets/viget.range.json b/data/vigets/viget.range.json index ce5f7cbd..4d1e0ff3 100644 --- a/data/vigets/viget.range.json +++ b/data/vigets/viget.range.json @@ -3,7 +3,7 @@ "descrColor": "red", "after" : "%", "k" : 0.0977, - "min" : 10, - "max" : 90, + "min" : 0, + "max" : 100, "debounce": 500 } \ No newline at end of file diff --git a/data/vigets/viget.toggle.json b/data/vigets/viget.toggle.json index 457b4747..08d501e6 100644 --- a/data/vigets/viget.toggle.json +++ b/data/vigets/viget.toggle.json @@ -1,6 +1,5 @@ { "widget" : "toggle", "icon" : "sunny", - "iconOff" : "moon", - + "iconOff" : "moon" } \ No newline at end of file diff --git a/esp32_iot-manager_modules_firmware.ino b/esp32_iot-manager_modules_firmware.ino index 74ee69bb..cf43c1e9 100644 --- a/esp32_iot-manager_modules_firmware.ino +++ b/esp32_iot-manager_modules_firmware.ino @@ -23,6 +23,7 @@ void setup() { #ifdef ESP8266 chipID = String( ESP.getChipId() ) + "-" + String( ESP.getFlashChipId()); jsonWrite(configSetup, "chipID", chipID); + Serial.setDebugOutput(0); #endif prex = prefix + "/" + chipID; diff --git a/mqtt.ino b/mqtt.ino index ec78768f..bcf1ffec 100644 --- a/mqtt.ino +++ b/mqtt.ino @@ -222,11 +222,12 @@ void sendAllWigets() { psn_2 = all_vigets.indexOf("\r\n", psn_1); line = all_vigets.substring(psn_1, psn_2); + line.replace("\n", ""); line.replace("\r\n", ""); //jsonWrite(line, "id", String(counter)); //jsonWrite(line, "pageId", String(counter)); counter++; - sendMQTT("config", line); + sendMQTT("config",line); Serial.println("[V] " + line); psn_1 = psn_2 + 1;