diff --git a/README.md b/README.md index c03eb37..7f96228 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,19 @@ It work's for me, but there's room for improvement. If you have an idea please o ![Home](doc/img/esp32-xy017.png) +## Fork Information + +This fork has the following changes: + + * Added support for Ethernet boards(In my case WT32-ETH01) + * Replaced debug function with functions from eModbus + * Cosmetic fixes for the WebUI + * Added support for different Serials objects + * Added support for less than 247 Modbus addresses + * Added support for a custom RTU timeout + * Better debug messages + + ## Screenshots ### Home diff --git a/doc/img/config.png b/doc/img/config.png index 38208e4..5fc4c5e 100644 Binary files a/doc/img/config.png and b/doc/img/config.png differ diff --git a/doc/img/debug.png b/doc/img/debug.png index 8a2e440..1c013c4 100644 Binary files a/doc/img/debug.png and b/doc/img/debug.png differ diff --git a/doc/img/status.png b/doc/img/status.png index 32b4754..96f8d9e 100644 Binary files a/doc/img/status.png and b/doc/img/status.png differ diff --git a/include/ModbusBridgeEthernet.h b/include/ModbusBridgeEthernet.h new file mode 100644 index 0000000..3a6102e --- /dev/null +++ b/include/ModbusBridgeEthernet.h @@ -0,0 +1,18 @@ +// ================================================================================================= +// Modified version of ModbusBridgeWiFi.h to user native Ethernet support +// ================================================================================================= +#ifndef _MODBUS_BRIDGE_ETHERNET_H +#define _MODBUS_BRIDGE_ETHERNET_H +#include "options.h" +#include + +#undef SERVER_END +#define SERVER_END server.end(); + +#include "ModbusServerTCPtemp.h" +#include "ModbusBridgeTemp.h" + +// Same name as ModBusBridgeWiFi +using ModbusBridgeWiFi = ModbusBridge>; + +#endif diff --git a/include/config.h b/include/config.h index 5ff8e51..64aad81 100644 --- a/include/config.h +++ b/include/config.h @@ -2,9 +2,15 @@ #define CONFIG_H #include #include - #define debugSerial Serial - #define modbusSerial Serial2 - #define DEBUG + #if !defined(DEBUG_SERIAL) + #define DEBUG_SERIAL Serial + #endif + #if !defined(MODBUS_SERIAL) + #define MODBUS_SERIAL Serial2 + #endif + #if !defined(MODBUS_MAX_ADDRESS) + #define MODBUS_MAX_ADDRESS 247 + #endif class Config{ private: @@ -14,6 +20,7 @@ unsigned long _modbusBaudRate; uint32_t _modbusConfig; int8_t _modbusRtsPin; + uint32_t _rtuTimeout; unsigned long _serialBaudRate; uint32_t _serialConfig; public: @@ -34,6 +41,8 @@ void setModbusStopBits(uint8_t value); int8_t getModbusRtsPin(); void setModbusRtsPin(int8_t value); + uint32_t getRtuTimeout(); + void setRtuTimeout(uint32_t value); uint32_t getSerialConfig(); unsigned long getSerialBaudRate(); void setSerialBaudRate(unsigned long value); @@ -44,11 +53,4 @@ uint8_t getSerialStopBits(); void setSerialStopBits(uint8_t value); }; - #ifdef DEBUG - #define dbg(x...) debugSerial.print(x); - #define dbgln(x...) debugSerial.println(x); - #else /* DEBUG */ - #define dbg(x...) ; - #define dbgln(x...) ; - #endif /* DEBUG */ #endif /* CONFIG_H */ \ No newline at end of file diff --git a/include/pages.h b/include/pages.h index 3fe2a58..e9ba1ed 100644 --- a/include/pages.h +++ b/include/pages.h @@ -1,15 +1,24 @@ #ifndef PAGES_H #define PAGES_H - #include + #if defined(ETHERNET) + #include + #include "ModbusBridgeEthernet.h" + #else + #include + #include + #endif #include - #include #include #include #include "config.h" #include "debug.h" + #if defined(ETHERNET) + void setupPages(AsyncWebServer* server, ModbusClientRTU *rtu, ModbusBridgeWiFi *bridge, Config *config); + #else void setupPages(AsyncWebServer* server, ModbusClientRTU *rtu, ModbusBridgeWiFi *bridge, Config *config, WiFiManager *wm); + #endif void sendResponseHeader(AsyncResponseStream *response, const char *title, bool inlineStyle = false); void sendResponseTrailer(AsyncResponseStream *response); void sendButton(AsyncResponseStream *response, const char *title, const char *action, const char *css = ""); diff --git a/platformio.ini b/platformio.ini index b30a580..eac5472 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,7 +9,7 @@ ; https://docs.platformio.org/page/projectconf.html [platformio] - default_envs = esp32debug + default_envs = esp32dev [env] platform = espressif32 @@ -22,20 +22,30 @@ build_flags = -Wall -Werror -DLOG_LEVEL=LOG_LEVEL_DEBUG monitor_speed = 115200 +[debug] + build_flags = -D DEBUG -DLOG_LEVEL=LOG_LEVEL_DEBUG ; -DDEBUG_SERIAL=Serial + +[release] + build_flags = -DLOG_LEVEL=LOG_LEVEL_WARN + [env:esp32release] board = esp32dev build_flags = ${env.build_flags} -[env:esp32debug] +[env:esp32dev] board = esp32dev - build_flags = ${env.build_flags} + build_flags = ${env.build_flags} ; ${release.build_flags} [env:olimex-poe] board = esp32-poe - build_flags = ${env.build_flags} -DRX_PIN=14 -DTX_PIN=5 + build_flags = ${env.build_flags} -DRX_PIN=14 -DTX_PIN=5 ; ${debug.build_flags} upload_port = COM9 monitor_port = COM9 [env:d1mini] board = wemos_d1_mini32 - build_flags = ${env.build_flags} + build_flags = ${env.build_flags} ; ${debug.build_flags} + +[env:wt32-eth01] + board = wt32-eth01 + build_flags = ${env.build_flags} -DETHERNET=1 -DRX_PIN=5 -DTX_PIN=17 -DMODBUS_MAX_ADDRESS=32 ; ${debug.build_flags} diff --git a/src/config.cpp b/src/config.cpp index 3c46754..6338a32 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -7,6 +7,7 @@ Config::Config() ,_modbusBaudRate(9600) ,_modbusConfig(SERIAL_8N1) ,_modbusRtsPin(-1) + ,_rtuTimeout(1000) ,_serialBaudRate(115200) ,_serialConfig(SERIAL_8N1) {} @@ -19,6 +20,7 @@ void Config::begin(Preferences *prefs) _modbusBaudRate = _prefs->getULong("modbusBaudRate", _modbusBaudRate); _modbusConfig = _prefs->getULong("modbusConfig", _modbusConfig); _modbusRtsPin = _prefs->getChar("modbusRtsPin", _modbusRtsPin); + _rtuTimeout = _prefs->getULong("rtuTimeout", _rtuTimeout); _serialBaudRate = _prefs->getULong("serialBaudRate", _serialBaudRate); _serialConfig = _prefs->getULong("serialConfig", _serialConfig); } @@ -104,6 +106,16 @@ void Config::setModbusRtsPin(int8_t value){ _prefs->putChar("modbusRtsPin", _modbusRtsPin); } +uint32_t Config::getRtuTimeout(){ + return _rtuTimeout; +} + +void Config::setRtuTimeout(uint32_t value){ + if (_rtuTimeout == value) return; + _rtuTimeout = value; + _prefs->putULong("rtuTimeout", _rtuTimeout); +} + uint32_t Config::getSerialConfig(){ return _serialConfig; } diff --git a/src/main.cpp b/src/main.cpp index 3eb7175..0b0e106 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,10 +1,15 @@ +#if defined(ETHERNET) +#include +#include "ModbusBridgeEthernet.h" +#else #include -#include #include +#include +#endif +#include #include #include #include -#include #include #include "config.h" #include "pages.h" @@ -14,53 +19,89 @@ Config config; Preferences prefs; ModbusClientRTU *MBclient; ModbusBridgeWiFi MBbridge; +#if !defined(ETHERNET) WiFiManager wm; +#endif + +#if defined(ETHERNET) +void setupNetwork() +{ + LOG_I("[Ethernet] Setup Network\n"); + ETH.begin(); + LOG_I("[Ethernet] Done\n"); +} +#else +void setupNetwork() +{ + LOG_I("[Wifi] Setup Network\n"); -void setup() { - debugSerial.begin(115200); - dbgln(); - dbgln("[config] load") - prefs.begin("modbusRtuGw"); - config.begin(&prefs); - debugSerial.end(); - debugSerial.begin(config.getSerialBaudRate(), config.getSerialConfig()); - dbgln("[wifi] start"); WiFi.mode(WIFI_STA); wm.setClass("invert"); auto reboot = false; - wm.setAPCallback([&reboot](WiFiManager *wifiManager){reboot = true;}); + wm.setAPCallback([&reboot](WiFiManager *wifiManager){ reboot = true; }); wm.autoConnect(); - if (reboot){ + if (reboot) + { ESP.restart(); } - dbgln("[wifi] finished"); - dbgln("[modbus] start"); + LOG_I("[Wifi] Done\n"); +} +#endif + +void setup() +{ +#if !defined(DEBUG) MBUlogLvl = LOG_LEVEL_WARNING; - RTUutils::prepareHardwareSerial(modbusSerial); +#endif + + LOGDEVICE = &(DEBUG_SERIAL); + + DEBUG_SERIAL.begin(115200); + + LOG_I("[Config] Loading\n"); + + // Load preferences + prefs.begin("modbusRtuGw"); + config.begin(&prefs); + + // Reset Debug Serial based on the configuration + DEBUG_SERIAL.flush(); + DEBUG_SERIAL.begin(config.getSerialBaudRate(), config.getSerialConfig()); + + LOG_I("[Config] Done\n"); + + setupNetwork(); + + LOG_I("[Modbus] Setup\n"); + + RTUutils::prepareHardwareSerial(MODBUS_SERIAL); #if defined(RX_PIN) && defined(TX_PIN) - // use rx and tx-pins if defined in platformio.ini - modbusSerial.begin(config.getModbusBaudRate(), config.getModbusConfig(), RX_PIN, TX_PIN ); - dbgln("Use user defined RX/TX pins"); + LOG_I("[Modbus] Using provided RX(%d)/TX(%d) pins\n", RX_PIN, TX_PIN); + MODBUS_SERIAL.begin(config.getModbusBaudRate(), config.getModbusConfig(), RX_PIN, TX_PIN); #else - // otherwise use default pins for hardware-serial2 - modbusSerial.begin(config.getModbusBaudRate(), config.getModbusConfig()); + LOG_I("[Modbus] Using default RX/TX pins\n"); + MODBUS_SERIAL.begin(config.getModbusBaudRate(), config.getModbusConfig()); #endif MBclient = new ModbusClientRTU(config.getModbusRtsPin()); - MBclient->setTimeout(1000); - MBclient->begin(modbusSerial, 1); - for (uint8_t i = 1; i < 248; i++) + MBclient->setTimeout(config.getRtuTimeout()); + MBclient->begin(MODBUS_SERIAL, 1); + for (uint8_t i = 1; i <= MODBUS_MAX_ADDRESS; i++) { MBbridge.attachServer(i, i, ANY_FUNCTION_CODE, MBclient); - } + } MBbridge.start(config.getTcpPort(), 10, config.getTcpTimeout()); - dbgln("[modbus] finished"); + LOG_I("[Modbus] Done\n"); + + LOG_I("[WebServer] Setup\n"); +#if defined(ETHERNET) + setupPages(&webServer, MBclient, &MBbridge, &config); +#else setupPages(&webServer, MBclient, &MBbridge, &config, &wm); +#endif webServer.begin(); - dbgln("[setup] finished"); + LOG_I("[WebServer] Done\n"); } -void loop() { - // put your main code here, to run repeatedly: -} \ No newline at end of file +void loop() {} diff --git a/src/pages.cpp b/src/pages.cpp index 1c7e17d..fae1d07 100644 --- a/src/pages.cpp +++ b/src/pages.cpp @@ -1,37 +1,53 @@ #include "pages.h" + #define ETAG "\"" __DATE__ "" __TIME__ "\"" +#if defined(ETHERNET) +void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi *bridge, Config *config){ +#else void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi *bridge, Config *config, WiFiManager *wm){ +#endif server->on("/", HTTP_GET, [](AsyncWebServerRequest *request){ - dbgln("[webserver] GET /"); + LOG_D("[webserver] GET /\n"); auto *response = request->beginResponseStream("text/html"); sendResponseHeader(response, "Main"); sendButton(response, "Status", "status"); sendButton(response, "Config", "config"); sendButton(response, "Debug", "debug"); sendButton(response, "Firmware update", "update"); +#if !defined(ETHERNET) sendButton(response, "WiFi reset", "wifi", "r"); +#endif sendButton(response, "Reboot", "reboot", "r"); sendResponseTrailer(response); request->send(response); }); server->on("/status", HTTP_GET, [rtu, bridge](AsyncWebServerRequest *request){ - dbgln("[webserver] GET /status"); + LOG_D("[Webserver] GET /status\n"); auto *response = request->beginResponseStream("text/html"); sendResponseHeader(response, "Status"); response->print(""); // show ESP infos... sendTableRow(response, "ESP Uptime (sec)", esp_timer_get_time() / 1000000); + response->print(""); +#if defined(ETHERNET) + sendTableRow(response, "ESP Full Duplex", ETH.fullDuplex()); + sendTableRow(response, "ESP Link Speed", ETH.linkSpeed()); + sendTableRow(response, "ESP MAC", ETH.macAddress()); + sendTableRow(response, "ESP IP", ETH.localIP().toString() ); +#else sendTableRow(response, "ESP SSID", WiFi.SSID()); sendTableRow(response, "ESP RSSI", WiFi.RSSI()); sendTableRow(response, "ESP WiFi Quality", WiFiQuality(WiFi.RSSI())); sendTableRow(response, "ESP MAC", WiFi.macAddress()); sendTableRow(response, "ESP IP", WiFi.localIP().toString() ); - +#endif + response->print(""); sendTableRow(response, "RTU Messages", rtu->getMessageCount()); sendTableRow(response, "RTU Pending Messages", rtu->pendingRequests()); sendTableRow(response, "RTU Errors", rtu->getErrorCount()); + response->print(""); sendTableRow(response, "Bridge Message", bridge->getMessageCount()); sendTableRow(response, "Bridge Clients", bridge->activeClients()); sendTableRow(response, "Bridge Errors", bridge->getErrorCount()); @@ -43,7 +59,7 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * request->send(response); }); server->on("/reboot", HTTP_GET, [](AsyncWebServerRequest *request){ - dbgln("[webserver] GET /reboot"); + LOG_D("[Webserver] GET /reboot\n"); auto *response = request->beginResponseStream("text/html"); sendResponseHeader(response, "Really?"); sendButton(response, "Back", "/"); @@ -54,14 +70,14 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * request->send(response); }); server->on("/reboot", HTTP_POST, [](AsyncWebServerRequest *request){ - dbgln("[webserver] POST /reboot"); + LOG_D("[Webserver] POST /reboot\n"); request->redirect("/"); - dbgln("[webserver] rebooting...") + LOG_D("[Webserver] rebooting..."); ESP.restart(); - dbgln("[webserver] rebooted...") + LOG_D("[Webserver] rebooted..."); }); server->on("/config", HTTP_GET, [config](AsyncWebServerRequest *request){ - dbgln("[webserver] GET /config"); + LOG_D("[Webserver] GET /config\n"); auto *response = request->beginResponseStream("text/html"); sendResponseHeader(response, "Modbus TCP"); response->print(""); @@ -82,9 +98,9 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * response->printf("", config->getTcpTimeout()); response->print("" "" - "
 
 
 
