From 135d844a57c42d21fb74f24e27984da8ec31af5b Mon Sep 17 00:00:00 2001 From: Paul Date: Sat, 9 Nov 2019 15:19:48 +0100 Subject: [PATCH] added static IP support - https://github.com/proddy/EMS-ESP/issues/231 --- CHANGELOG.md | 1 + src/MyESP.cpp | 56 ++++++++++++++++++++++++++++--------- src/MyESP.h | 6 +++- src/custom.htm | 2 +- src/version.h | 2 +- src/websrc/myesp.htm | 55 ++++++++++++++++++++++++++++-------- src/websrc/myesp.js | 51 +++++++++------------------------ tools/wsemulator/wserver.js | 13 ++++++--- 8 files changed, 117 insertions(+), 69 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7ce26930..366310c8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ There are breaking changes in this release. See `publish_time` below and make su - Added build scripts for automated CI with TravisCI - Implemented timezone support and automatic adjustment, also taking daylight saving times into account - Added `kick` command to reset core services like NTP, Web, Web Sockets +- Added WiFi static IP (setting done in WebUI only) ### Fixed diff --git a/src/MyESP.cpp b/src/MyESP.cpp index c32617c89..e1ee69d81 100644 --- a/src/MyESP.cpp +++ b/src/MyESP.cpp @@ -77,9 +77,13 @@ MyESP::MyESP() { _mqtt_will_offline_payload = strdup(MQTT_WILL_OFFLINE_PAYLOAD); // network - _network_password = nullptr; - _network_ssid = nullptr; - _network_wmode = 1; // default AP + _network_password = nullptr; + _network_ssid = nullptr; + _network_wmode = 1; // default AP + _network_staticip = nullptr; + _network_gatewayip = nullptr; + _network_nmask = nullptr; + _network_dnsip = nullptr; _wifi_callback_f = nullptr; _wifi_connected = false; @@ -530,11 +534,19 @@ void MyESP::_wifi_setup() { jw.enableAP(false); } - jw.enableAPFallback(true); // AP mode only as fallback - jw.enableSTA(true); // Enable STA mode (connecting to a router) - jw.enableScan(false); // Configure it to not scan available networks and connect in order of dBm - jw.cleanNetworks(); // Clean existing network configuration - jw.addNetwork(_network_ssid, _network_password); // Add a network + jw.enableAPFallback(true); // AP mode only as fallback + jw.enableSTA(true); // Enable STA mode (connecting to a router) + jw.enableScan(false); // Configure it to not scan available networks and connect in order of dBm + jw.cleanNetworks(); // Clean existing network configuration + + if (_hasValue(_network_staticip)) { +#if MYESP_DEBUG + myDebug_P(PSTR("[WIFI] Using fixed IP")); +#endif + jw.addNetwork(_network_ssid, _network_password, _network_staticip, _network_gatewayip, _network_nmask, _network_dnsip); // fixed IP + } else { + jw.addNetwork(_network_ssid, _network_password); // use DHCP + } } // set the callback function for the OTA onstart @@ -698,7 +710,7 @@ void MyESP::_consoleShowHelp() { myDebug_P(PSTR("*")); myDebug_P(PSTR("* Commands:")); myDebug_P(PSTR("* ?/help=show commands, CTRL-D/quit=close telnet session")); - myDebug_P(PSTR("* set, system, restart, mqttlog, kick")); + myDebug_P(PSTR("* set, system, restart, mqttlog, kick, save")); #ifdef CRASH myDebug_P(PSTR("* crash ")); @@ -772,6 +784,9 @@ void MyESP::_printSetCommands() { } } myDebug_P(PSTR("")); + if (_hasValue(_network_staticip)) { + myDebug_P(PSTR(" wifi_staticip=%s"), _network_staticip); + } myDebug_P(PSTR(" mqtt_enabled=%s"), (_mqtt_enabled) ? "on" : "off"); if (_hasValue(_mqtt_ip)) { myDebug_P(PSTR(" mqtt_ip=%s"), _mqtt_ip); @@ -1025,6 +1040,13 @@ void MyESP::_telnetCommand(char * commandLine) { return; } + // save everything + if ((strcmp(ptrToCommandName, "save") == 0) && (wc == 1)) { + _fs_writeConfig(); + _fs_createCustomConfig(); + return; + } + // show system stats if ((strcmp(ptrToCommandName, "quit") == 0) && (wc == 1)) { myDebug_P(PSTR("[TELNET] exiting telnet session")); @@ -1793,6 +1815,10 @@ bool MyESP::_fs_loadConfig() { _network_ssid = strdup(network["ssid"] | ""); _network_password = strdup(network["password"] | ""); _network_wmode = network["wmode"]; // 0 is client, 1 is AP + _network_staticip = strdup(network["staticip"] | ""); + _network_gatewayip = strdup(network["gatewayip"] | ""); + _network_nmask = strdup(network["nmask"] | ""); + _network_dnsip = strdup(network["dnsip"] | ""); JsonObject general = doc["general"]; _general_password = strdup(general["password"] | MYESP_HTTP_PASSWORD); @@ -2020,10 +2046,14 @@ bool MyESP::_fs_writeConfig() { root["command"] = "configfile"; // header, important! - JsonObject network = doc.createNestedObject("network"); - network["ssid"] = _network_ssid; - network["password"] = _network_password; - network["wmode"] = _network_wmode; + JsonObject network = doc.createNestedObject("network"); + network["ssid"] = _network_ssid; + network["password"] = _network_password; + network["wmode"] = _network_wmode; + network["staticip"] = _network_staticip; + network["gatewayip"] = _network_gatewayip; + network["nmask"] = _network_nmask; + network["dnsip"] = _network_dnsip; JsonObject general = doc.createNestedObject("general"); general["password"] = _general_password; diff --git a/src/MyESP.h b/src/MyESP.h index b2738bcd2..c014b4c7f 100644 --- a/src/MyESP.h +++ b/src/MyESP.h @@ -9,7 +9,7 @@ #ifndef MyESP_h #define MyESP_h -#define MYESP_VERSION "1.2.18" +#define MYESP_VERSION "1.2.19" #include #include @@ -367,6 +367,10 @@ class MyESP { char * _network_ssid; char * _network_password; uint8_t _network_wmode; + char * _network_staticip; + char * _network_gatewayip; + char * _network_nmask; + char * _network_dnsip; bool _wifi_connected; String _getESPhostname(); diff --git a/src/custom.htm b/src/custom.htm index 0f4d2abdf..5bef5d84f 100644 --- a/src/custom.htm +++ b/src/custom.htm @@ -257,6 +257,6 @@
- +
\ No newline at end of file diff --git a/src/version.h b/src/version.h index 99a0cd1d7..5ede72e09 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define APP_VERSION "1.9.4b9" +#define APP_VERSION "1.9.4b10" diff --git a/src/websrc/myesp.htm b/src/websrc/myesp.htm index 32d5a397d..33617f7f0 100644 --- a/src/websrc/myesp.htm +++ b/src/websrc/myesp.htm @@ -308,10 +308,10 @@ -