diff --git a/html-ui/configureprinter.html b/html-ui/configureprinter.html new file mode 100644 index 0000000..84a818c --- /dev/null +++ b/html-ui/configureprinter.html @@ -0,0 +1,255 @@ + + + + + + + +
+ + Printer Buddy  + V4.0 + + +
+ + +
+ + +
+ +
+ + +
+
+
+

Printers to monitor

+

Configuration

+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeHostnameIPStateApi Key/User/Password
I3 MegaKlipper--192.168.0.241:7125OfflineOffline + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+ + +
+
+
+
+
+ +
+
+
+ +


+ +
+ + + + + + + + + \ No newline at end of file diff --git a/html-ui/configurestation.html b/html-ui/configurestation.html new file mode 100644 index 0000000..1fba4f3 --- /dev/null +++ b/html-ui/configurestation.html @@ -0,0 +1,201 @@ + + + + + + + +
+ + Printer Buddy  + V4.0 + + +
+ + +
+ + +
+ +
+ + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+ + + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ + + + + + + +
+
+ +
+
+
+ +


+ +
+ + + + + + + + + \ No newline at end of file diff --git a/html-ui/configureweather.html b/html-ui/configureweather.html new file mode 100644 index 0000000..31bb63d --- /dev/null +++ b/html-ui/configureweather.html @@ -0,0 +1,170 @@ + + + + + + + +
+ + Printer Buddy  + V4.0 + + +
+ + +
+ + +
+ +
+ + + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+ + +
+
+
+
+
+ +
+
+
+ +


+ +
+ + + + + + + + + \ No newline at end of file diff --git a/html-ui/index.html b/html-ui/index.html new file mode 100644 index 0000000..fe89e03 --- /dev/null +++ b/html-ui/index.html @@ -0,0 +1,105 @@ + + + + + + + +
+ + Printer Buddy  + V4.0 + + +
+ + +
+ + +
+ +
+
+
+
+
+ Update Firmware +

Select the firmware you want to upload

+
+ +
+
+
+ +
+
+ + +
+
+
+ Update FileSystem +

Select the filesystem you want to upload

+
+ +
+
+
+ +
+
+
+ +
+ + + + + + + \ No newline at end of file diff --git a/html-ui/upload.html b/html-ui/upload.html new file mode 100644 index 0000000..30cb3bc --- /dev/null +++ b/html-ui/upload.html @@ -0,0 +1,105 @@ + + + + + + + +
+ + Printer Buddy  + V4.0 + + +
+ + +
+ + +
+ +
+ + +
+
+
+
+ Update Firmware +

Select the firmware you want to upload

+
+ +
+
+
+ +
+
+ + +
+
+
+ Update FileSystem +

Select the filesystem you want to upload

+
+ +
+
+
+ +
+
+
+ +
+ + + + + + + \ No newline at end of file diff --git a/src/Network/WebServer.cpp b/src/Network/WebServer.cpp index 9223594..a953d8b 100644 --- a/src/Network/WebServer.cpp +++ b/src/Network/WebServer.cpp @@ -18,51 +18,6 @@ static const char THEME_FORM[] PROGMEM = "

Theme Color Display Weather when printer is off

" - "" - "" - "

" - "

Use Metric (Celsius)

" - "

Weather Language

