From 5fcb68ac651f5af59cf76eb34a3c9d925e490722 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Tue, 17 Mar 2020 17:54:57 +0100 Subject: [PATCH] some change --- Cmd.ino | 7 +- data/configs/stepper.scenario.txt | 8 +- data/configuration.json | 227 ++++++------ data/css/build.css.gz | Bin 15178 -> 15178 bytes data/edit.htm | 572 ------------------------------ data/index.htm | 75 ---- data/index.htm.gz | Bin 1190 -> 1227 bytes data/index.json | 193 +++++----- data/index.json.gz | Bin 708 -> 0 bytes data/js/build.chart.js.gz | Bin 12758 -> 12758 bytes data/js/function.js.gz | Bin 18027 -> 18057 bytes data/lang/lang.ru.json.gz | Bin 0 -> 395 bytes data/robots.txt | 2 + main.ino | 11 +- mqtt.ino | 2 +- set.h | 2 +- 16 files changed, 227 insertions(+), 872 deletions(-) delete mode 100644 data/edit.htm delete mode 100644 data/index.htm delete mode 100644 data/index.json.gz create mode 100644 data/lang/lang.ru.json.gz create mode 100644 data/robots.txt diff --git a/Cmd.ino b/Cmd.ino index f22dc3e0..09c8b340 100644 --- a/Cmd.ino +++ b/Cmd.ino @@ -189,6 +189,7 @@ void pwm() { jsonWrite(optionJson, "pwm_pin" + pwm_number, pwm_pin); pinMode(pwm_pin_int, INPUT); analogWrite(pwm_pin_int, start_state.toInt()); + //analogWriteFreq(32000); jsonWrite(configJson, "pwmSet" + pwm_number, start_state); createViget (viget_name, page_name, page_number, "vigets/viget.range.json", "pwmSet" + pwm_number); @@ -355,7 +356,7 @@ void stepperSet() { if (steps.toInt() < 0) digitalWrite(pin_dir.toInt(), LOW); if (stepper_number == "1") { ts.add(STEPPER1, stepper_speed.toInt(), [&](void*) { - int steps_int = abs(jsonReadtoInt(optionJson, "steps1")); + int steps_int = abs(jsonReadtoInt(optionJson, "steps1") * 2); static int count; count++; String pin_step = selectToMarker (jsonRead(optionJson, "stepper1"), " "); @@ -367,9 +368,9 @@ void stepperSet() { } }, nullptr, true); } - if (stepper_number == "2") { + if (stepper_number == "2") { ts.add(STEPPER2, stepper_speed.toInt(), [&](void*) { - int steps_int = abs(jsonReadtoInt(optionJson, "steps2")); + int steps_int = abs(jsonReadtoInt(optionJson, "steps2") * 2); static int count; count++; String pin_step = selectToMarker (jsonRead(optionJson, "stepper2"), " "); diff --git a/data/configs/stepper.scenario.txt b/data/configs/stepper.scenario.txt index 89f9e3dd..16e7cfa6 100644 --- a/data/configs/stepper.scenario.txt +++ b/data/configs/stepper.scenario.txt @@ -1,12 +1,12 @@ button1 = 1 -stepperSet 1 200 5 +stepperSet 1 200 1 end button1 = 0 -stepperSet 1 -200 5 +stepperSet 1 -200 1 end button2 = 1 -stepperSet 2 200 5 +stepperSet 2 200 1 end button2 = 0 -stepperSet 2 -200 5 +stepperSet 2 -200 1 end \ No newline at end of file diff --git a/data/configuration.json b/data/configuration.json index 6ad2b5a7..9f6d00c7 100644 --- a/data/configuration.json +++ b/data/configuration.json @@ -1,116 +1,113 @@ { - "configs": [ - - "/config.live.json", - "/config.setup.json", - "/config.option.json" - - ], - "class":"col-sm-offset-1 col-sm-10", - "content": [ - { - "type": "h5", - "title": "{{SSDP}}", - "class":"alert-warning" - }, -{ - "type": "h4", - "title": "Device ID: {{chipID}}" - }, -{ - "type": "h4", - "title": "IP address: {{ip}}" - }, -{ - "type": "h4", - "title": "Uptime: {{uptime}}" - }, - { - "type": "hr" - }, - - { - "type":"dropdown", - "name":"help-url", - "class":"btn btn-warning btn-lg", - "style":"display:inline", - "title": { - "#":"Выбирите то, во что Вы хотите превратить ESP ", - "/relay":"1.Вкл. выкл. локального реле", - "/relay_timer":"2.Вкл. выкл. локального реле в определенное время", - "/relay_countdown":"3.Вкл. выкл. локального реле на определенный период времени", - "/relay_several":"4.Вкл. выкл. нескольких локальных реле кнопкой в приложении", - "/relay_switch":"5.Вкл. выкл. локального реле физической кнопкой (кнопка так же дублируется в приложении)", - "/relay_button_remote":"6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)", - "/relay_switch_remote":"7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)", - "/pwm":"8.Широтно импульсная модуляция", - "/dht11":"9.Сенсор DHT11", - "/dht22":"10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03", - "/analog":"11.Аналоговый сенсор", - "/dallas":"12.Сенсор DS18B20", - "/termostat":"13.Термостат на DS18B20 с переключением в ручной режим", - "/level":"14.Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 (управление насосом)", - "/moution_relay":"15.Датчик движения включающий свет", - "/moution_security":"16.Охранный датчик движения", - "/stepper":"17.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)", - "/default":"Настройки по умолчанию" - } - }, -{ - "type": "h2", - "title": "Конфигурация устройства" - }, - { - "type":"file", - "state":"firmware.config.txt", - "style":"width:100%;height:400px", - "title": "Сохранить", - "action": "/all_modules_init", - "class":"btn btn-block btn-success" - }, - { - "type": "link", - "title": "Инструкция", - "action": "https://github.com/DmitryBorisenko33/esp8266_iot-manager_modules_firmware/wiki/Instruction", - "class": "btn btn-block btn-primary" - }, -{ - "type": "h2", - "title": "Сценарии" - }, -{ -"type": "checkbox", -"name":"scenario", -"title": "Включить сценарии", -"action": "/scenario?status=[[scenario]]", -"state": "{{scenario}}" -}, -{ - "type": "h6", - "title": "" - }, -{ - "type":"file", - "state":"firmware.scenario.txt", - "style":"width:100%;height:400px", - "title": "Сохранить и включить", - "action": "/scenario?status=1", - "class":"btn btn-block btn-success" - }, -{ - "type": "hr" - }, - { - "type": "link", - "title": "Очистить все логи", - "action": "/cleanlog", - "class": "btn btn-block btn-success" - }, - { - "type": "link", - "title": "Главная", - "action": "/page.htm?index", - "class": "btn btn-block btn-danger btn-sm" - } - ] -} + "configs": [ + "/config.live.json", + "/config.setup.json", + "/config.option.json" + ], + "class": "col-sm-offset-1 col-sm-10", + "content": [ + { + "type": "h5", + "title": "{{SSDP}}", + "class": "alert-warning" + }, + { + "type": "h4", + "title": "Device ID: {{chipID}}" + }, + { + "type": "h4", + "title": "IP address: {{ip}}" + }, + { + "type": "h4", + "title": "Uptime: {{uptime}}" + }, + { + "type": "hr" + }, + { + "type": "dropdown", + "name": "help-url", + "class": "btn btn-warning btn-lg", + "style": "display:inline", + "title": { + "#": "Выбирите то, во что Вы хотите превратить ESP ", + "/relay": "1.Вкл. выкл. локального реле", + "/relay_timer": "2.Вкл. выкл. локального реле в определенное время", + "/relay_countdown": "3.Вкл. выкл. локального реле на определенный период времени", + "/relay_several": "4.Вкл. выкл. нескольких локальных реле кнопкой в приложении", + "/relay_switch": "5.Вкл. выкл. локального реле физической кнопкой (кнопка так же дублируется в приложении)", + "/relay_button_remote": "6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)", + "/relay_switch_remote": "7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)", + "/pwm": "8.Широтно импульсная модуляция", + "/dht11": "9.Сенсор DHT11", + "/dht22": "10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03", + "/analog": "11.Аналоговый сенсор", + "/dallas": "12.Сенсор DS18B20", + "/termostat": "13.Термостат на DS18B20 с переключением в ручной режим", + "/level": "14.Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 (управление насосом)", + "/moution_relay": "15.Датчик движения включающий свет", + "/moution_security": "16.Охранный датчик движения", + "/stepper": "17.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)", + "/default": "Настройки по умолчанию" + } + }, + { + "type": "h2", + "title": "Конфигурация устройства" + }, + { + "type": "file", + "state": "firmware.config.txt", + "style": "width:100%;height:400px", + "title": "Сохранить", + "action": "/all_modules_init", + "class": "btn btn-block btn-success" + }, + { + "type": "link", + "title": "Инструкция", + "action": "https://github.com/DmitryBorisenko33/esp8266_iot-manager_modules_firmware/wiki/Instruction", + "class": "btn btn-block btn-primary" + }, + { + "type": "h2", + "title": "Сценарии" + }, + { + "type": "checkbox", + "name": "scenario", + "title": "Включить сценарии", + "action": "/scenario?status=[[scenario]]", + "state": "{{scenario}}" + }, + { + "type": "h6", + "title": "" + }, + { + "type": "file", + "state": "firmware.scenario.txt", + "style": "width:100%;height:400px", + "title": "Сохранить и включить", + "action": "/scenario?status=1", + "class": "btn btn-block btn-success" + }, + { + "type": "hr" + }, + { + "type": "link", + "title": "Очистить все логи", + "action": "/cleanlog", + "class": "btn btn-block btn-success" + }, + { + "type": "link", + "title": "Главная", + "action": "/page.htm?index", + "class": "btn btn-block btn-danger btn-sm" + } + ] +} \ No newline at end of file diff --git a/data/css/build.css.gz b/data/css/build.css.gz index a37a1ac123c1881512fe8e657783fa726e30939e..ad0b46d2dd7c81d7ec7a341d8e9042d58fb8a3df 100644 GIT binary patch delta 16 XcmX?AcB+hBzMF$%3VYs0c4un delta 16 XcmX?AcB+hBzMF$%?T_q@?9SEzJbwm= diff --git a/data/edit.htm b/data/edit.htm deleted file mode 100644 index 5e2f46ce..00000000 --- a/data/edit.htm +++ /dev/null @@ -1,572 +0,0 @@ - - - - ESP Editor - - - - - - -
-
-
- - - - diff --git a/data/index.htm b/data/index.htm deleted file mode 100644 index f48e3673..00000000 --- a/data/index.htm +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - -
- - -
- - - - -
- - diff --git a/data/index.htm.gz b/data/index.htm.gz index 618ee19a856d1c5d4ca8d49043d71558fde5c921..dda5d5daa5f11ba1f9efea8bb2ca3a147247b308 100644 GIT binary patch literal 1227 zcmV;+1T^~}iwFn~^le@M18Ht#Wq2-VbZr2oR{xLNG!*~6e}$I`(rQi8ogu%z`kHN%EeW52SZ`yE~RvRiW{VZ!fv&I)H@XQSe= zr*o-HQW?Umsz=aD?6HDwAvy%jUalaEy^PlQ8rr|chE5bK4M`ybMYKv{?@mXXit#i= zk0!j+&+GX&;rt@Jn9VP}6ArHhvWglLT}lVA%#nl60ZfO<1(ayr;jzoe`C;0G1rs5j z*kTcUsk16+lk>UwTekF&sQ=D~Ejgo&qGg|u&o$zt z8s#poL8||Oo~#myVNyIy|1jOIj0G*MrJBLMv_;q}-aSiA9;aX{4g&Wwwf)Hqqdd?F z_1?il1<<6UnPWG$8H$F?YwOGRf!d zLFea${hWcE=^?`TYye{j2#sX62|;~?6_5IP{2v50peZp_ZE=#VH=K&yaEf-QP zp3Y|0L|bc*-9r&jeO$kiW}Pt(YkkxPifGSv%nlD^F!q}3jJ(6WUh(C?OILlaj!>hm zC2UvQf>Z(RWHYG>$B2>~DcHfWD(wZN?Y+m+pKV``T?%T-E0{KofZgg(Y`7(Gp5%a> zWt401&LpFZn*^=D2Z;uyq&f+8c^VYe#)x36WK|MeZMaN!E%Ri>L}_o#v!D~vRgwUX z(l!llZY{o=ebIx3v#yuv{uIG;?Cn#uvH#k3857$u4E-fu<-?Aj5}#n(lSbNm>ufiZ zZc`Z}#p8HWDz>&xAA_rD4L!IxDlLL*`*EP-c0^iUs2lehs7mrsR~vf+S=8gXt=y6` z8`_utJn4 literal 1190 zcmV;X1X=qZiwFoC#3Wt-18Ht#Wq2-VbZr2wR$Fh|HWYsMuV7Vdve8JggAL1UDIJis zTekuWlA^^{6b3CFS&S)BBPlt~u>U?D>SD<&GIZFB&C9ub=Q|fFe0Kfo)w|zrUXe`a z{BjaDeP)p#7OyR*Nzl+C;)7j*XX;>O# zx?Bdqe!urc5px#rd|pqkM4@S{mxL9mARnpzL5 zI`KRkdJdXeeGmSqSRFYS02JEO2B|~hW*0dc9&~`jtw@|vsX#}SPQ44qTH&nNnW%W= zs7y#5SDG-R>JYRNIV`7J2p+uVER&E%PD*Rs`sSyxp<>BOO%g~!5+&ovxmUraVm$HD zqxSFB%X;yhzc}~L=Zg!c$KkXX!hrADk& zquj+cO7*|clU7BnnJ7-vKTfwTj3#t@_f)yU_S&;~w6I{@QM5GI9 zIwODLJuwy3Hr~`tnN-@HS;fE5=`qkSXlGWq5y`@sA1K)_3n*;L5fG9m>>3U+X)N;Bz|d0<%bvuS{-O+ih01!t}$5Zl6?nQ%+s zJk9_)ODR|297#qQ+j6bHlSG4*LiR#ko<>Er(S^5_qACflHeAHJmU$AgqBKv_QP7I0 zDvkkXR+|PpAeP_EzZ$^8p)$zyuwC)qbn7wN$bDkq>x8%%(_O(0vIRCW5YP&YYtzqg0?u*XS3)ja)_}fPlje;UsOY;o@O0N-vP5&9j zI2~sHY}%>6>=sLxVTZW0)*zB8wp$LZV&72x@sP~{k#{!g&k{*bNyN{y6AI6f!lu8T zH(VN??8I&gj&$3|={pHs5-rHh)v%Fzy}p@_jdVJJCdacdXr_7?G+(HH0}APQ5xEKg E0D>hsF8}}l diff --git a/data/index.json b/data/index.json index 4e8857fb..b7a656be 100644 --- a/data/index.json +++ b/data/index.json @@ -1,101 +1,96 @@ { - "configs": [ - "/config.live.json", - "/config.setup.json" - ], - - "socket": [ - "ws://{{ip}}/ws" - ], - - "title": "Главная", - "class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6", - "content": [ - { - "type": "h5", - "title": "{{SSDP}}", - "class": "alert-warning" - }, - { - "type": "h4", - "title": "Device ID: {{chipID}}" - }, - { - "type": "h4", - "title": "IP address: {{ip}}" - }, - { - "type": "h4", - "title": "Uptime: {{uptime}}" - }, - { - "type": "h4", - "title": "Build version: {{firmware_version}}" - }, - { - "type": "h4", - "title": "SPIFFS version: 2.3+" - }, - { - "type": "hr" - }, - { - "type": "link", - "title": "Конфигурация устройства", - "action": "/page.htm?configuration", - "class": "btn btn-block btn-primary" - }, - { - "type": "hr" - }, - { - "type": "link", - "title": "Конфигурация WIFI", - "action": "/page.htm?setup", - "class": "btn btn-block btn-success" - }, - { - "type": "link", - "title": "Конфигурация MQTT", - "action": "/page.htm?mqtt", - "class": "btn btn-block btn-success" - }, - { - "type": "link", - "title": "Конфигурация push", - "action": "/page.htm?pushingbox", - "class": "btn btn-block btn-success" - }, - { - "type": "hr" - }, - { - "type":"h3", - "name":"my-block", - "style":"position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;", - "class":"hidden" - }, - { - "type": "button", - "title":"Обновить прошивку", - "action": "/upgrade", - "response":"[[my-block]]", - "class": "btn btn-block btn-success" - }, - { - "type": "hr" - }, - { - "type": "link", - "title": "Скачать приложение IoT Manager для android", - "action": "https://play.google.com/store/apps/details?id=ru.esp8266.iotmanager", - "class": "btn btn-block btn-warning" - }, - { - "type": "link", - "title": "Скачать приложение IoT Manager для iphone", - "action": "https://apps.apple.com/ru/app/iot-manager/id1155934877", - "class": "btn btn-block btn-warning" - } - ] + "configs": [ + "/config.live.json", + "/config.setup.json" + ], + "title": "Главная", + "class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6", + "content": [ + { + "type": "h5", + "title": "{{SSDP}}", + "class": "alert-warning" + }, + { + "type": "h4", + "title": "Device ID: {{chipID}}" + }, + { + "type": "h4", + "title": "IP address: {{ip}}" + }, + { + "type": "h4", + "title": "Uptime: {{uptime}}" + }, + { + "type": "h4", + "title": "Build version: {{firmware_version}}" + }, + { + "type": "h4", + "title": "SPIFFS version: 2.3+" + }, + { + "type": "hr" + }, + { + "type": "link", + "title": "Конфигурация устройства", + "action": "/page.htm?configuration", + "class": "btn btn-block btn-primary" + }, + { + "type": "hr" + }, + { + "type": "link", + "title": "Конфигурация WIFI", + "action": "/page.htm?setup", + "class": "btn btn-block btn-success" + }, + { + "type": "link", + "title": "Конфигурация MQTT", + "action": "/page.htm?mqtt", + "class": "btn btn-block btn-success" + }, + { + "type": "link", + "title": "Конфигурация push", + "action": "/page.htm?pushingbox", + "class": "btn btn-block btn-success" + }, + { + "type": "hr" + }, + { + "type": "h3", + "name": "my-block", + "style": "position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;", + "class": "hidden" + }, + { + "type": "button", + "title": "Обновить прошивку", + "action": "/upgrade", + "response": "[[my-block]]", + "class": "btn btn-block btn-success" + }, + { + "type": "hr" + }, + { + "type": "link", + "title": "Скачать приложение IoT Manager для android", + "action": "https://play.google.com/store/apps/details?id=ru.esp8266.iotmanager", + "class": "btn btn-block btn-warning" + }, + { + "type": "link", + "title": "Скачать приложение IoT Manager для iphone", + "action": "https://apps.apple.com/ru/app/iot-manager/id1155934877", + "class": "btn btn-block btn-warning" + } + ] } diff --git a/data/index.json.gz b/data/index.json.gz deleted file mode 100644 index 5f590a7ff7dbd96210cb373fc76746dcc7539541..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 708 zcmV;#0z3U5iwFpHNhMwY18Ht#Wq2-Xb8l_{ja1!E8bK7k=PAa$F-?Ij*cwaxxoFeG zrZv`>rj0RX!C6>YcFFD_Y>bIWYA>|yO|P0XP1+Yw>*@*uuQ2mQJ!ggmh5lVIJLhN4 z_kDBDu$LfO!F5cl=xe!+1R+{lw+*K#m$X+)@A$5xCCFwH5}Czps^!SW9wxG&3WmmL zgK0_WP+^UK<~@EU4tS67K5Q@fDeu7doS%wAaWVzv_GP_-ZTJ8S1niVwNx7!!QC3|lD);k9U~AcBTc%~x zEkE!Xt>|^DY)vonD_ILf&FjYEA9YR8{|;Sj6QqUwy1?*f+~5v~xEi^-ka?{LV=|aZ zQOIv5>DTM^bl}!lEl;I}s%-?e<+CMR7FJ)(t~_5~Y2sSzAK&m@2Xr*}hGi4jeT#yW$0j32UL zQ;!k3rs{_0SWa=+g^5NG&9tL}rB~1pom0*zMF$%Dtq2W_Vb1SHlhXg delta 16 XcmcbXd@Y$>zMF$%?T_q@?B@*uJmCiX diff --git a/data/js/function.js.gz b/data/js/function.js.gz index 3ab843f3868f592f63768cb4090d897b594851e5..0dd356e1d8e50705437204e9fcdf37465dbc9cd6 100644 GIT binary patch literal 18057 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ͼ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 diff --git a/data/lang/lang.ru.json.gz b/data/lang/lang.ru.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..e49a5826ef18270a978a19591a9ac85ec6b92ef5 GIT binary patch literal 395 zcmV;60d)Q!iwFob&?H^}18iY#XD)JeE^2dcZU9x0%}T>S6ovPFijuW0hd=%OOn z2aq97(?B~ZNi2#8X{&-Lx>N+M;scoe(P`4gSGf0$yfd{)y2$39Z_YjE=BiLMPEDuX z=E67jjZ&!uKQPA!h#-M6eTyRAKnM$nNi%i`uQ6d&c-J<$M=#(V!Xiu{CTI*R9N<$* z9d~@&5#FxCzTp=G&BQQ+6-bz+T%G&AEv!Aoz0uAUt&}h!FM5G@An`e64=-4|)8Yyp zk}P2fGYoQ8=8@9AXh~Ggk~A86Jl4(PY%bR0tzn&Y`Pw7FTOFF>Vjmw<;(!U0w-ob% zeU*TSFjcFz=R5ADl3%e$K%#=?I@BC?Mtv3VLhcg`Z~$}45SGhX=DOqh|CCA+kdY*# zM5hgNjhSmU^^J!lO6)605%p01+ik17)!EoD pDan0Kt8mY@#QKI3rrF#P%;%d|Q~Hf6d1Mr>3xCTn4$E@_0049LyEy;= literal 0 HcmV?d00001 diff --git a/data/robots.txt b/data/robots.txt new file mode 100644 index 00000000..13375629 --- /dev/null +++ b/data/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: * \ No newline at end of file diff --git a/main.ino b/main.ino index fceb78a5..300184a7 100644 --- a/main.ino +++ b/main.ino @@ -278,7 +278,7 @@ void getMemoryLoad(String text) { //esp32 full memory = 362868 k bytes //esp8266 full memory = 53312 k bytes -/* + void web_print (String text) { if (WiFi.status() == WL_CONNECTED) { jsonWrite(json, "test1", jsonRead(json, "test2")); @@ -292,8 +292,15 @@ void web_print (String text) { ws.textAll(json); } } +/* + { + "type": "h4", + "title": "('{{build2}}'=='{{firmware_version}}'?'NEW':'OLD')" + }, +*/ - { +/* + { "type": "hr" }, { diff --git a/mqtt.ino b/mqtt.ino index 72cacc2b..c95bb818 100644 --- a/mqtt.ino +++ b/mqtt.ino @@ -51,7 +51,7 @@ void MQTT_init() { Serial.println("[V] WiFi-ok"); if (client.connected()) { Serial.println("[V] MQTT-ok"); - //web_print("MQTT-ok"); + web_print("MQTT-ok"); } else { MQTT_Connecting(); mqtt_lost_error++; diff --git a/set.h b/set.h index b9669606..6f233976 100644 --- a/set.h +++ b/set.h @@ -1,4 +1,4 @@ -String firmware_version = "2.3+"; +String firmware_version = "2.3.1"; String new_version; //#define OTA_enable