From 167f45e630be5f7375a7387314900d020b547ef5 Mon Sep 17 00:00:00 2001 From: fvanroie Date: Sat, 25 Jan 2020 01:47:49 +0100 Subject: [PATCH] Save Settings to flash --- platformio.ini | 2 +- src/hasp.cpp | 20 ++-- src/hasp_config.cpp | 4 +- src/hasp_http.cpp | 231 +++++++++++++++++++------------------------- src/hasp_mqtt.cpp | 132 ++++++++++++++++++------- src/hasp_mqtt.h | 4 +- src/hasp_wifi.cpp | 102 ++++++++++++++----- src/hasp_wifi.h | 3 + 8 files changed, 299 insertions(+), 199 deletions(-) diff --git a/platformio.ini b/platformio.ini index 86ec71c5..04a929e7 100644 --- a/platformio.ini +++ b/platformio.ini @@ -121,7 +121,7 @@ build_flags = -D TFT_SCLK=14 ;D5 -D TFT_DC=15 ;D8 -D TFT_CS=16 ;D0 - -D TFT_BCKL=5 ;D1 + -D TFT_BCKL=5 ;D1 -D TFT_RST=-1 ;RST -D TOUCH_CS=0 ;D3 (can also be D1 or D4) -D SPI_FREQUENCY=40000000 diff --git a/src/hasp.cpp b/src/hasp.cpp index 323a0981..5549bd4b 100644 --- a/src/hasp.cpp +++ b/src/hasp.cpp @@ -24,6 +24,7 @@ #include "hasp_debug.h" #include "hasp_config.h" #include "hasp_mqtt.h" +#include "hasp_wifi.h" #include "hasp_gui.h" #include "hasp_tft.h" #include "hasp.h" @@ -83,12 +84,15 @@ static const char * btnm_map2[] = {"0", "1", "\n", "2", "3", "\n", "4", "5", "\n", "6", "7", "\n", "P1", "P2", "P3", ""}; */ +static lv_font_t * haspFonts[6]; #if defined(ARDUINO_ARCH_ESP8266) -lv_obj_t * pages[4]; -// lv_style_t styles[6]; +static lv_obj_t * pages[4]; +static lv_style_t labelStyles[6]; +static lv_style_t rollerStyles[6]; #else -lv_obj_t * pages[12]; -// lv_style_t styles[20]; +static lv_obj_t * pages[12]; +static lv_style_t labelStyles[6]; +static lv_style_t rollerStyles[6]; #endif uint16_t current_page = 0; // uint16_t current_style = 0; @@ -1019,10 +1023,12 @@ void haspReset() { mqttStop(); // Stop the MQTT Client first configWriteConfig(); - debugPrintln(F("HASP: Reboot MCU")); debugStop(); - delay(1000); - ESP.restart(); // nextionReset(); + delay(250); + wifiStop(); + debugPrintln(F("HASP: Properly Rebooting the MCU now!")); + debugPrintln(F("-------------------------------------")); + ESP.restart(); delay(5000); } diff --git a/src/hasp_config.cpp b/src/hasp_config.cpp index f92ec296..7c344ea1 100644 --- a/src/hasp_config.cpp +++ b/src/hasp_config.cpp @@ -112,10 +112,10 @@ void configWriteConfig() changed |= haspGetConfig(settings[F("hasp")].to()); // changed |= httpGetConfig(settings[F("http")].to()); // changed |= mdnsGetConfig(settings[F("mdns")].to()); - // changed |= mqttGetConfig(settings[F("mqtt")].to()); + changed |= mqttGetConfig(settings[F("mqtt")].to()); // changed |= otaGetConfig(settings[F("ota")].to()); // changed |= tftGetConfig(settings[F("tft")].to()); - // changed |= wifiGetConfig(settings[F("wifi")].to()); + changed |= wifiGetConfig(settings[F("wifi")].to()); if(changed) { File file = SPIFFS.open(HASP_CONFIG_FILE, "w"); diff --git a/src/hasp_http.cpp b/src/hasp_http.cpp index 41ac2b6a..7ab16064 100644 --- a/src/hasp_http.cpp +++ b/src/hasp_http.cpp @@ -246,6 +246,26 @@ void webHandleRoot() webServer.sendContent_P(HTTP_END); // 20 } +//////////////////////////////////////////////////////////////////////////////////////////////////// +void httpHandleReboot() +{ // http://plate01/reboot + if(!httpIsAuthenticated(F("/reboot"))) return; + + String nodename = haspGetNodename(); + String httpMessage = F("Rebooting Device"); + webSendPage(nodename, httpMessage.length(), true); + webServer.sendContent(httpMessage); // len + webServer.sendContent_P(HTTP_END); // 20 + delay(500); + + debugPrintln(PSTR("HTTP: Reboot device")); + haspSetPage(0); + haspSetAttr(F("p[0].b[1].txt"), F("\"Rebooting...\"")); + + delay(500); + haspReset(); +} + //////////////////////////////////////////////////////////////////////////////////////////////////// void webHandleAbout() { // http://plate01/about @@ -603,27 +623,28 @@ void webHandleConfig() if(webServer.method() == HTTP_POST) { if(webServer.hasArg(F("save"))) { + DynamicJsonDocument settings(256); + for(int i = 0; i < webServer.args(); i++) settings[webServer.argName(i)] = webServer.arg(i); if(webServer.arg(F("save")) == String(F("hasp"))) { - /* - if(webServer.hasArg(F_CONFIG_THEME) settings[F_CONFIG_THEME] = webServer.arg(F_CONFIG_THEME).toInt(); - if(webServer.hasArg(F_CONFIG_HUE) settings[F_CONFIG_HUE] = webServer.arg(F_CONFIG_HUE.toInt(); - if(webServer.hasArg(F_CONFIG_ZIFONT) settings[F_CONFIG_ZIFONT] = webServer.arg(F_CONFIG_ZIFONT; - if(webServer.hasArg(F_CONFIG_PAGES) settings[F_CONFIG_PAGES] = webServer.arg(F_CONFIG_PAGES; - if(webServer.hasArg(F_CONFIG_STARTPAGE) - settings[F_CONFIG_STARTPAGE] = webServer.arg(F_CONFIG_STARTPAGE).toInt();*/ - for(int i = 0; i < webServer.args(); i++) settings[webServer.argName(i)] = webServer.arg(i); - haspSetConfig(settings.as()); } else if(webServer.arg(F("save")) == String(F("mqtt"))) { + mqttSetConfig(settings.as()); + } else if(webServer.arg(F("save")) == String(F("http"))) { + } else if(webServer.arg(F("save")) == String(F("wifi"))) { + wifiSetConfig(settings.as()); } } } + if(WiFi.getMode() == WIFI_AP) { + httpHandleReboot(); + } + char buffer[64]; String nodename = haspGetNodename(); String httpMessage((char *)0); @@ -666,101 +687,68 @@ void webHandleMqttConfig() { // http://plate01/config/mqtt if(!httpIsAuthenticated(F("/config/mqtt"))) return; + DynamicJsonDocument settings(256); + mqttGetConfig(settings.to()); + char buffer[64]; String nodename = haspGetNodename(); String httpMessage((char *)0); httpMessage.reserve(1024); - httpMessage += String(F("
")); - httpMessage += String(F("WiFi SSID (required)"; - httpMessage += String(F("
WiFi Password (required)"; - httpMessage += - F("

