|
@@ -0,0 +1,1913 @@
|
|
|
+
|
|
|
+#include "html.h"
|
|
|
+#include "html_conf.h"
|
|
|
+#include "html_confAdd.h"
|
|
|
+#include "html_confAdv.h"
|
|
|
+#include "html_confBas.h"
|
|
|
+#include "html_confDevWiFi.h"
|
|
|
+#include "html_confMqtt.h"
|
|
|
+#include "html_confWeb.h"
|
|
|
+#include "html_confTime.h"
|
|
|
+#include "html_confLog.h"
|
|
|
+#include "html_main.h"
|
|
|
+#include "html_redTemps.h"
|
|
|
+#include "html_sysinfo.h"
|
|
|
+
|
|
|
+#ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS
|
|
|
+#include "html_console_ws.h"
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef ENABLE_FEATURE_WEB_CONSOLE_BUFFERED
|
|
|
+#include "html_console.h"
|
|
|
+#endif
|
|
|
+
|
|
|
+void httpServerHandleMainPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_main_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_main_body);
|
|
|
+ if (httpIsAuthenticatedAdmin())
|
|
|
+ {
|
|
|
+ httpServer.sendContent_P(html_main_body_adminonly);
|
|
|
+#ifdef ENABLE_FEATURE_WEB_CONSOLE_BUFFERED
|
|
|
+ if (confWeb.wConsole)
|
|
|
+ httpServer.sendContent_P(html_main_body_adminonly_console);
|
|
|
+#endif
|
|
|
+#ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS
|
|
|
+if (confWeb.wsConsole)
|
|
|
+ httpServer.sendContent_P(html_main_body_adminonly_wsconsole);
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ httpServer.sendContent_P(html_main_body2);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleRedTempsPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_redTemps_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_redTemps_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_conf_body);
|
|
|
+#ifdef ENABLE_FEATURE_WEB_CONSOLE_BUFFERED
|
|
|
+ if (confWeb.wConsole)
|
|
|
+ httpServer.sendContent_P(html_conf_body_console);
|
|
|
+#endif
|
|
|
+#ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS
|
|
|
+ if (confWeb.wsConsole)
|
|
|
+ httpServer.sendContent_P(html_conf_body_wsconsole);
|
|
|
+#endif
|
|
|
+ httpServer.sendContent_P(html_conf_body_end);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfWebPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_confweb_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_confweb_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfMqttPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_confmqtt_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_confmqtt_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfDevWiFiPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_confDevWiFi_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_confDevWiFi_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfBasPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_confbas_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_confbas_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfAdvPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_confadv_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_confadv_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfAddPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_confadd_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_confadd_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfTimePage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_conftime_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_conftime_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfLogPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_conflog_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_conflog_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+#ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS
|
|
|
+void httpServerHandleWSConsolePage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_wsconsole_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
+void httpServerHandleConsolePage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_console_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleConfSavedPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_confsaved_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+//void httpServerHandleConfSavedRestartPage() {
|
|
|
+// httpServerSendHtmlHeadChunked();
|
|
|
+// httpServer.sendContent_P(html_head_end);
|
|
|
+// httpServer.sendContent_P(html_bodytag);
|
|
|
+// httpServerSendHtmlBodyPageheadChunked();
|
|
|
+// httpServer.sendContent_P(html_confsavedrestart_body);
|
|
|
+// httpServerSendHtmlFooterChunked();
|
|
|
+//}
|
|
|
+
|
|
|
+void httpServerHandleRestartPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag);
|
|
|
+ config_was_changed = false;
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_restarting_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleClearconfPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_clearconf_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleSysInfoPage()
|
|
|
+{
|
|
|
+ httpServerSendHtmlHeadChunked();
|
|
|
+ httpServer.sendContent_P(html_sysinfo_script);
|
|
|
+ httpServer.sendContent_P(html_head_end);
|
|
|
+ httpServer.sendContent_P(html_bodytag_jsinit);
|
|
|
+ httpServerSendHtmlBodyPageheadChunked();
|
|
|
+ httpServer.sendContent_P(html_sysinfo_body);
|
|
|
+ httpServerSendHtmlFooterChunked();
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerSendHtmlHeadChunked()
|
|
|
+{
|
|
|
+ httpServer.setContentLength(CONTENT_LENGTH_UNKNOWN); //Enable Chunked Transfer
|
|
|
+ httpServer.send(200, "text/html", html_head_part1);
|
|
|
+ httpServer.sendContent_P(PGMStr_FIRMWARE_NAME);
|
|
|
+ httpServer.sendContent(" - ");
|
|
|
+ httpServer.sendContent(confDevWiFi.deviceName);
|
|
|
+ httpServer.sendContent_P(html_head_part2);
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerSendHtmlBodyPageheadChunked()
|
|
|
+{
|
|
|
+ httpServer.sendContent_P(html_body_pagehead_part1);
|
|
|
+ httpServer.sendContent_P(PGMStr_FIRMWARE_NAME);
|
|
|
+ httpServer.sendContent(" - ");
|
|
|
+ httpServer.sendContent(confDevWiFi.deviceName);
|
|
|
+ httpServer.sendContent_P(html_body_pagehead_part2);
|
|
|
+ if (config_was_changed)
|
|
|
+ httpServer.sendContent_P(html_body_pagehead_confchangednote);
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerSendHtmlFooterChunked()
|
|
|
+{
|
|
|
+ httpServer.sendContent_P(html_footer1);
|
|
|
+ httpServer.sendContent_P(html_footer_a1);
|
|
|
+ httpServer.sendContent_P(PGMStr_FIRMWARE_URL);
|
|
|
+ httpServer.sendContent_P(html_footer_a2);
|
|
|
+ httpServer.sendContent_P(PGMStr_FIRMWARE_NAME);
|
|
|
+ httpServer.sendContent_P(html_footer_ae);
|
|
|
+ httpServer.sendContent(" ");
|
|
|
+ httpServer.sendContent_P(PGMStr_FIRMWARE_VERSION);
|
|
|
+#ifdef DEBUGMODE
|
|
|
+ httpServer.sendContent(" <span style='color:red;font-weight:bold;'>DEBUG</span>");
|
|
|
+#endif
|
|
|
+ httpServer.sendContent(" by ");
|
|
|
+ httpServer.sendContent_P(html_footer_a1);
|
|
|
+ httpServer.sendContent_P(PGMStr_FIRMWARE_COPYRIGHT_URL);
|
|
|
+ httpServer.sendContent_P(html_footer_a2);
|
|
|
+ httpServer.sendContent_P(PGMStr_FIRMWARE_COPYRIGHT);
|
|
|
+ httpServer.sendContent_P(html_footer_ae);
|
|
|
+ httpServer.sendContent_P(html_footer2);
|
|
|
+ httpServer.sendContent("");
|
|
|
+ httpServer.client().stop();
|
|
|
+}
|
|
|
+
|
|
|
+boolean httpIsAuthenticated()
|
|
|
+{
|
|
|
+ if (WifiInApMode && strlen(confDevWiFi.WiFiAPModePassword) >= 8)
|
|
|
+ return true;
|
|
|
+ if (confWeb.http_user_auth)
|
|
|
+ {
|
|
|
+ boolean useAuth = false;
|
|
|
+ boolean isAuthenticated = false;
|
|
|
+ // user authentication enabled - only allow access without authentication if no admin password is set
|
|
|
+ // or if user1 credentials are empty (access in "user mode")
|
|
|
+ if (strlen(confWeb.http_pass) > 0 || strlen(confWeb.http_pass1) > 0 || strlen(confWeb.http_pass2) > 0)
|
|
|
+ useAuth = true;
|
|
|
+ if (strlen(confWeb.http_pass) == 0)
|
|
|
+ {
|
|
|
+ return true; // no admin password set - in this case authentication is off
|
|
|
+ }
|
|
|
+ if (useAuth)
|
|
|
+ {
|
|
|
+ // allow access if one set of valid credentials are given
|
|
|
+ if ((strlen(confWeb.http_user) > 0 && strlen(confWeb.http_pass) > 0))
|
|
|
+ {
|
|
|
+ if (httpServer.authenticate(confWeb.http_user, confWeb.http_pass))
|
|
|
+ isAuthenticated = true;
|
|
|
+ }
|
|
|
+ if ((strlen(confWeb.http_user1) > 0 && strlen(confWeb.http_pass1) > 0))
|
|
|
+ {
|
|
|
+ if (httpServer.authenticate(confWeb.http_user1, confWeb.http_pass1))
|
|
|
+ isAuthenticated = true;
|
|
|
+ }
|
|
|
+ if ((strlen(confWeb.http_user2) > 0 && strlen(confWeb.http_pass2) > 0))
|
|
|
+ {
|
|
|
+ if (httpServer.authenticate(confWeb.http_user2, confWeb.http_pass2))
|
|
|
+ isAuthenticated = true;
|
|
|
+ }
|
|
|
+ // also allow access if admin credentials are set but user1 password is empty and user-authentication is enabled
|
|
|
+ if (strlen(confWeb.http_pass1) == 0)
|
|
|
+ {
|
|
|
+ isAuthenticated = true;
|
|
|
+ }
|
|
|
+ return isAuthenticated;
|
|
|
+ }
|
|
|
+ // allow access if all credentials are empty
|
|
|
+ else
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ // user authentication disabled - only allow access without password if no admin password is set
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (strlen(confWeb.http_pass) > 0)
|
|
|
+ {
|
|
|
+ if (httpServer.authenticate(confWeb.http_user, confWeb.http_pass))
|
|
|
+ return true;
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+boolean httpIsAuthenticatedAdmin()
|
|
|
+{
|
|
|
+ if (WifiInApMode && strlen(confDevWiFi.WiFiAPModePassword) >= 8)
|
|
|
+ return true;
|
|
|
+ boolean auth = false;
|
|
|
+ if ((strlen(confWeb.http_user) > 0 && strlen(confWeb.http_pass) > 0))
|
|
|
+ auth = true;
|
|
|
+ if (auth)
|
|
|
+ {
|
|
|
+ if (!httpServer.authenticate(confWeb.http_user, confWeb.http_pass))
|
|
|
+ return false;
|
|
|
+ else
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerHandleNotFound()
|
|
|
+{
|
|
|
+ httpServer.send(404, "text/plain", "404 NOT FOUND");
|
|
|
+}
|
|
|
+
|
|
|
+void httpSendUnauthorized()
|
|
|
+{
|
|
|
+ httpServer.send(401, "text/plain", "UNAUTHORIZED");
|
|
|
+}
|
|
|
+
|
|
|
+void httpSend200OK()
|
|
|
+{
|
|
|
+ httpServer.send(200, "text/plain", "OK");
|
|
|
+}
|
|
|
+
|
|
|
+boolean httpCheckToken()
|
|
|
+{
|
|
|
+ if (confWeb.http_token[0] != '\0')
|
|
|
+ { // dont accept empty token
|
|
|
+ if (httpServer.hasArg("token"))
|
|
|
+ {
|
|
|
+ char buf[20];
|
|
|
+ httpServer.arg("token").toCharArray(buf, 20);
|
|
|
+ if (strcmp(buf, confWeb.http_token) == 0)
|
|
|
+ return true;
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+void httpServerInit()
|
|
|
+{
|
|
|
+ httpServer.on("/style.css", []() {
|
|
|
+ httpServer.sendHeader("cache-control", "max-age=86400", false);
|
|
|
+ httpServer.send_P(200, "text/css", html_stylesheet);
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/api", []() {
|
|
|
+ if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (confLog.logWebRequests || httpServer.args() > 0)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /api (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+ //sendLog("WEB: /api", LOGLEVEL_INFO);
|
|
|
+ if (httpServer.hasArg("BtnPlus"))
|
|
|
+ {
|
|
|
+ setTempStepUp();
|
|
|
+ sendLog(F("WEB: BtnPlus"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnMinus"))
|
|
|
+ {
|
|
|
+ setTempStepDown();
|
|
|
+ sendLog(F("WEB: BtnMinus"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnPset0"))
|
|
|
+ {
|
|
|
+ setPresetTo(0);
|
|
|
+ sendLog(F("WEB: BtnPset0"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnPset1"))
|
|
|
+ {
|
|
|
+ setPresetTo(1);
|
|
|
+ sendLog(F("WEB: BtnPset1"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnPset2"))
|
|
|
+ {
|
|
|
+ setPresetTo(2);
|
|
|
+ sendLog(F("WEB: BtnPset2"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnOn"))
|
|
|
+ {
|
|
|
+ setHeatingmodeTo(1);
|
|
|
+ sendLog(F("WEB: BtnOn"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnOff"))
|
|
|
+ {
|
|
|
+ setHeatingmodeTo(0);
|
|
|
+ sendLog(F("WEB: BtnOff"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnL1Plus"))
|
|
|
+ {
|
|
|
+ setTempLowStepUp();
|
|
|
+ sendLog(F("WEB: BtnL1Plus"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnL1Minus"))
|
|
|
+ {
|
|
|
+ setTempLowStepDown();
|
|
|
+ sendLog(F("WEB: BtnL1Minus"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnL2Plus"))
|
|
|
+ {
|
|
|
+ setTempLow2StepUp();
|
|
|
+ sendLog(F("WEB: BtnL2Plus"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+ if (httpServer.hasArg("BtnL2Minus"))
|
|
|
+ {
|
|
|
+ setTempLow2StepDown();
|
|
|
+ sendLog(F("WEB: BtnL2Minus"), LOGLEVEL_INFO);
|
|
|
+ } //if
|
|
|
+
|
|
|
+ if (httpServer.hasArg("setTemp"))
|
|
|
+ {
|
|
|
+ sendLog(F("WEB: /api?setTemp"), LOGLEVEL_INFO);
|
|
|
+ char bufVal[20];
|
|
|
+ httpServer.arg("setTemp").toCharArray(bufVal, 20);
|
|
|
+ float valueFloat = round(atof(bufVal) * 2.0) / 2.0;
|
|
|
+ setTempTo(valueFloat);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (httpServer.hasArg("setMode"))
|
|
|
+ {
|
|
|
+ sendLog(F("WEB: /api?setMode"), LOGLEVEL_INFO);
|
|
|
+ char bufVal[20];
|
|
|
+ httpServer.arg("setMode").toCharArray(bufVal, 20);
|
|
|
+ int valueInt = atoi(bufVal);
|
|
|
+ if (valueInt >= 0 && valueInt <= 1)
|
|
|
+ setHeatingmodeTo(valueInt);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (httpServer.hasArg("setPreset"))
|
|
|
+ {
|
|
|
+ sendLog(F("WEB: /api?setPreset"), LOGLEVEL_INFO);
|
|
|
+ char bufVal[20];
|
|
|
+ httpServer.arg("setPreset").toCharArray(bufVal, 20);
|
|
|
+ int valueInt = atoi(bufVal);
|
|
|
+ if (valueInt >= 0 && valueInt <= 2)
|
|
|
+ setPresetTo(valueInt);
|
|
|
+ }
|
|
|
+
|
|
|
+ //char ch_currTemp[6];
|
|
|
+ //char ch_currSetTemp[6];
|
|
|
+ //dtostrf(currTemp, 1, 1, ch_currTemp );
|
|
|
+ //dtostrf(setTemp, 1, 1, ch_currSetTemp );
|
|
|
+
|
|
|
+ //build json object of program data
|
|
|
+ StaticJsonDocument<700> json;
|
|
|
+
|
|
|
+ json["devname"] = confDevWiFi.deviceName;
|
|
|
+ json["ssid"] = WiFi.SSID();
|
|
|
+ json["WiFiNum"] = persWM.getActiveWiFiNum();
|
|
|
+ //json["uptime"] = uptimeStr;
|
|
|
+ json["uptime"] = getUptimeStr();
|
|
|
+
|
|
|
+#ifdef ENABLE_FEATURE_NTP_TIME
|
|
|
+ if (confTime.ntpEnable)
|
|
|
+ {
|
|
|
+ char buf[13];
|
|
|
+ updateTime();
|
|
|
+ if (lt.tm_year > 70)
|
|
|
+ {
|
|
|
+ strftime(buf, sizeof(buf), "%H:%M", <);
|
|
|
+ json["time"] = buf;
|
|
|
+ strftime(buf, sizeof(buf), "%d.%m.%Y", <);
|
|
|
+ json["date"] = buf;
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+ json["freeheap"] = ESP.getFreeHeap();
|
|
|
+
|
|
|
+ mqtt_updateCurrentStateName();
|
|
|
+ json["mqttstate"] = mqttCurrentStateName;
|
|
|
+ json["mqtthost"] = confMqtt.mqtt_server;
|
|
|
+
|
|
|
+ if (mqttReconnects < 1)
|
|
|
+ json["mqttreconn"] = mqttReconnects;
|
|
|
+ else
|
|
|
+ json["mqttreconn"] = mqttReconnects - 1;
|
|
|
+
|
|
|
+ json["setTemp"] = setTemp;
|
|
|
+ json["currSetTemp"] = currSetTemp;
|
|
|
+ json["temp"] = round1(currTemp);
|
|
|
+ json["hum"] = int(currHum);
|
|
|
+ json["heating"] = turnHeatingOn;
|
|
|
+ json["mode"] = heatingMode;
|
|
|
+ json["modeName"] = currentModeName;
|
|
|
+ json["pset"] = preset;
|
|
|
+ json["psetName"] = currentPresetName;
|
|
|
+ json["psetName0"] = confAdv.psetName0;
|
|
|
+ json["psetName1"] = confAdv.psetName1;
|
|
|
+ json["psetName2"] = confAdv.psetName2;
|
|
|
+ json["tempLow"] = setTempLow;
|
|
|
+ json["tempLow2"] = setTempLow2;
|
|
|
+ json["outTemp"] = round1(outTemp);
|
|
|
+ json["outHum"] = outHum;
|
|
|
+
|
|
|
+ char jsonchar[500];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /api
|
|
|
+
|
|
|
+ httpServer.on("/confDataWeb", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //Serial.println("httpServer.on /confdata");
|
|
|
+ //sendLog("WEB: /confDataWeb", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confDataWeb (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ StaticJsonDocument<1000> json;
|
|
|
+
|
|
|
+ json["apiToken"] = confWeb.http_token;
|
|
|
+ json["httpUA"] = confWeb.http_user;
|
|
|
+ //json["httpPA"] = confWeb.http_pass;
|
|
|
+ if (strlen(confWeb.http_pass) > 0)
|
|
|
+ json["httpPA"] = "****";
|
|
|
+ else
|
|
|
+ json["httpPA"] = "";
|
|
|
+
|
|
|
+ if (confWeb.http_user_auth)
|
|
|
+ json["httpAuth"] = 1;
|
|
|
+ else
|
|
|
+ json["httpAuth"] = 0;
|
|
|
+
|
|
|
+ json["httpU1"] = confWeb.http_user1;
|
|
|
+ //json["httpP1"] = confWeb.http_pass1;
|
|
|
+ if (strlen(confWeb.http_pass1) > 0)
|
|
|
+ json["httpP1"] = "****";
|
|
|
+ else
|
|
|
+ json["httpP1"] = "";
|
|
|
+ json["httpU2"] = confWeb.http_user2;
|
|
|
+ //json["httpP2"] = confWeb.http_pass2;
|
|
|
+ if (strlen(confWeb.http_pass2) > 0)
|
|
|
+ json["httpP2"] = "****";
|
|
|
+ else
|
|
|
+ json["httpP2"] = "";
|
|
|
+
|
|
|
+ if (confWeb.wConsole)
|
|
|
+ json["wConsole"] = 1;
|
|
|
+ else
|
|
|
+ json["wConsole"] = 0;
|
|
|
+
|
|
|
+ if (confWeb.wsConsole)
|
|
|
+ json["wsConsole"] = 1;
|
|
|
+ else
|
|
|
+ json["wsConsole"] = 0;
|
|
|
+
|
|
|
+ yield();
|
|
|
+
|
|
|
+ char jsonchar[1000];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /confdweb
|
|
|
+
|
|
|
+ httpServer.on("/confDataMqtt", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confDataMqtt", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confDataMqtt (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ StaticJsonDocument<1000> json;
|
|
|
+
|
|
|
+ if (confMqtt.mqtt_enable)
|
|
|
+ json["mqttEnable"] = 1;
|
|
|
+ else
|
|
|
+ json["mqttEnable"] = 0;
|
|
|
+
|
|
|
+ json["mqttHost"] = confMqtt.mqtt_server;
|
|
|
+ json["mqttPort"] = confMqtt.mqtt_port;
|
|
|
+ json["mqttUser"] = confMqtt.mqtt_user;
|
|
|
+
|
|
|
+ //json["mqttPass"] = confMqtt.mqtt_pass;
|
|
|
+ if (strlen(confMqtt.mqtt_pass) > 0)
|
|
|
+ json["mqttPass"] = "****";
|
|
|
+ else
|
|
|
+ json["mqttPass"] = "";
|
|
|
+
|
|
|
+ json["inTop"] = confMqtt.mqtt_topic_in;
|
|
|
+ json["outTop"] = confMqtt.mqtt_topic_out;
|
|
|
+
|
|
|
+ if (confMqtt.mqtt_outRetain)
|
|
|
+ json["outRet"] = 1;
|
|
|
+ else
|
|
|
+ json["outRet"] = 0;
|
|
|
+ if (confMqtt.mqtt_outRetain_sensors)
|
|
|
+ json["outRetSens"] = 1;
|
|
|
+ else
|
|
|
+ json["outRetSens"] = 0;
|
|
|
+
|
|
|
+ json["outPubInt"] = confMqtt.mqtt_outPubInterval;
|
|
|
+ json["outPubIntSens"] = confMqtt.mqtt_outPubInterval_sensors;
|
|
|
+
|
|
|
+ json["willTop"] = confMqtt.mqtt_willTopic;
|
|
|
+ json["willQos"] = confMqtt.mqtt_willQos;
|
|
|
+
|
|
|
+ if (confMqtt.mqtt_willRetain)
|
|
|
+ json["willRet"] = 1;
|
|
|
+ else
|
|
|
+ json["willRet"] = 0;
|
|
|
+
|
|
|
+ json["willMsg"] = confMqtt.mqtt_willMsg;
|
|
|
+ json["connMsg"] = confMqtt.mqtt_connMsg;
|
|
|
+
|
|
|
+ if (confMqtt.mqtt_enable_heartbeat)
|
|
|
+ json["hbEnable"] = 1;
|
|
|
+ else
|
|
|
+ json["hbEnable"] = 0;
|
|
|
+
|
|
|
+ json["hbReconn"] = confMqtt.mqtt_heartbeat_maxage_reconnect / 60000;
|
|
|
+ json["hbReboot"] = confMqtt.mqtt_heartbeat_maxage_reboot / 60000;
|
|
|
+
|
|
|
+ yield();
|
|
|
+
|
|
|
+ char jsonchar[1000];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /confdmqtt
|
|
|
+
|
|
|
+ httpServer.on("/setConfWeb", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /setConfWeb", LOGLEVEL_INFO);
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /setConfWeb (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+
|
|
|
+ bool httpPASet, httpP1Set, httpP2Set;
|
|
|
+ httpPASet = false;
|
|
|
+ httpP1Set = false;
|
|
|
+ httpP2Set = false;
|
|
|
+ if (httpServer.hasArg("httpPASet"))
|
|
|
+ httpPASet = true;
|
|
|
+ if (httpServer.hasArg("httpP1Set"))
|
|
|
+ httpP1Set = true;
|
|
|
+ if (httpServer.hasArg("httpP2Set"))
|
|
|
+ httpP2Set = true;
|
|
|
+
|
|
|
+ for (int i = 0; i < httpServer.args(); i++)
|
|
|
+ {
|
|
|
+ char bufName[20];
|
|
|
+ char bufValue[101];
|
|
|
+ httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+
|
|
|
+ if (strlen(bufName) > 0)
|
|
|
+ {
|
|
|
+ Serial.print("web update ");
|
|
|
+ Serial.print(bufName);
|
|
|
+ Serial.print(" = ");
|
|
|
+ Serial.println(bufValue);
|
|
|
+
|
|
|
+ if (strcmp(bufName, "httpUA") == 0 || strcmp(bufName, "httpPA") == 0)
|
|
|
+ {
|
|
|
+ if (httpPASet)
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ else if (strcmp(bufName, "httpU1") == 0 || strcmp(bufName, "httpP1") == 0)
|
|
|
+ {
|
|
|
+ if (httpP1Set)
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ else if (strcmp(bufName, "httpU2") == 0 || strcmp(bufName, "httpP2") == 0)
|
|
|
+ {
|
|
|
+ if (httpP2Set)
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ else if (strcmp(bufName, "httpPASet") != 0 && strcmp(bufName, "httpP1Set") != 0 && strcmp(bufName, "httpP2Set") != 0)
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ //else setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ yield();
|
|
|
+
|
|
|
+ saveConfigWeb();
|
|
|
+ yield();
|
|
|
+ loadConfigWeb();
|
|
|
+
|
|
|
+ httpServerHandleConfSavedPage();
|
|
|
+ config_was_changed = true;
|
|
|
+ // yield();
|
|
|
+ // ESP.restart();
|
|
|
+ }
|
|
|
+ }); //httpServer.on /setConfWeb
|
|
|
+
|
|
|
+ httpServer.on("/setConfMqtt", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //Serial.println("httpServer.on /setConfMqtt");
|
|
|
+ //sendLog("WEB: /setConfMqtt", LOGLEVEL_INFO);
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /setConfMqtt (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+
|
|
|
+ bool mqttPassSet;
|
|
|
+ mqttPassSet = false;
|
|
|
+ if (httpServer.hasArg("mqttPassSet"))
|
|
|
+ mqttPassSet = true;
|
|
|
+
|
|
|
+ for (int i = 0; i < httpServer.args(); i++)
|
|
|
+ {
|
|
|
+ char bufName[20];
|
|
|
+ char bufValue[101];
|
|
|
+ httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+
|
|
|
+ if (strlen(bufName) > 0)
|
|
|
+ {
|
|
|
+ Serial.print("web update ");
|
|
|
+ Serial.print(bufName);
|
|
|
+ Serial.print(" = ");
|
|
|
+ Serial.println(bufValue);
|
|
|
+
|
|
|
+ if (strcmp(bufName, "mqttUser") == 0 || strcmp(bufName, "mqttPass") == 0)
|
|
|
+ {
|
|
|
+ if (mqttPassSet)
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ //saveConfigMqttToFlash = true; // will be saved in next loop()
|
|
|
+ //Serial.println("web triggered saveConfigMqttToFlash");
|
|
|
+ }
|
|
|
+ yield();
|
|
|
+ saveConfigMqtt();
|
|
|
+ yield();
|
|
|
+ loadConfigMqtt();
|
|
|
+
|
|
|
+ //httpServerHandleConfSavedRestartPage();
|
|
|
+ httpServerHandleConfSavedPage();
|
|
|
+ config_was_changed = true;
|
|
|
+ //restart();
|
|
|
+ }
|
|
|
+ }); //httpServer.on /setConfMqtt
|
|
|
+
|
|
|
+ httpServer.on("/confDataDevWiFi", []() {
|
|
|
+ if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confDataDevWiFi", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confDataDevWiFi (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ //for (int i = 0; i < httpServer.args(); i++) {
|
|
|
+ // char bufName[20];
|
|
|
+ // char bufValue[101];
|
|
|
+ // httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ // httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+ //
|
|
|
+ // if (strlen(bufName) > 0) {
|
|
|
+ // //Serial.print("web update ");
|
|
|
+ // //Serial.print(bufName);
|
|
|
+ // //Serial.print(" = ");
|
|
|
+ // //Serial.println(bufValue);
|
|
|
+ // setConfig(bufName, bufValue);
|
|
|
+ // }
|
|
|
+ // saveConfigToFlash = true; // will be saved in next loop()
|
|
|
+ // //Serial.println("web triggered saveConfigToFlash");
|
|
|
+ //}
|
|
|
+ //yield();
|
|
|
+
|
|
|
+ //build json object of program data
|
|
|
+ StaticJsonDocument<800> json;
|
|
|
+
|
|
|
+ json["devName"] = confDevWiFi.deviceName;
|
|
|
+ json["hostName"] = confDevWiFi.hostName;
|
|
|
+ json["SSID1"] = confDevWiFi.WiFiSSID1;
|
|
|
+ //json["WPW1"] = confDevWiFi.WiFiPW1;
|
|
|
+ if (strlen(confDevWiFi.WiFiPW1) > 0)
|
|
|
+ json["WPW1"] = "****";
|
|
|
+ else
|
|
|
+ json["WPW1"] = "";
|
|
|
+ json["SSID2"] = confDevWiFi.WiFiSSID2;
|
|
|
+ //json["WPW2"] = confDevWiFi.WiFiPW2;
|
|
|
+ if (strlen(confDevWiFi.WiFiPW2) > 0)
|
|
|
+ json["WPW2"] = "****";
|
|
|
+ else
|
|
|
+ json["WPW2"] = "";
|
|
|
+ json["SSIDAP"] = confDevWiFi.WiFiAPModeSSID;
|
|
|
+ json["WPWAP"] = confDevWiFi.WiFiAPModePassword;
|
|
|
+ json["WAPtout"] = confDevWiFi.WiFiAPModeTimeout;
|
|
|
+ json["WConnCheck"] = confDevWiFi.WiFiConnCheckInterval;
|
|
|
+ json["Wretry"] = confDevWiFi.WiFiRetryInterval;
|
|
|
+ json["Wreboot"] = confDevWiFi.WiFiRebootOnNoConnect;
|
|
|
+
|
|
|
+ yield();
|
|
|
+
|
|
|
+ char jsonchar[1000];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /confDataDevWiFi
|
|
|
+
|
|
|
+ httpServer.on("/setConfDevWiFi", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /setConfDevWiFi", LOGLEVEL_INFO);
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /setConfDevWiFi (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+
|
|
|
+ bool WPW1Set, WPW2Set, WPWAPSet;
|
|
|
+ WPW1Set = false;
|
|
|
+ WPW2Set = false;
|
|
|
+ WPWAPSet = false;
|
|
|
+ if (httpServer.hasArg("WPW1Set"))
|
|
|
+ WPW1Set = true;
|
|
|
+ if (httpServer.hasArg("WPW2Set"))
|
|
|
+ WPW2Set = true;
|
|
|
+ if (httpServer.hasArg("WPWAPSet"))
|
|
|
+ WPWAPSet = true;
|
|
|
+
|
|
|
+ for (int i = 0; i < httpServer.args(); i++)
|
|
|
+ {
|
|
|
+ char bufName[20];
|
|
|
+ char bufValue[101];
|
|
|
+ httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+
|
|
|
+ if (strlen(bufName) > 0)
|
|
|
+ {
|
|
|
+ Serial.print("web update ");
|
|
|
+ Serial.print(bufName);
|
|
|
+ Serial.print(" = ");
|
|
|
+ Serial.println(bufValue);
|
|
|
+
|
|
|
+ if (strcmp(bufName, "SSID1") == 0 || strcmp(bufName, "WPW1") == 0)
|
|
|
+ {
|
|
|
+ if (WPW1Set)
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ else if (strcmp(bufName, "SSID2") == 0 || strcmp(bufName, "WPW2") == 0)
|
|
|
+ {
|
|
|
+ if (WPW2Set)
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ else if (strcmp(bufName, "WPWAP") == 0)
|
|
|
+ {
|
|
|
+ if (WPWAPSet)
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ yield();
|
|
|
+ saveConfigDevWiFi();
|
|
|
+ yield();
|
|
|
+ loadConfigDevWiFi();
|
|
|
+
|
|
|
+ //httpServerHandleConfSavedRestartPage();
|
|
|
+ httpServerHandleConfSavedPage();
|
|
|
+
|
|
|
+ config_was_changed = true;
|
|
|
+ //restart();
|
|
|
+ }
|
|
|
+ }); //httpServer.on /setConfDev
|
|
|
+
|
|
|
+ httpServer.on("/setConfBas", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /setConfBas", LOGLEVEL_INFO);
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /setConfBas (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+
|
|
|
+ for (int i = 0; i < httpServer.args(); i++)
|
|
|
+ {
|
|
|
+ char bufName[20];
|
|
|
+ char bufValue[101];
|
|
|
+ httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+
|
|
|
+ if (strlen(bufName) > 0)
|
|
|
+ {
|
|
|
+ Serial.print("web update ");
|
|
|
+ Serial.print(bufName);
|
|
|
+ Serial.print(" = ");
|
|
|
+ Serial.println(bufValue);
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ yield();
|
|
|
+ saveConfigBas();
|
|
|
+ yield();
|
|
|
+ loadConfigBas();
|
|
|
+
|
|
|
+ httpServerHandleConfSavedPage();
|
|
|
+ config_was_changed = true;
|
|
|
+ }
|
|
|
+ }); //httpServer.on /setConfBas
|
|
|
+
|
|
|
+ httpServer.on("/setConfAdv", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /setConfAdv", LOGLEVEL_INFO);
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /setConfAdv (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+
|
|
|
+ for (int i = 0; i < httpServer.args(); i++)
|
|
|
+ {
|
|
|
+ char bufName[20];
|
|
|
+ char bufValue[101];
|
|
|
+ httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+
|
|
|
+ if (strlen(bufName) > 0)
|
|
|
+ {
|
|
|
+ Serial.print("web update ");
|
|
|
+ Serial.print(bufName);
|
|
|
+ Serial.print(" = ");
|
|
|
+ Serial.println(bufValue);
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ yield();
|
|
|
+ saveConfigAdv();
|
|
|
+ yield();
|
|
|
+ loadConfigAdv();
|
|
|
+
|
|
|
+ httpServerHandleConfSavedPage();
|
|
|
+ config_was_changed = true;
|
|
|
+ }
|
|
|
+ }); //httpServer.on /setConfAdv
|
|
|
+
|
|
|
+ httpServer.on("/setConfAdd", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /setConfAdd", LOGLEVEL_INFO);
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /setConfAdd (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+
|
|
|
+ for (int i = 0; i < httpServer.args(); i++)
|
|
|
+ {
|
|
|
+ char bufName[20];
|
|
|
+ char bufValue[101];
|
|
|
+ httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+
|
|
|
+ if (strlen(bufName) > 0)
|
|
|
+ {
|
|
|
+ Serial.print("web update ");
|
|
|
+ Serial.print(bufName);
|
|
|
+ Serial.print(" = ");
|
|
|
+ Serial.println(bufValue);
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ yield();
|
|
|
+ saveConfigAdd();
|
|
|
+ yield();
|
|
|
+ loadConfigAdd();
|
|
|
+
|
|
|
+ httpServerHandleConfSavedPage();
|
|
|
+ config_was_changed = true;
|
|
|
+ }
|
|
|
+ }); //httpServer.on /setConfAdd
|
|
|
+
|
|
|
+#ifdef ENABLE_FEATURE_NTP_TIME
|
|
|
+ httpServer.on("/setConfTime", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /setConfTime", LOGLEVEL_INFO);
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /setConfTime (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+
|
|
|
+ for (int i = 0; i < httpServer.args(); i++)
|
|
|
+ {
|
|
|
+ char bufName[20];
|
|
|
+ char bufValue[101];
|
|
|
+ httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+
|
|
|
+ if (strlen(bufName) > 0)
|
|
|
+ {
|
|
|
+ Serial.print("web update ");
|
|
|
+ Serial.print(bufName);
|
|
|
+ Serial.print(" = ");
|
|
|
+ Serial.println(bufValue);
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ yield();
|
|
|
+ saveConfigTime();
|
|
|
+ yield();
|
|
|
+ loadConfigTime();
|
|
|
+
|
|
|
+ httpServerHandleConfSavedPage();
|
|
|
+ config_was_changed = true;
|
|
|
+ }
|
|
|
+ }); //httpServer.on /setConfTime
|
|
|
+#endif
|
|
|
+
|
|
|
+ httpServer.on("/setConfLog", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ httpSendUnauthorized();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /setConfLog", LOGLEVEL_INFO);
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /setConfLog (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+
|
|
|
+ for (int i = 0; i < httpServer.args(); i++)
|
|
|
+ {
|
|
|
+ char bufName[20];
|
|
|
+ char bufValue[101];
|
|
|
+ httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+
|
|
|
+ if (strlen(bufName) > 0)
|
|
|
+ {
|
|
|
+ Serial.print("web update ");
|
|
|
+ Serial.print(bufName);
|
|
|
+ Serial.print(" = ");
|
|
|
+ Serial.println(bufValue);
|
|
|
+ setConfig(bufName, bufValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ yield();
|
|
|
+ saveConfigLog();
|
|
|
+ yield();
|
|
|
+ loadConfigLog();
|
|
|
+
|
|
|
+ httpServerHandleConfSavedPage();
|
|
|
+ config_was_changed = true;
|
|
|
+ }
|
|
|
+ }); //httpServer.on /setConfLog
|
|
|
+
|
|
|
+ httpServer.on("/confDataBas", []() {
|
|
|
+ if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confDataBas", LOGLEVEL_INFO);
|
|
|
+ //Serial.println("httpServer.on /confdata2");
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confDataBas (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ //for (int i = 0; i < httpServer.args(); i++) {
|
|
|
+ // char bufName[20];
|
|
|
+ // char bufValue[101];
|
|
|
+ // httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ // httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+ //
|
|
|
+ // if (strlen(bufName) > 0) {
|
|
|
+ // //Serial.print("web update ");
|
|
|
+ // //Serial.print(bufName);
|
|
|
+ // //Serial.print(" = ");
|
|
|
+ // //Serial.println(bufValue);
|
|
|
+ // setConfig(bufName, bufValue);
|
|
|
+ // }
|
|
|
+ // saveConfig2ToFlash = true;
|
|
|
+ // //Serial.println("web triggered saveConfig2ToFlash");
|
|
|
+ //}
|
|
|
+ //yield();
|
|
|
+
|
|
|
+ //build json object of program data
|
|
|
+ StaticJsonDocument<500> json;
|
|
|
+
|
|
|
+ if (confBas.autoSaveSetTemp)
|
|
|
+ json["autoSaveTemp"] = 1;
|
|
|
+ else
|
|
|
+ json["autoSaveTemp"] = 0;
|
|
|
+
|
|
|
+ if (confBas.autoSaveHeatingMode)
|
|
|
+ json["autoSaveMode"] = 1;
|
|
|
+ else
|
|
|
+ json["autoSaveMode"] = 0;
|
|
|
+
|
|
|
+ if (confBas.saveToMqttRetained)
|
|
|
+ json["saveToMqttRet"] = 1;
|
|
|
+ else
|
|
|
+ json["saveToMqttRet"] = 0;
|
|
|
+
|
|
|
+ json["tempMin"] = confBas.setTempMin;
|
|
|
+ json["tempMax"] = confBas.setTempMax;
|
|
|
+ json["measInt"] = confBas.measureInterval;
|
|
|
+ json["dispInt"] = confBas.displayInterval;
|
|
|
+ json["dispTout"] = confBas.displayTimeout;
|
|
|
+
|
|
|
+ if (confBas.PIR_enablesDisplay)
|
|
|
+ json["PIRenDisp"] = 1;
|
|
|
+ else
|
|
|
+ json["PIRenDisp"] = 0;
|
|
|
+
|
|
|
+ if (confBas.PIR_enablesDisplay_preset0only)
|
|
|
+ json["PIRenDispPs0"] = 1;
|
|
|
+ else
|
|
|
+ json["PIRenDispPs0"] = 0;
|
|
|
+
|
|
|
+ if (confBas.togglingTempHumAIDisplay)
|
|
|
+ json["togTHdisp"] = 1;
|
|
|
+ else
|
|
|
+ json["togTHdisp"] = 0;
|
|
|
+
|
|
|
+ yield();
|
|
|
+
|
|
|
+ char jsonchar[1000];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /confdbas
|
|
|
+
|
|
|
+ httpServer.on("/confDataAdv", []() {
|
|
|
+ if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confDataAdv", LOGLEVEL_INFO);
|
|
|
+ //Serial.println("httpServer.on /confdata2");
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confDataAdv (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ //for (int i = 0; i < httpServer.args(); i++) {
|
|
|
+ // char bufName[20];
|
|
|
+ // char bufValue[101];
|
|
|
+ // httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ // httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+ //
|
|
|
+ // if (strlen(bufName) > 0) {
|
|
|
+ // //Serial.print("web update ");
|
|
|
+ // //Serial.print(bufName);
|
|
|
+ // //Serial.print(" = ");
|
|
|
+ // //Serial.println(bufValue);
|
|
|
+ // setConfig(bufName, bufValue);
|
|
|
+ // }
|
|
|
+ // saveConfig2ToFlash = true;
|
|
|
+ // //Serial.println("web triggered saveConfig2ToFlash");
|
|
|
+ //}
|
|
|
+ //yield();
|
|
|
+
|
|
|
+ //build json object of program data
|
|
|
+ StaticJsonDocument<600> json;
|
|
|
+ json["minOffTime"] = confAdv.heatingMinOffTime;
|
|
|
+ json["tempDec"] = confAdv.setTempDecreaseVal;
|
|
|
+ json["hyst"] = confAdv.hysteresis;
|
|
|
+ json["tempCorr"] = confAdv.tempCorrVal;
|
|
|
+ json["humCorr"] = confAdv.humCorrVal;
|
|
|
+ json["offMsg"] = confAdv.offMessage;
|
|
|
+ json["modeName0"] = confAdv.modeName0;
|
|
|
+ json["modeName1"] = confAdv.modeName1;
|
|
|
+ json["psetName0"] = confAdv.psetName0;
|
|
|
+ json["psetName1"] = confAdv.psetName1;
|
|
|
+ json["psetName2"] = confAdv.psetName2;
|
|
|
+ json["iTempLab"] = confAdv.iTempLabel;
|
|
|
+ json["oTempLab"] = confAdv.oTempLabel;
|
|
|
+
|
|
|
+ yield();
|
|
|
+
|
|
|
+ char jsonchar[1000];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /confdadv
|
|
|
+
|
|
|
+ httpServer.on("/confDataAdd", []() {
|
|
|
+ if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confDataAdd", LOGLEVEL_INFO);
|
|
|
+ //Serial.println("httpServer.on /confdata2");
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confDataAdd (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ //for (int i = 0; i < httpServer.args(); i++) {
|
|
|
+ // char bufName[20];
|
|
|
+ // char bufValue[101];
|
|
|
+ // httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ // httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+ //
|
|
|
+ // if (strlen(bufName) > 0) {
|
|
|
+ // //Serial.print("web update ");
|
|
|
+ // //Serial.print(bufName);
|
|
|
+ // //Serial.print(" = ");
|
|
|
+ // //Serial.println(bufValue);
|
|
|
+ // setConfig(bufName, bufValue);
|
|
|
+ // }
|
|
|
+ // saveConfig2ToFlash = true;
|
|
|
+ // //Serial.println("web triggered saveConfig2ToFlash");
|
|
|
+ //}
|
|
|
+ //yield();
|
|
|
+
|
|
|
+ //build json object of program data
|
|
|
+ StaticJsonDocument<1000> json;
|
|
|
+
|
|
|
+ json["outTempTop"] = confAdd.outTemp_topic_in;
|
|
|
+ json["outHumTop"] = confAdd.outHum_topic_in;
|
|
|
+ json["PIRTop"] = confAdd.mqtt_topic_pir;
|
|
|
+ json["PIROnPld"] = confAdd.mqtt_payload_pir_on;
|
|
|
+ json["PIROffPld"] = confAdd.mqtt_payload_pir_off;
|
|
|
+
|
|
|
+ yield();
|
|
|
+
|
|
|
+ char jsonchar[1000];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /confdadd
|
|
|
+
|
|
|
+ httpServer.on("/confDataTime", []() {
|
|
|
+ if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confDataTime", LOGLEVEL_INFO);
|
|
|
+ //Serial.println("httpServer.on /confdata2");
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confDataTime (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ //for (int i = 0; i < httpServer.args(); i++) {
|
|
|
+ // char bufName[20];
|
|
|
+ // char bufValue[101];
|
|
|
+ // httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ // httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+ //
|
|
|
+ // if (strlen(bufName) > 0) {
|
|
|
+ // //Serial.print("web update ");
|
|
|
+ // //Serial.print(bufName);
|
|
|
+ // //Serial.print(" = ");
|
|
|
+ // //Serial.println(bufValue);
|
|
|
+ // setConfig(bufName, bufValue);
|
|
|
+ // }
|
|
|
+ // saveConfig2ToFlash = true;
|
|
|
+ // //Serial.println("web triggered saveConfig2ToFlash");
|
|
|
+ //}
|
|
|
+ //yield();
|
|
|
+
|
|
|
+ //build json object of program data
|
|
|
+ StaticJsonDocument<1000> json;
|
|
|
+
|
|
|
+ if (confTime.ntpEnable)
|
|
|
+ json["NTPEnable"] = 1;
|
|
|
+ else
|
|
|
+ json["NTPEnable"] = 0;
|
|
|
+
|
|
|
+ json["NTPServer1"] = confTime.ntpServer1;
|
|
|
+ json["NTPServer2"] = confTime.ntpServer2;
|
|
|
+ json["TZStr"] = confTime.timeZoneStr;
|
|
|
+ json["NTPSyncInt"] = confTime.ntpSyncInterval / 60;
|
|
|
+
|
|
|
+ yield();
|
|
|
+
|
|
|
+ char jsonchar[1000];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /confDataTime
|
|
|
+
|
|
|
+ httpServer.on("/confDataLog", []() {
|
|
|
+ if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confDataLog", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confDataLog (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ //for (int i = 0; i < httpServer.args(); i++) {
|
|
|
+ // char bufName[20];
|
|
|
+ // char bufValue[101];
|
|
|
+ // httpServer.argName(i).toCharArray(bufName, 20);
|
|
|
+ // httpServer.arg(i).toCharArray(bufValue, 101);
|
|
|
+ //
|
|
|
+ // if (strlen(bufName) > 0) {
|
|
|
+ // //Serial.print("web update ");
|
|
|
+ // //Serial.print(bufName);
|
|
|
+ // //Serial.print(" = ");
|
|
|
+ // //Serial.println(bufValue);
|
|
|
+ // setConfig(bufName, bufValue);
|
|
|
+ // }
|
|
|
+ // saveConfig2ToFlash = true;
|
|
|
+ // //Serial.println("web triggered saveConfig2ToFlash");
|
|
|
+ //}
|
|
|
+ //yield();
|
|
|
+
|
|
|
+ //build json object of program data
|
|
|
+ StaticJsonDocument<1000> json;
|
|
|
+
|
|
|
+ //if(confTime.ntpEnable) json["NTPEnable"] = 1;
|
|
|
+ //else json["NTPEnable"] = 0;
|
|
|
+
|
|
|
+ json["logLevSer"] = confLog.logLevelSerial;
|
|
|
+ json["logLevWeb"] = confLog.logLevelWeb;
|
|
|
+ json["logLevMqtt"] = confLog.logLevelMqtt;
|
|
|
+
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ json["logWebRequests"] = 1;
|
|
|
+ else
|
|
|
+ json["logWebRequests"] = 0;
|
|
|
+
|
|
|
+ yield();
|
|
|
+
|
|
|
+ char jsonchar[1000];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /confDataLog
|
|
|
+
|
|
|
+ //get heap status, analog input value and all GPIO statuses in one json call
|
|
|
+ httpServer.on("/sysinfod", HTTP_GET, []() {
|
|
|
+ if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /sysinfod (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ char buf[40];
|
|
|
+ byte mac[6];
|
|
|
+ WiFi.macAddress(mac);
|
|
|
+
|
|
|
+ StaticJsonDocument<1000> json;
|
|
|
+ json["DevName"] = confDevWiFi.deviceName;
|
|
|
+ json["HostName"] = confDevWiFi.hostName;
|
|
|
+
|
|
|
+ sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", (uint8_t)mac[0], (uint8_t)mac[1], (uint8_t)mac[2], (uint8_t)mac[3], (uint8_t)mac[4], (uint8_t)mac[5]);
|
|
|
+ json["MAC"] = buf;
|
|
|
+
|
|
|
+ //sprintf(buf, "%s", WiFi.localIP().toString().c_str());
|
|
|
+ //json["IP"] = buf;
|
|
|
+
|
|
|
+ //sprintf(buf, "%s", WiFi.gatewayIP().toString().c_str());
|
|
|
+ //json["Gateway"] = buf;
|
|
|
+
|
|
|
+ json["IP"] = WiFi.localIP().toString();
|
|
|
+ json["GW"] = WiFi.gatewayIP().toString();
|
|
|
+ json["DNS"] = WiFi.dnsIP().toString();
|
|
|
+
|
|
|
+ json["SSID"] = WiFi.SSID();
|
|
|
+ json["WiFiConf"] = persWM.getActiveWiFiNum();
|
|
|
+ json["UpTime"] = getUptimeStr();
|
|
|
+ json["HeapFree"] = ESP.getFreeHeap();
|
|
|
+ json["HeapFragment"] = ESP.getHeapFragmentation();
|
|
|
+ json["HeapMaxBlock"] = ESP.getMaxFreeBlockSize();
|
|
|
+ json["ResetReason"] = ESP.getResetReason();
|
|
|
+ json["CoreVersion"] = ESP.getCoreVersion();
|
|
|
+ json["SDKVersion"] = ESP.getSdkVersion();
|
|
|
+ json["CPUfreq"] = ESP.getCpuFreqMHz();
|
|
|
+ json["SketchSize"] = ESP.getSketchSize();
|
|
|
+ json["FlashSize"] = ESP.getFlashChipRealSize();
|
|
|
+
|
|
|
+ sprintf(buf, "%s", PGMStr_FIRMWARE_NAME);
|
|
|
+ json["FWName"] = buf;
|
|
|
+
|
|
|
+ sprintf(buf, "%s", PGMStr_FIRMWARE_VERSION);
|
|
|
+ json["FWVer"] = buf;
|
|
|
+
|
|
|
+ sprintf(buf, "%s", PGMStr_FIRMWARE_COPYRIGHT);
|
|
|
+ json["FWCr"] = buf;
|
|
|
+
|
|
|
+ sprintf(buf, "%s", compile_date);
|
|
|
+ json["FWBuilt"] = buf;
|
|
|
+#ifdef DEBUGMODE
|
|
|
+ json["FWDebug"] = "yes";
|
|
|
+#else
|
|
|
+ json["FWDebug"] = "no";
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef ENABLE_FEATURE_NTP_TIME
|
|
|
+ if (confTime.ntpEnable)
|
|
|
+ {
|
|
|
+ char buf[13];
|
|
|
+ updateTime();
|
|
|
+ if(lt.tm_year > 70) {
|
|
|
+ strftime(buf, sizeof(buf), "%H:%M", <);
|
|
|
+ json["Time"] = buf;
|
|
|
+ strftime(buf, sizeof(buf), "%d.%m.%Y", <);
|
|
|
+ json["Date"] = buf;
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+ yield();
|
|
|
+
|
|
|
+ char jsonchar[1000];
|
|
|
+ serializeJson(json, jsonchar);
|
|
|
+ httpServer.send(200, "application/json", jsonchar);
|
|
|
+ }
|
|
|
+ }); //httpServer.on /sysinfod
|
|
|
+
|
|
|
+ httpServer.on("/sysinfo", HTTP_GET, []() {
|
|
|
+ if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /sysinfo (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+ httpServerHandleSysInfoPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ /*httpServer.on("/", []() {
|
|
|
+ if ( WifiInApMode ) {
|
|
|
+ httpServer.sendHeader("Location", "/wifi.htm", true);
|
|
|
+ httpServer.send(302);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ httpServer.sendHeader("Location", "/main", true);
|
|
|
+ httpServer.send(302);
|
|
|
+ }
|
|
|
+ });*/
|
|
|
+
|
|
|
+ httpServer.on("/", []() {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ if (confLog.logWebRequests || httpServer.args() > 0)
|
|
|
+ {
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: / (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (httpServer.hasArg("restart"))
|
|
|
+ {
|
|
|
+ if (httpIsAuthenticated() || (!httpIsAuthenticated() && httpCheckToken()))
|
|
|
+ {
|
|
|
+ sendLog("WEB: /?restart", LOGLEVEL_INFO);
|
|
|
+ httpServerHandleRestartPage();
|
|
|
+ restart();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ httpSendUnauthorized();
|
|
|
+ }
|
|
|
+ else if (httpServer.hasArg("mqttreconnect"))
|
|
|
+ {
|
|
|
+ if (httpIsAuthenticated() || (!httpIsAuthenticated() && httpCheckToken()))
|
|
|
+ {
|
|
|
+ //Serial.println("web triggered mqttreconnect");
|
|
|
+ sendLog("WEB: /?mqttreconnect", LOGLEVEL_INFO);
|
|
|
+ mqttReconnect();
|
|
|
+ httpServer.sendHeader("Location", "/", true);
|
|
|
+ httpServer.send(303);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ httpSendUnauthorized();
|
|
|
+ }
|
|
|
+ else if (httpServer.hasArg("clearconf"))
|
|
|
+ {
|
|
|
+ if (httpIsAuthenticatedAdmin() || (!httpIsAuthenticatedAdmin() && httpCheckToken()))
|
|
|
+ {
|
|
|
+ sendLog("WEB: /?clearconf", LOGLEVEL_INFO);
|
|
|
+ httpServerHandleClearconfPage();
|
|
|
+
|
|
|
+ yield();
|
|
|
+ delay(5);
|
|
|
+ deleteConfig();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ httpSendUnauthorized();
|
|
|
+ }
|
|
|
+ else if (httpServer.hasArg("clearwifi"))
|
|
|
+ {
|
|
|
+ if (httpIsAuthenticatedAdmin() || (!httpIsAuthenticatedAdmin() && httpCheckToken()))
|
|
|
+ {
|
|
|
+ sendLog("WEB: /?clearwifi", LOGLEVEL_INFO);
|
|
|
+ httpServerHandleClearconfPage();
|
|
|
+
|
|
|
+ yield();
|
|
|
+ delay(5);
|
|
|
+ confClearWiFiCredentials();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ httpSendUnauthorized();
|
|
|
+ }
|
|
|
+ else if (httpServer.hasArg("clearcreds"))
|
|
|
+ {
|
|
|
+ if (httpIsAuthenticatedAdmin() || (!httpIsAuthenticatedAdmin() && httpCheckToken()))
|
|
|
+ {
|
|
|
+ sendLog("WEB: /?clearcreds", LOGLEVEL_INFO);
|
|
|
+ httpServerHandleClearconfPage();
|
|
|
+
|
|
|
+ yield();
|
|
|
+ delay(5);
|
|
|
+ confClearCredentials();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ httpSendUnauthorized();
|
|
|
+ }
|
|
|
+ else if (!httpIsAuthenticated())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ sendLog("WEB: /", LOGLEVEL_INFO);
|
|
|
+ httpServerHandleMainPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/conf", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /conf", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /conf (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleConfPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/confweb", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confweb", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confweb (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleConfWebPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/confmqtt", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confmqtt", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confmqtt (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleConfMqttPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/confdevwifi", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confdevwifi", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confdevwifi (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleConfDevWiFiPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/confbas", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confbas", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confbas (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleConfBasPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/confadv", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confadv", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confadv (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleConfAdvPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/confadd", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /confadd", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /confadd (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleConfAddPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/conftime", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /conftime", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /conftime (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleConfTimePage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/conflog", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /conflog", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /conflog (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleConfLogPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ httpServer.on("/redTemps", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /redTemps", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /redTemps (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ httpServerHandleRedTempsPage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+#ifdef ENABLE_FEATURE_WEB_CONSOLE_WEBSOCKETS
|
|
|
+ if (confWeb.wsConsole)
|
|
|
+ {
|
|
|
+ httpServer.on("/wsconsole", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /wsconsole", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /wsconsole (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+
|
|
|
+ wsValidSessionId = millis();
|
|
|
+ char sidbuf[20];
|
|
|
+ sprintf(sidbuf, "sessionId=%lu|", wsValidSessionId);
|
|
|
+ httpServer.sendHeader("Set-Cookie", sidbuf);
|
|
|
+ httpServerHandleWSConsolePage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ httpServer.on("/wsapp.js", []() {
|
|
|
+ httpServer.sendHeader("cache-control", "max-age=86400", false);
|
|
|
+ httpServer.send_P(200, "text/javascript", js_wsapp);
|
|
|
+ });
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+ httpServer.onNotFound([]() {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: 404 (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+ httpServerHandleNotFound();
|
|
|
+ }); //httpServer.onNotFound
|
|
|
+
|
|
|
+#ifdef ENABLE_FEATURE_WEB_CONSOLE_BUFFERED
|
|
|
+ if (confWeb.wConsole)
|
|
|
+ {
|
|
|
+ httpServer.on("/console", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //sendLog("WEB: /console", LOGLEVEL_INFO);
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /console (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+ httpServerHandleConsolePage();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ httpServer.on("/webcsapi", []() {
|
|
|
+ if (!httpIsAuthenticatedAdmin())
|
|
|
+ return httpServer.requestAuthentication();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (httpServer.hasArg("cmd"))
|
|
|
+ {
|
|
|
+ char buf[101];
|
|
|
+ httpServer.arg("cmd").toCharArray(buf, 100);
|
|
|
+ strlcpy(cmdPayload, buf, sizeof(cmdPayload));
|
|
|
+ cmdInQueue = true;
|
|
|
+ evalCmd();
|
|
|
+ }
|
|
|
+ if (confLog.logWebRequests)
|
|
|
+ {
|
|
|
+ String addr = httpServer.client().remoteIP().toString();
|
|
|
+ char buf[40];
|
|
|
+ sprintf(buf, "WEB: /conflog (from %s)", addr.c_str());
|
|
|
+ sendLog(buf, LOGLEVEL_INFO);
|
|
|
+ }
|
|
|
+ httpServer.send(200, "text/plain", webLogBuffer);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ httpServer.on("/csapp.js", []() {
|
|
|
+ httpServer.sendHeader("cache-control", "max-age=86400", false);
|
|
|
+ httpServer.send_P(200, "text/javascript", js_csapp);
|
|
|
+ });
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+// HTTP Updater at /update
|
|
|
+#ifdef ENABLE_FEATURE_HTTP_UPDATER
|
|
|
+ httpUpdater.setup(&httpServer, "/update", confWeb.http_user, confWeb.http_pass);
|
|
|
+#endif
|
|
|
+
|
|
|
+ httpServer.begin();
|
|
|
+}
|