" - "

Modbus RTU

" - "" + "" + "" + "" "" "" "" - "

Modbus RTU

" "" @@ -148,9 +164,17 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * "" "
" - "

Serial (Debug)

" - "" + "" + "" + "" + "" + "" + "" + "" "" "" "" - "
" + "" + ""); + response->printf("", config->getRtuTimeout()); + response->print("

Serial (Debug)

" "" @@ -191,7 +215,8 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * "" "
"); + "" + "

"); response->print("" "" "

"); @@ -207,66 +232,71 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * request->send(response); }); server->on("/config", HTTP_POST, [config](AsyncWebServerRequest *request){ - dbgln("[webserver] POST /config"); + LOG_D("[Webserver] POST /config\n"); if (request->hasParam("tp", true)){ auto port = request->getParam("tp", true)->value().toInt(); config->setTcpPort(port); - dbgln("[webserver] saved port"); + LOG_D("[Webserver] Saved TCP Port: %ld\n", port); } if (request->hasParam("tt", true)){ - auto timeout = request->getParam("tt", true)->value().toInt(); - config->setTcpTimeout(timeout); - dbgln("[webserver] saved timeout"); + auto tcpTimeout = request->getParam("tt", true)->value().toInt(); + config->setTcpTimeout(tcpTimeout); + LOG_D("[Webserver] Saved TCP Timeout: %ld\n", tcpTimeout); } if (request->hasParam("mb", true)){ auto baud = request->getParam("mb", true)->value().toInt(); config->setModbusBaudRate(baud); - dbgln("[webserver] saved modbus baud rate"); + LOG_D("[Webserver] Saved Modbus Baud rate: %ld\n", baud); } if (request->hasParam("md", true)){ auto data = request->getParam("md", true)->value().toInt(); config->setModbusDataBits(data); - dbgln("[webserver] saved modbus data bits"); + LOG_D("[Webserver] Saved Modbus Data bits: %ld\n", data); } if (request->hasParam("mp", true)){ auto parity = request->getParam("mp", true)->value().toInt(); config->setModbusParity(parity); - dbgln("[webserver] saved modbus parity"); + LOG_D("[Webserver] Saved Modbus Parity: %ld\n", parity); } if (request->hasParam("ms", true)){ auto stop = request->getParam("ms", true)->value().toInt(); config->setModbusStopBits(stop); - dbgln("[webserver] saved modbus stop bits"); + LOG_D("[Webserver] Saved Modbus Stop bits: %ld\n", stop); } if (request->hasParam("mr", true)){ auto rts = request->getParam("mr", true)->value().toInt(); config->setModbusRtsPin(rts); - dbgln("[webserver] saved modbus rts pin"); + LOG_D("[Webserver] Saved Modbus RTS pin: %ld\n", rts); + } + if (request->hasParam("rt", true)){ + auto rtuTimeout = request->getParam("rt", true)->value().toInt(); + config->setRtuTimeout(rtuTimeout); + LOG_D("[Webserver] Saved RTU Timeout: %ld\n", rtuTimeout); } if (request->hasParam("sb", true)){ auto baud = request->getParam("sb", true)->value().toInt(); config->setSerialBaudRate(baud); - dbgln("[webserver] saved serial baud rate"); + LOG_D("[Webserver] Saved Debug Serial Baud rate: %ld\n", baud); } if (request->hasParam("sd", true)){ auto data = request->getParam("sd", true)->value().toInt(); config->setSerialDataBits(data); - dbgln("[webserver] saved serial data bits"); + LOG_D("[Webserver] Saved Debug Serial Data bits: %ld\n", data); } if (request->hasParam("sp", true)){ auto parity = request->getParam("sp", true)->value().toInt(); config->setSerialParity(parity); - dbgln("[webserver] saved serial parity"); + LOG_D("[Webserver] Saved Debug Serial Parity: %ld\n", parity); } if (request->hasParam("ss", true)){ auto stop = request->getParam("ss", true)->value().toInt(); config->setSerialStopBits(stop); - dbgln("[webserver] saved serial stop bits"); + LOG_D("[Webserver] Saved Debug Serial Stop bits: %ld\n", stop); } request->redirect("/"); }); server->on("/debug", HTTP_GET, [](AsyncWebServerRequest *request){ - dbgln("[webserver] GET /debug"); + LOG_D("[Webserver] GET /debug\n"); auto *response = request->beginResponseStream("text/html"); sendResponseHeader(response, "Debug"); sendDebugForm(response, "1", "1", "3", "1"); @@ -275,7 +305,7 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * request->send(response); }); server->on("/debug", HTTP_POST, [rtu](AsyncWebServerRequest *request){ - dbgln("[webserver] POST /debug"); + LOG_D("[Webserver] POST /debug\n"); String slaveId = "1"; if (request->hasParam("slave", true)){ slaveId = request->getParam("slave", true)->value(); @@ -294,7 +324,7 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * } auto *response = request->beginResponseStream("text/html"); sendResponseHeader(response, "Debug"); - response->print("
");
+    response->print("
");
     auto previous = LOGDEVICE;
     auto previousLevel = MBUlogLvl;
     auto debug = WebPrint(previous, response);
@@ -303,19 +333,19 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi *
     ModbusMessage answer = rtu->syncRequest(0xdeadbeef, slaveId.toInt(), func.toInt(), reg.toInt(), count.toInt());
     MBUlogLvl = previousLevel;
     LOGDEVICE = previous;
-    response->print("
"); + response->print("
"); auto error = answer.getError(); if (error == SUCCESS){ auto count = answer[2]; - response->print("Answer: 0x"); + response->print("

Answer: 0x"); for (size_t i = 0; i < count; i++) { response->printf("%02x", answer[i + 3]); } - response->print(""); + response->print("

"); } else{ - response->printf("Error: %#02x (%s)", error, ErrorName(error).c_str()); + response->printf("

Error: %#02x (%s)

", error, ErrorName(error).c_str()); } sendDebugForm(response, slaveId, reg, func, count); sendButton(response, "Back", "/"); @@ -323,7 +353,7 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * request->send(response); }); server->on("/update", HTTP_GET, [](AsyncWebServerRequest *request){ - dbgln("[webserver] GET /update"); + LOG_D("[Webserver] GET /update\n"); auto *response = request->beginResponseStream("text/html"); sendResponseHeader(response, "Firmware Update"); response->print("
" @@ -340,13 +370,14 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * request->onDisconnect([](){ ESP.restart(); }); - dbgln("[webserver] OTA finished"); - if (Update.hasError()){ + LOG_D("[Webserver] OTA finished\n"); + if (Update.hasError()) { auto *response = request->beginResponse(500, "text/plain", "Ota failed"); response->addHeader("Connection", "close"); request->send(response); } - else{ + else + { auto *response = request->beginResponseStream("text/html"); response->addHeader("Connection", "close"); sendResponseHeader(response, "Firmware Update", true); @@ -356,7 +387,15 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * request->send(response); } }, [&](AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final){ - dbg("[webserver] OTA progress ");dbgln(index); + static size_t lastIndex = 0; + if(index == 0) { + lastIndex = 0; + } + if(index - lastIndex > 32 * 1024) + { + lastIndex = index; + LOG_D("[webserver] OTA progress %d\n", index); + } if (!index) { //TODO add MD5 Checksum and Update.setMD5 int cmd = (filename == "filesystem") ? U_SPIFFS : U_FLASH; @@ -380,8 +419,9 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * return; } }); +#if !defined(ETHERNET) server->on("/wifi", HTTP_GET, [](AsyncWebServerRequest *request){ - dbgln("[webserver] GET /wifi"); + LOG_D("[Webserver] GET /wifi\n"); auto *response = request->beginResponseStream("text/html"); sendResponseHeader(response, "WiFi reset"); response->print("

" @@ -397,16 +437,17 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * request->send(response); }); server->on("/wifi", HTTP_POST, [wm](AsyncWebServerRequest *request){ - dbgln("[webserver] POST /wifi"); + LOG_D("[Webserver] POST /wifi\n"); request->redirect("/"); wm->erase(); - dbgln("[webserver] erased wifi config"); - dbgln("[webserver] rebooting..."); + LOG_D("[Webserver] erased wifi config\n"); + LOG_D("[Webserver] rebooting...\n"); ESP.restart(); - dbgln("[webserver] rebooted..."); + LOG_D("[Webserver] rebooted...\n"); }); +#endif server->on("/favicon.ico", [](AsyncWebServerRequest *request){ - dbgln("[webserver] GET /favicon.ico"); + LOG_D("[Webserver] GET /favicon.ico\n"); request->send(204);//TODO add favicon }); server->on("/style.css", [](AsyncWebServerRequest *request){ @@ -417,7 +458,7 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * return; } } - dbgln("[webserver] GET /style.css"); + LOG_D("[Webserver] GET /style.css\n"); auto *response = request->beginResponseStream("text/css"); sendMinCss(response); response->print( @@ -439,13 +480,15 @@ void setupPages(AsyncWebServer *server, ModbusClientRTU *rtu, ModbusBridgeWiFi * "}" "pre{" "text-align:left;" + "width:max-content;" + "margin:auto;" "}" ); response->addHeader("ETag", ETAG); request->send(response); }); server->onNotFound([](AsyncWebServerRequest *request){ - dbg("[webserver] request to ");dbg(request->url());dbgln(" not found"); + LOG_D("[webserver] request to %s not found\n", request->url().c_str()); request->send(404, "text/plain", "404"); }); } @@ -474,7 +517,11 @@ void sendMinCss(AsyncResponseStream *response){ "}" "button:hover{" "background: #0e70a4;" - "}"); + "}" + "table>tr>td>h3{" + "text-align: center;" + "}" + ); } void sendResponseHeader(AsyncResponseStream *response, const char *title, bool inlineStyle){ @@ -568,7 +615,8 @@ void sendDebugForm(AsyncResponseStream *response, String slaveId, String reg, St response->printf("", count.c_str()); response->print("" "" - ""); + "" + "

"); response->print("" "
" "

");