HASP Node Name (required. lowercase letters, numbers, and _ only)" - ""; - httpMessage += F("

Group Name (required)"; - httpMessage += F("

MQTT Broker (required)"; - httpMessage += F("
MQTT Port (required)"; - httpMessage += F("
MQTT User (optional)"; - httpMessage += F("
MQTT Password (optional)

HASP Admin Username (optional)"; - httpMessage += - String(F("
HASP Admin Password (optional)

Motion Sensor Pin: ")); - - httpMessage += String(F("
Serial debug output enabled:
Telnet debug output enabled:
mDNS enabled:")); - /*if (mdnsEnabled) - { - httpMessage += String(F(" checked='checked'")); - } - httpMessage += String(F(">

")); - - if (updateEspAvailable) - { - httpMessage += String(F("

HASP Update - available!

")); httpMessage += String(F("
")); - httpMessage += String(F(""; httpMessage += String(F("
")); - }*/ - - httpMessage += F(""); - - httpMessage += F("

"); + httpMessage += String(F("
")); + httpMessage += F("HASP Node Name (required. lowercase letters, numbers, and _ only)" + "

Group Name (required)

MQTT Broker (required)
MQTT Port (required)
MQTT User (optional)
MQTT Password (optional)
"); + httpMessage += F("
"); + + webSendPage(nodename, httpMessage.length(), false); + webServer.sendContent(httpMessage); // len + webServer.sendContent_P(HTTP_END); // 20 +} +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////// +#if LV_USE_HASP_WIFI > 0 +void webHandleWifiConfig() +{ // http://plate01/config/wifi + if(!httpIsAuthenticated(F("/config/wifi"))) return; + + DynamicJsonDocument settings(256); + wifiGetConfig(settings.to()); + + char buffer[64]; + String nodename = haspGetNodename(); + String httpMessage((char *)0); + httpMessage.reserve(1024); + + httpMessage += String(F("
")); + httpMessage += String(F("WiFi SSID (required)
WiFi Password (required)
"); httpMessage += F("
"); webSendPage(nodename, httpMessage.length(), false); @@ -770,7 +758,6 @@ void webHandleMqttConfig() #endif //////////////////////////////////////////////////////////////////////////////////////////////////// -#if LV_USE_HASP_MQTT > 0 void webHandleHaspConfig() { // http://plate01/config/http if(!httpIsAuthenticated(F("/config/hasp"))) return; @@ -863,7 +850,7 @@ void webHandleHaspConfig() webServer.sendContent(httpMessage); // len webServer.sendContent_P(HTTP_END); // 20 } -#endif + //////////////////////////////////////////////////////////////////////////////////////////////////// void httpHandleNotFound() { // webServer 404 @@ -922,26 +909,6 @@ void httpHandleEspFirmware() // espStartOta(webServer.arg("espFirmware")); } -//////////////////////////////////////////////////////////////////////////////////////////////////// -void httpHandleReboot() -{ // http://plate01/reboot - if(!httpIsAuthenticated(F("/reboot"))) return; - - String nodename = haspGetNodename(); - String httpMessage = F("Rebooting Device"); - webSendPage(nodename, httpMessage.length(), true); - webServer.sendContent(httpMessage); // len - webServer.sendContent_P(HTTP_END); // 20 - delay(500); - - debugPrintln(PSTR("HTTP: Reboot device")); - haspSetPage(0); - haspSetAttr(F("p[0].b[1].txt"), F("\"Rebooting...\"")); - - delay(500); - haspReset(); -} - //////////////////////////////////////////////////////////////////////////////////////////////////// void httpHandleResetConfig() { // http://plate01/resetConfig @@ -1022,6 +989,9 @@ void httpSetup(const JsonObject & settings) webServer.on(F("/config/hasp"), webHandleHaspConfig); #if LV_USE_HASP_MQTT > 0 webServer.on(F("/config/mqtt"), webHandleMqttConfig); +#endif +#if LV_USE_HASP_WIFI > 0 + webServer.on(F("/config/wifi"), webHandleWifiConfig); #endif webServer.on(F("/saveConfig"), webHandleSaveConfig); webServer.on(F("/resetConfig"), httpHandleResetConfig); @@ -1036,9 +1006,16 @@ void httpReconnect() { if(!httpEnable) return; + if(WiFi.getMode() == WIFI_AP) { + webServer.on(F("/"), webHandleWifiConfig); + webServer.on(F("/config"), webHandleConfig); + webServer.onNotFound(webHandleWifiConfig); + } + webServer.stop(); webServer.begin(); - debugPrintln(String(F("HTTP: Server started @ http://")) + WiFi.localIP().toString()); + debugPrintln(String(F("HTTP: Server started @ http://")) + + (WiFi.getMode() == WIFI_AP ? WiFi.softAPIP().toString() : WiFi.localIP().toString())); } //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1050,14 +1027,10 @@ void httpLoop(bool wifiIsConnected) //////////////////////////////////////////////////////////////////////////////////////////////////// bool httpGetConfig(const JsonObject & settings) { - if(!settings.isNull() && settings[F_HTTP_ENABLE] == httpEnable && settings[F_HTTP_PORT] == httpPort && - settings[F_HTTP_USER] == httpUser && settings[F_HTTP_PASS] == httpPassword) - return false; - - settings[F_HTTP_ENABLE] = httpEnable; - settings[F_HTTP_PORT] = httpPort; - settings[F_HTTP_USER] = httpUser; - settings[F_HTTP_PASS] = httpPassword; + settings[FPSTR(F_HTTP_ENABLE)] = httpEnable; + settings[FPSTR(F_HTTP_PORT)] = httpPort; + settings[FPSTR(F_HTTP_USER)] = httpUser; + settings[FPSTR(F_HTTP_PASS)] = httpPassword; size_t size = serializeJson(settings, Serial); Serial.println(); diff --git a/src/hasp_mqtt.cpp b/src/hasp_mqtt.cpp index f0cdd117..15338f50 100644 --- a/src/hasp_mqtt.cpp +++ b/src/hasp_mqtt.cpp @@ -42,15 +42,31 @@ String mqttLightBrightStateTopic; // MQTT topic for outgoing panel backlight d String mqttNodeTopic; String mqttGroupTopic; +bool mqttEnabled; //////////////////////////////////////////////////////////////////////////////////////////////////// // These defaults may be overwritten with values saved by the web interface -char mqttServer[64] = MQTT_HOST; -uint16_t mqttPort = MQTT_PORT; -char mqttUser[32] = MQTT_USER; -char mqttPassword[32] = MQTT_PASSW; -// char haspNode[16] = "plate01"; -String mqttGroupName = "plates"; +#ifdef MQTT_HOST +std::string mqttServer = MQTT_HOST; +#else +std::string mqttServer = ""; +#endif +#ifdef MQTT_PORT +uint16_t mqttPort = MQTT_PORT; +#else +uint16_t mqttPort = 1883; +#endif +#ifdef MQTT_USER +std::string mqttUser = MQTT_USER; +#else +std::string mqttUser = ""; +#endif +#ifdef MQTT_PASSW +std::string mqttPassword = MQTT_PASSW; +#else +std::string mqttPassword = ""; +#endif +std::string mqttGroupName = "plates"; /* const String mqttCommandSubscription = mqttCommandTopic + "/#"; @@ -278,12 +294,13 @@ void mqttReconnect() mqttGroupTopic = topicBuffer; // haspSetPage(0); - debugPrintln(String(F("MQTT: Attempting connection to broker ")) + String(mqttServer) + String(F(" as clientID ")) + - mqttClientId); + debugPrintln(String(F("MQTT: Attempting connection to broker ")) + String(mqttServer.c_str()) + + String(F(" as clientID ")) + mqttClientId); // Attempt to connect and set LWT and Clean Session sprintf_P(topicBuffer, PSTR("%sstatus"), mqttNodeTopic.c_str()); - if(!mqttClient.connect(mqttClientId.c_str(), mqttUser, mqttPassword, topicBuffer, 0, false, "OFF", true)) { + if(!mqttClient.connect(mqttClientId.c_str(), mqttUser.c_str(), mqttPassword.c_str(), topicBuffer, 0, false, "OFF", + true)) { // Retry until we give up and restart after connectTimeout seconds mqttReconnectCount++; @@ -353,28 +370,19 @@ void mqttReconnect() void mqttSetup(const JsonObject & settings) { - if(!settings[F_CONFIG_HOST].isNull()) { - strcpy(mqttServer, settings[F_CONFIG_HOST]); - } - if(!settings[F_CONFIG_PORT].isNull()) { - mqttPort = settings[F_CONFIG_PORT]; - } - if(!settings[F_CONFIG_USER].isNull()) { - strcpy(mqttUser, settings[F_CONFIG_USER]); - } - if(!settings[F_CONFIG_PASS].isNull()) { - strcpy(mqttPassword, settings[F_CONFIG_PASS]); - } - if(!settings[F_CONFIG_GROUP].isNull()) { - mqttGroupName = settings[F_CONFIG_GROUP].as(); - } + mqttSetConfig(settings); - mqttClient.setServer(mqttServer, 1883); + mqttEnabled = mqttServer != "" && mqttPort > 0; + if(!mqttEnabled) return; + + mqttClient.setServer(mqttServer.c_str(), 1883); mqttClient.setCallback(mqttCallback); } void mqttLoop(bool wifiIsConnected) { + if(!mqttEnabled) return; + if(wifiIsConnected && !mqttClient.connected()) mqttReconnect(); else @@ -404,19 +412,71 @@ void mqttStop() bool mqttGetConfig(const JsonObject & settings) { - if(!settings.isNull() && settings[F_CONFIG_HOST] == mqttServer && settings[F_CONFIG_PORT] == mqttPort && - settings[F_CONFIG_USER] == mqttUser && settings[F_CONFIG_PASS] == mqttPassword && - settings[F_CONFIG_GROUP] == mqttGroupName) - return false; - - settings[F_CONFIG_GROUP] = mqttGroupName; - settings[F_CONFIG_HOST] = mqttServer; - settings[F_CONFIG_PORT] = mqttPort; - settings[F_CONFIG_USER] = mqttUser; - settings[F_CONFIG_PASS] = mqttPassword; + settings[FPSTR(F_CONFIG_GROUP)] = String(mqttGroupName.c_str()); + settings[FPSTR(F_CONFIG_HOST)] = String(mqttServer.c_str()); + settings[FPSTR(F_CONFIG_PORT)] = mqttPort; + settings[FPSTR(F_CONFIG_USER)] = String(mqttUser.c_str()); + settings[FPSTR(F_CONFIG_PASS)] = String(mqttPassword.c_str()); size_t size = serializeJson(settings, Serial); Serial.println(); return true; -} \ No newline at end of file +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +bool mqttSetConfig(const JsonObject & settings) +{ + bool changed = false; + + if(!settings[FPSTR(F_CONFIG_GROUP)].isNull()) { + if(mqttGroupName != settings[FPSTR(F_CONFIG_GROUP)].as().c_str()) { + debugPrintln(F("mqttGroupName changed")); + } + changed |= mqttGroupName != settings[FPSTR(F_CONFIG_GROUP)].as().c_str(); + + mqttGroupName = settings[FPSTR(F_CONFIG_GROUP)].as().c_str(); + } + + if(!settings[FPSTR(F_CONFIG_HOST)].isNull()) { + if(mqttServer != settings[FPSTR(F_CONFIG_HOST)].as().c_str()) { + debugPrintln(F("mqttServer changed")); + } + changed |= mqttServer != settings[FPSTR(F_CONFIG_HOST)].as().c_str(); + + mqttServer = settings[FPSTR(F_CONFIG_HOST)].as().c_str(); + } + + if(!settings[FPSTR(F_CONFIG_PORT)].isNull()) { + if(mqttPort != settings[FPSTR(F_CONFIG_PORT)].as()) { + debugPrintln(F("mqttPort changed")); + } + changed |= mqttPort != settings[FPSTR(F_CONFIG_PORT)].as(); + + mqttPort = settings[FPSTR(F_CONFIG_PORT)].as(); + } + + if(!settings[FPSTR(F_CONFIG_USER)].isNull()) { + if(mqttUser != settings[FPSTR(F_CONFIG_USER)].as().c_str()) { + debugPrintln(F("mqttUser changed")); + } + changed |= mqttUser != settings[FPSTR(F_CONFIG_USER)].as().c_str(); + + mqttUser = settings[FPSTR(F_CONFIG_USER)].as().c_str(); + } + + if(!settings[FPSTR(F_CONFIG_PASS)].isNull()) { + if(mqttPassword != settings[FPSTR(F_CONFIG_PASS)].as().c_str()) { + debugPrintln(F("mqttPassword changed")); + } + changed |= mqttPassword != settings[FPSTR(F_CONFIG_PASS)].as().c_str(); + + mqttPassword = settings[FPSTR(F_CONFIG_PASS)].as().c_str(); + } + + size_t size = serializeJson(settings, Serial); + Serial.println(); + + return changed; +} diff --git a/src/hasp_mqtt.h b/src/hasp_mqtt.h index 8e121343..e788613b 100644 --- a/src/hasp_mqtt.h +++ b/src/hasp_mqtt.h @@ -7,7 +7,6 @@ void mqttSetup(const JsonObject & settings); void mqttLoop(bool wifiIsConnected); void mqttStop(); void mqttReconnect(); -bool mqttGetConfig(const JsonObject & settings); void mqttSendNewEvent(uint8_t pageid, uint8_t btnid, int32_t val); void mqttSendNewValue(uint8_t pageid, uint8_t btnid, int32_t val); @@ -16,4 +15,7 @@ void mqttHandlePage(String strPageid); bool mqttIsConnected(void); +bool mqttGetConfig(const JsonObject & settings); +bool mqttSetConfig(const JsonObject & settings); + #endif \ No newline at end of file diff --git a/src/hasp_wifi.cpp b/src/hasp_wifi.cpp index 460afd84..6677a8a9 100644 --- a/src/hasp_wifi.cpp +++ b/src/hasp_wifi.cpp @@ -20,11 +20,22 @@ static WiFiEventHandler wifiEventHandler[3]; #endif - +#include "DNSserver.h" #include "user_config_override.h" -std::string wifiSsid = WIFI_SSID; +#ifdef WIFI_SSID +std::string wifiSsid = WIFI_SSID; +#else +std::string wifiSsid = ""; +#endif +#ifdef WIFI_PASSW std::string wifiPassword = WIFI_PASSW; +#else +std::string wifiPassword = ""; +#endif + +const byte DNS_PORT = 53; +DNSServer dnsServer; // long wifiPrevMillis = 0; // bool wifiWasConnected = false; @@ -101,33 +112,40 @@ void wifiSetup(JsonObject settings) { char buffer[64]; - if(!settings[F_CONFIG_SSID].isNull()) { - wifiSsid = settings[F_CONFIG_SSID].as().c_str(); + wifiSetConfig(settings); - // sprintf_P(buffer, PSTR("Wifi Ssid: %s"), wifiSsid.c_str()); - // debugPrintln(buffer); - } - if(!settings[F_CONFIG_PASS].isNull()) { - wifiPassword = settings[F_CONFIG_PASS].as().c_str(); + if(wifiSsid == "") { + WiFi.mode(WIFI_AP); + WiFi.softAP("HASP-test", "haspadmin"); + IPAddress IP = WiFi.softAPIP(); - // sprintf_P(buffer, PSTR("Wifi Password: %s"), wifiPassword.c_str()); - // debugPrintln(buffer); + /* Setup the DNS server redirecting all the domains to the apIP */ + dnsServer.setErrorReplyCode(DNSReplyCode::NoError); + dnsServer.start(DNS_PORT, "*", IP); + + sprintf_P(buffer, PSTR("WIFI: Setting up temporary Access Point")); + debugPrintln(buffer); + sprintf_P(buffer, PSTR("WIFI: AP IP address : %s"), IP.toString().c_str()); + debugPrintln(buffer); + + httpReconnect(); + return; } + WiFi.mode(WIFI_STA); sprintf_P(buffer, PSTR("WIFI: Connecting to : %s"), wifiSsid.c_str()); debugPrintln(buffer); - WiFi.mode(WIFI_STA); - WiFi.begin(wifiSsid.c_str(), wifiPassword.c_str()); - -#if defined(ARDUINO_ARCH_ESP32) - WiFi.onEvent(wifi_callback); -#endif #if defined(ARDUINO_ARCH_ESP8266) wifiEventHandler[0] = WiFi.onStationModeGotIP(wifiSTAGotIP); // As soon WiFi is connected, start NTP Client wifiEventHandler[1] = WiFi.onStationModeDisconnected(wifiSTADisconnected); wifiEventHandler[2] = WiFi.onStationModeConnected(wifiSTAConnected); #endif +#if defined(ARDUINO_ARCH_ESP32) + WiFi.onEvent(wifi_callback); +#endif + + WiFi.begin(wifiSsid.c_str(), wifiPassword.c_str()); } bool wifiLoop() @@ -165,15 +183,53 @@ bool wifiLoop() bool wifiGetConfig(const JsonObject & settings) { - if(!settings.isNull() && settings[F_CONFIG_SSID] == String(wifiSsid.c_str()) && - settings[F_CONFIG_PASS] == String(wifiPassword.c_str())) - return false; - - settings[F_CONFIG_SSID] = String(wifiSsid.c_str()); - settings[F_CONFIG_PASS] = String(wifiPassword.c_str()); + settings[FPSTR(F_CONFIG_SSID)] = String(wifiSsid.c_str()); + settings[FPSTR(F_CONFIG_PASS)] = String(wifiPassword.c_str()); size_t size = serializeJson(settings, Serial); Serial.println(); return true; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +bool wifiSetConfig(const JsonObject & settings) +{ + /* if(!settings.isNull() && settings[FPSTR(F_CONFIG_STARTPAGE)] == haspStartPage && + settings[FPSTR(F_CONFIG_THEME)] == haspThemeId && settings[FPSTR(F_CONFIG_HUE)] == haspThemeHue && + settings[FPSTR(F_CONFIG_ZIFONT)] == haspZiFontPath && settings[FPSTR(F_CONFIG_PAGES)] == haspPagesPath) + return false; + */ + bool changed = false; + + if(!settings[FPSTR(F_CONFIG_SSID)].isNull()) { + if(wifiSsid != settings[FPSTR(F_CONFIG_SSID)].as().c_str()) { + debugPrintln(F("wifiSsid changed")); + } + changed |= wifiSsid != settings[FPSTR(F_CONFIG_SSID)].as().c_str(); + + wifiSsid = settings[FPSTR(F_CONFIG_SSID)].as().c_str(); + } + + if(!settings[FPSTR(F_CONFIG_PASS)].isNull() && settings[FPSTR(F_CONFIG_PASS)].as() != F("********")) { + if(wifiPassword != settings[FPSTR(F_CONFIG_PASS)].as().c_str()) { + debugPrintln(F("wifiPassword changed")); + } + changed |= wifiPassword != settings[FPSTR(F_CONFIG_PASS)].as().c_str(); + + wifiPassword = settings[FPSTR(F_CONFIG_PASS)].as().c_str(); + } + + size_t size = serializeJson(settings, Serial); + Serial.println(); + + return changed; +} + +void wifiStop() +{ + debugPrintln(F("WIFI: Stopped")); + WiFi.mode(WIFI_OFF); + WiFi.disconnect(); } \ No newline at end of file diff --git a/src/hasp_wifi.h b/src/hasp_wifi.h index ddee217b..32ed79ad 100644 --- a/src/hasp_wifi.h +++ b/src/hasp_wifi.h @@ -5,6 +5,9 @@ void wifiSetup(JsonObject settings); bool wifiLoop(); +void wifiStop(); + bool wifiGetConfig(const JsonObject & settings); +bool wifiSetConfig(const JsonObject & settings); #endif \ No newline at end of file