" - "" - ""; - -static const char LANG_OPTIONS[] PROGMEM = "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - ""; - static const char COLOR_THEMES[] PROGMEM = "" "" "" @@ -101,10 +56,12 @@ void WebServer::setup() { this->server->on("/", []() { obj->displayPrinterStatus(); }); this->server->on("/systemreset", []() { obj->handleSystemReset(); }); this->server->on("/forgetwifi", []() { obj->handleWifiReset(); }); - this->server->on("/updateconfig", []() { obj->handleUpdateConfig(); }); - this->server->on("/updateweatherconfig", []() { obj->handleUpdateWeather(); }); - this->server->on("/configure", []() { obj->handleConfigure(); }); + this->server->on("/configurestation", []() { obj->handleConfigureStation(); }); + this->server->on("/configureprinter", []() { obj->handleConfigurePrinter(); }); this->server->on("/configureweather", []() { obj->handleWeatherConfigure(); }); + this->server->on("/updateconfig", []() { obj->handleUpdateConfig(); }); + this->server->on("/updatestationconfig", []() { obj->handleUpdateStation(); }); + this->server->on("/updateweatherconfig", []() { obj->handleUpdateWeather(); }); this->server->on("/update", HTTP_GET, []() { obj->handleUpdatePage(); }); this->server->onNotFound([]() { obj->redirectHome(); }); this->serverUpdater->setup(this->server, "/update", this->globalDataController->getWebserverUsername(), this->globalDataController->getWebserverPassword()); @@ -252,28 +209,7 @@ void WebServer::displayPrinterStatus() { WebserverMemoryVariables::sendFooter(this->server, this->globalDataController); } -void WebServer::handleSystemReset() { - if (!this->authentication()) { - return this->server->requestAuthentication(); - } - this->debugController->printLn("Reset System Configuration"); - if (this->globalDataController->resetConfig()) { - redirectHome(); - ESP.restart(); - } -} -void WebServer::handleWifiReset() { - if (!this->authentication()) { - return this->server->requestAuthentication(); - } - //WiFiManager - //Local intialization. Once its business is done, there is no need to keep it around - redirectHome(); - WiFiManager wifiManager; - wifiManager.resetSettings(); - ESP.restart(); -} void WebServer::handleUpdateConfig() { boolean flipOld = this->globalDataController->isDisplayInverted(); @@ -349,23 +285,7 @@ void WebServer::findMDNS() { } } -void WebServer::handleUpdateWeather() { - if (!this->authentication()) { - return this->server->requestAuthentication(); - } - this->globalDataController->setWeatherShow(this->server->hasArg("isWeatherEnabled")); - this->globalDataController->setWeatherApiKey(this->server->arg("openWeatherMapApiKey")); - this->globalDataController->setWeatherCityId(this->server->arg("city1").toInt()); - this->globalDataController->setWeatherIsMetric(this->server->hasArg("metric")); - this->globalDataController->setWeatherLang(this->server->arg("language")); - this->globalDataController->writeSettings(); - - //isClockOn = false; // this will force a check for the display - //checkDisplay(); - this->globalDataController->getTimeClient()->resetLastEpoch(); - this->redirectHome(); -} - +/* void WebServer::handleConfigure() { if (!this->authentication()) { return this->server->requestAuthentication(); @@ -470,55 +390,27 @@ void WebServer::handleConfigure() { form.replace("%PRINTERPASS%", this->globalDataController->getPrinterAuthPass()); this->server->sendContent(form); - form = FPSTR(CLOCK_FORM); - String isClockChecked = ""; - if (DISPLAYCLOCK) { - isClockChecked = "checked='checked'"; - } - form.replace("%IS_CLOCK_CHECKED%", isClockChecked); - String is24hourChecked = ""; - if (this->globalDataController->getClockIs24h()) { - is24hourChecked = "checked='checked'"; - } - form.replace("%IS_24HOUR_CHECKED%", is24hourChecked); - String isInvDisp = ""; - if (this->globalDataController->isDisplayInverted()) { - isInvDisp = "checked='checked'"; - } - form.replace("%IS_INVDISP_CHECKED%", isInvDisp); - String isFlashLED = ""; - if (USE_FLASH) { - isFlashLED = "checked='checked'"; - } - form.replace("%USEFLASH%", isFlashLED); - String hasPSUchecked = ""; - if (this->globalDataController->hasPrinterPsu()) { - hasPSUchecked = "checked='checked'"; - } - form.replace("%HAS_PSU_CHECKED%", hasPSUchecked); - - String options = ""; - options.replace(">"+String(this->globalDataController->getClockResyncMinutes())+"<", " selected>"+String(this->globalDataController->getClockResyncMinutes())+"<"); - form.replace("%OPTIONS%", options); - this->server->sendContent(form); - - form = FPSTR(THEME_FORM); - String themeOptions = FPSTR(COLOR_THEMES); - themeOptions.replace(">"+String(this->globalDataController->getWebserverTheme())+"<", " selected>"+String(this->globalDataController->getWebserverTheme())+"<"); - form.replace("%THEME_OPTIONS%", themeOptions); - form.replace("%UTCOFFSET%", String(this->globalDataController->getClockUtcOffset())); - String isUseSecurityChecked = ""; - if (this->globalDataController->getWebserverIsBasicAuth()) { - isUseSecurityChecked = "checked='checked'"; - } - form.replace("%IS_BASICAUTH_CHECKED%", isUseSecurityChecked); - form.replace("%USERID%", String(this->globalDataController->getWebserverUsername())); - form.replace("%STATIONPASSWORD%", String(this->globalDataController->getWebserverPassword())); + WebserverMemoryVariables::sendFooter(this->server, this->globalDataController); +}*/ - this->server->sendContent(form); + + + + + + + + + + +void WebServer::handleConfigurePrinter() { + if (!this->authentication()) { + return this->server->requestAuthentication(); + } + WebserverMemoryVariables::sendHeader(this->server, this->globalDataController, "Configure", "Printers"); WebserverMemoryVariables::sendFooter(this->server, this->globalDataController); } @@ -538,6 +430,51 @@ void WebServer::handleConfigure() { + + + +/** + * @brief Send station configuration page to client + */ +void WebServer::handleConfigureStation() { + if (!this->authentication()) { + return this->server->requestAuthentication(); + } + WebserverMemoryVariables::sendHeader(this->server, this->globalDataController, "Configure", "Station"); + WebserverMemoryVariables::sendStationConfigForm(this->server, this->globalDataController); + WebserverMemoryVariables::sendFooter(this->server, this->globalDataController); +} + +/** + * @brief Update configuration for station + */ +void WebServer::handleUpdateStation() { + boolean flipOld = this->globalDataController->isDisplayInverted(); + if (!this->authentication()) { + return this->server->requestAuthentication(); + } + + this->globalDataController->setDisplayClock(this->server->hasArg("isClockEnabled")); + this->globalDataController->setIsDisplayInverted(this->server->hasArg("invDisp")); + this->globalDataController->setUseLedFlash(this->server->hasArg("useFlash")); + this->globalDataController->setClockIs24h(this->server->hasArg("is24hour")); + this->globalDataController->setClockResyncMinutes(this->server->arg("refresh").toInt()); + this->globalDataController->setClockUtcOffset(this->server->arg("utcoffset").toFloat()); + this->globalDataController->setWebserverIsBasicAuth(this->server->hasArg("isBasicAuth")); + String temp = this->server->arg("userid"); + this->globalDataController->setWebserverUsername(temp); + temp = this->server->arg("stationpassword"); + this->globalDataController->setWebserverPassword(temp); + this->globalDataController->writeSettings(); + + if (this->globalDataController->isDisplayInverted() != flipOld) { + this->globalDataController->getDisplayClient()->flipDisplayUpdate(); + } + this->globalDataController->getDisplayClient()->handleUpdate(); + this->globalDataController->getTimeClient()->resetLastEpoch(); + this->redirectHome(); +} + /** * @brief Send weather configuration page to client */ @@ -546,34 +483,58 @@ void WebServer::handleWeatherConfigure() { return this->server->requestAuthentication(); } WebserverMemoryVariables::sendHeader(this->server, this->globalDataController, "Configure", "Weather"); - - String html = ""; - - - - String form = FPSTR(WEATHER_FORM); - String isWeatherChecked = ""; - if (DISPLAYWEATHER) { - isWeatherChecked = "checked='checked'"; - } - form.replace("%IS_WEATHER_CHECKED%", this->globalDataController->getWeatherShow() ? "1" : "0"); - form.replace("%WEATHERKEY%", this->globalDataController->getWeatherApiKey()); - form.replace("%CITYNAME1%", this->globalDataController->getWeatherClient()->getCity(0)); - form.replace("%CITY1%", String(this->globalDataController->getWeatherCityId())); - String checked = ""; - if (this->globalDataController->getWeatherIsMetric()) { - checked = "checked='checked'"; - } - form.replace("%METRIC%", checked); - String options = FPSTR(LANG_OPTIONS); - options.replace(">"+String(this->globalDataController->getWeatherLang())+"<", " selected>"+String(this->globalDataController->getWeatherLang())+"<"); - form.replace("%LANGUAGEOPTIONS%", options); - this->server->sendContent(form); - - + WebserverMemoryVariables::sendWeatherConfigForm(this->server, this->globalDataController); WebserverMemoryVariables::sendFooter(this->server, this->globalDataController); } +/** + * @brief Update configuration for weather + */ +void WebServer::handleUpdateWeather() { + if (!this->authentication()) { + return this->server->requestAuthentication(); + } + this->globalDataController->setWeatherShow(this->server->hasArg("isWeatherEnabled")); + this->globalDataController->setWeatherApiKey(this->server->arg("openWeatherMapApiKey")); + this->globalDataController->setWeatherCityId(this->server->arg("city1").toInt()); + this->globalDataController->setWeatherIsMetric(this->server->hasArg("metric")); + this->globalDataController->setWeatherLang(this->server->arg("language")); + this->globalDataController->writeSettings(); + + this->globalDataController->getDisplayClient()->handleUpdate(); + this->globalDataController->getTimeClient()->resetLastEpoch(); + this->redirectHome(); +} + +/** + * @brief Reset internal configuration data + */ +void WebServer::handleSystemReset() { + if (!this->authentication()) { + return this->server->requestAuthentication(); + } + this->debugController->printLn("Reset System Configuration"); + if (this->globalDataController->resetConfig()) { + redirectHome(); + ESP.restart(); + } +} + +/** + * @brief Reset internal WiFi configuration data + */ +void WebServer::handleWifiReset() { + if (!this->authentication()) { + return this->server->requestAuthentication(); + } + //WiFiManager + //Local intialization. Once its business is done, there is no need to keep it around + redirectHome(); + WiFiManager wifiManager; + wifiManager.resetSettings(); + ESP.restart(); +} + /** * @brief Send firmware/filesystem update page to client */ diff --git a/src/Network/WebServer.h b/src/Network/WebServer.h index 97f02e1..a79803f 100644 --- a/src/Network/WebServer.h +++ b/src/Network/WebServer.h @@ -26,8 +26,10 @@ public: void handleSystemReset(); void handleWifiReset(); void handleUpdateConfig(); + void handleUpdateStation(); void handleUpdateWeather(); - void handleConfigure(); + void handleConfigurePrinter(); + void handleConfigureStation(); void handleWeatherConfigure(); void handleUpdatePage(); }; diff --git a/src/Network/WebserverMemoryVariables.cpp b/src/Network/WebserverMemoryVariables.cpp index 8e7be17..84c6041 100644 --- a/src/Network/WebserverMemoryVariables.cpp +++ b/src/Network/WebserverMemoryVariables.cpp @@ -33,59 +33,30 @@ void WebserverMemoryVariables::sendHeader( server->setContentLength(CONTENT_LENGTH_UNKNOWN); server->send(200, "text/html", ""); - server->sendContent("" - "PrintBuddy" - "" - "" - ); + server->sendContent(String(FPSTR(HEADER_BLOCK1))); if (refresh) { server->sendContent(""); } - server->sendContent("" - "" - "" - "" - "" - "" - "
" - "" - ); + server->sendContent(String(FPSTR(HEADER_BLOCK2))); server->sendContent("PrintBuddy V" + String(VERSION)); - server->sendContent("" - "" - "
" - "" - "" - "
" - "" - "" - "
" - "" - "
" - "
"); + server->sendContent("
"); } /** @@ -94,8 +65,7 @@ void WebserverMemoryVariables::sendHeader( * @param globalDataController Access to global data */ void WebserverMemoryVariables::sendFooter(ESP8266WebServer *server, GlobalDataController *globalDataController) { - server->sendContent("


"); - server->sendContent(""); + server->sendContent(String(FPSTR(FOOTER_BLOCK))); server->sendContent(""); server->client().stop(); globalDataController->ledOnOff(false); @@ -108,4 +78,107 @@ void WebserverMemoryVariables::sendFooter(ESP8266WebServer *server, GlobalDataCo */ void WebserverMemoryVariables::sendUpdateForm(ESP8266WebServer *server, GlobalDataController *globalDataController) { server->sendContent(FPSTR(UPDATE_FORM)); -} \ No newline at end of file +} + +/** + * @brief Send out configuration for weather + * @param server Send out instancce + * @param globalDataController Access to global data + */ +void WebserverMemoryVariables::sendWeatherConfigForm(ESP8266WebServer *server, GlobalDataController *globalDataController) { + String isWeatherChecked = ""; + String isMetricChecked = ""; + if (globalDataController->getWeatherShow()) { + isWeatherChecked = "checked='checked'"; + } + if (globalDataController->getWeatherIsMetric()) { + isMetricChecked = "checked='checked'"; + } + + String form = FPSTR(WEATHER_FORM1); + form.replace("%IS_WEATHER_CHECKED%", isWeatherChecked); + server->sendContent(form); + + form = FPSTR(WEATHER_FORM2); + form.replace("%METRIC%", isMetricChecked); + server->sendContent(form); + + form = FPSTR(WEATHER_FORM3); + form.replace("%WEATHERKEY%", globalDataController->getWeatherApiKey()); + server->sendContent(form); + + form = FPSTR(WEATHER_FORM4); + form.replace("%CITY1%", String(globalDataController->getWeatherCityId())); + form.replace("%CITYNAME1%", globalDataController->getWeatherClient()->getCity(0)); + server->sendContent(form); + + form = FPSTR(WEATHER_FORM_OPTIONS); + form.replace(">"+String(globalDataController->getWeatherLang())+"<", " selected>"+String(globalDataController->getWeatherLang())+"<"); + server->sendContent(form); + + form = FPSTR(WEATHER_FORM5); + server->sendContent(form); +} + +/** + * @brief Send out configuration for station + * @param server Send out instancce + * @param globalDataController Access to global data + */ +void WebserverMemoryVariables::sendStationConfigForm(ESP8266WebServer *server, GlobalDataController *globalDataController) { + String isClockChecked = ""; + String is24hourChecked = ""; + String isInvDisp = ""; + String isFlashLED = ""; + String isUseSecurityChecked = ""; + if (globalDataController->isDisplayInverted()) { + isInvDisp = "checked='checked'"; + } + if (globalDataController->useLedFlash()) { + isFlashLED = "checked='checked'"; + } + if (globalDataController->getDisplayClock()) { + isClockChecked = "checked='checked'"; + } + if (globalDataController->getClockIs24h()) { + is24hourChecked = "checked='checked'"; + } + if (globalDataController->getWebserverIsBasicAuth()) { + isUseSecurityChecked = "checked='checked'"; + } + + String form = FPSTR(STATION_CONFIG_FORM1); + form.replace("%IS_CLOCK_CHECKED%", isClockChecked); + server->sendContent(form); + + form = FPSTR(STATION_CONFIG_FORM2); + form.replace("%IS_24HOUR_CHECKED%", is24hourChecked); + server->sendContent(form); + + form = FPSTR(STATION_CONFIG_FORM3); + form.replace("%IS_INVDISP_CHECKED%", isInvDisp); + server->sendContent(form); + + form = FPSTR(STATION_CONFIG_FORM4); + form.replace("%USEFLASH%", isFlashLED); + server->sendContent(form); + + form = FPSTR(STATION_CONFIG_FORM5); + String options = FPSTR(STATION_CONFIG_FORM5OPT); + options.replace(">"+String(globalDataController->getClockResyncMinutes())+"<", " selected>"+String(globalDataController->getClockResyncMinutes())+"<"); + form.replace("%OPTIONS%", options); + server->sendContent(form); + + form = FPSTR(STATION_CONFIG_FORM6); + form.replace("%UTCOFFSET%", String(globalDataController->getClockUtcOffset())); + server->sendContent(form); + + form = FPSTR(STATION_CONFIG_FORM7); + form.replace("%IS_BASICAUTH_CHECKED%", isUseSecurityChecked); + server->sendContent(form); + + form = FPSTR(STATION_CONFIG_FORM8); + form.replace("%USERID%", globalDataController->getWebserverUsername()); + form.replace("%STATIONPASSWORD%", globalDataController->getWebserverPassword()); + server->sendContent(form); +} diff --git a/src/Network/WebserverMemoryVariables.h b/src/Network/WebserverMemoryVariables.h index 1f543a5..c907819 100644 --- a/src/Network/WebserverMemoryVariables.h +++ b/src/Network/WebserverMemoryVariables.h @@ -9,17 +9,71 @@ */ static const char MENUE_ITEMS[] PROGMEM = "
  • Home
  • " - "
  • Configure
  • " + "
  • Configure Printers
  • " + "
  • Configure Station
  • " "
  • Weather
  • " "
  • Reset Settings
  • " "
  • Forget WiFi
  • " "
  • Firmware Update
  • " "
  • About
  • "; +/** + * Basic header/footer blocks + */ +static const char HEADER_BLOCK1[] PROGMEM = "" + "PrintBuddy" + "" + ""; + +static const char HEADER_BLOCK2[] PROGMEM = "" + "" + "" + "" + "" + "" + "
    " + ""; + +static const char HEADER_BLOCK3[] PROGMEM = "" + "" + "
    " + "" + "" + "
    " + "" + "" + "
    " + "" + "
    " + "" + "" + "" +""; + /** * Controls for update firmware/filesystem */ -static const char UPDATE_FORM[] PROGMEM = "
    " +static const char UPDATE_FORM[] PROGMEM = "
    " + "
    " "
    " "
    " "Update Firmware" @@ -54,7 +108,231 @@ static const char UPDATE_FORM[] PROGMEM = "
    " "
    " "" "" - "
    "; + "
    " +"
    "; + +/** + * Controls for weather configuration + */ +static const char WEATHER_FORM1[] PROGMEM = "
    " + "
    " + "
    " + "" + "" + "
    " + "
    "; + +static const char WEATHER_FORM2[] PROGMEM = "
    " + "
    " + "" + "" + "
    " + "
    "; + +static const char WEATHER_FORM3[] PROGMEM = "
    " + "
    " + "" + "" + "
    " + "
    "; + +static const char WEATHER_FORM4[] PROGMEM = "
    " + "
    " + "" + "" + "
    " + "
    " + "
    " + "
    " + "" + "
    " + "" + "" + "
    " + "
    " + "
    " + "
    " + "
    " + "" + "
    " + "
    " + "
    " + ""; + +static const char WEATHER_FORM_OPTIONS[] PROGMEM = "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""; + +/** + * Controls for station configuration + */ +static const char STATION_CONFIG_FORM1[] PROGMEM = "
    " + "
    " + "
    " + "" + "" + "
    " + "
    "; + +static const char STATION_CONFIG_FORM2[] PROGMEM = "
    " + "
    " + "" + "" + "
    " + "
    "; + +static const char STATION_CONFIG_FORM3[] PROGMEM = "
    " + "
    " + "" + "" + "
    " + "
    "; + +static const char STATION_CONFIG_FORM4[] PROGMEM = "
    " + "
    " + "" + "" + "
    " + "
    "; + +static const char STATION_CONFIG_FORM5[] PROGMEM = "
    " + "
    " + "" + "
    " + "" + "" + "
    " + "
    " + "
    "; + +static const char STATION_CONFIG_FORM5OPT[] PROGMEM = "" + "" + "" + "" + ""; + +static const char STATION_CONFIG_FORM6[] PROGMEM = "
    " + "
    " + "" + "" + "
    " + "
    "; + +static const char STATION_CONFIG_FORM7[] PROGMEM = "
    " + "
    " + "" + "" + "
    " + "
    "; + +static const char STATION_CONFIG_FORM8[] PROGMEM = "
    " + "
    " + "" + "" + "
    " + "
    " + "
    " + "
    " + "" + "" + "
    " + "
    " + "
    " + "
    " + "" + "
    " + "
    " + "
    "; /** * @brief Class to generate HTML content from Memory @@ -66,4 +344,6 @@ public: static void sendFooter(ESP8266WebServer *server, GlobalDataController *globalDataController); static void sendUpdateForm(ESP8266WebServer *server, GlobalDataController *globalDataController); + static void sendWeatherConfigForm(ESP8266WebServer *server, GlobalDataController *globalDataController); + static void sendStationConfigForm(ESP8266WebServer *server, GlobalDataController *globalDataController); };