CanGrow/include/CanGrow_Webserver.h

131 lines
4.4 KiB
C

/*
*
* include/CanGrow_Webserver.h - webserver header file
*
*
*
*/
/*
* include static files files
*/
#include "Webserver/File_cangrow_CSS.h"
#include "Webserver/File_cangrow_JS.h"
#include "Webserver/File_favicon_ico.h"
/*
* include webpages header files
*/
#include "Webserver/Header.h"
#include "Webserver/Footer.h"
#include "Webserver/Webserver_Common.h"
#include "Webserver/Page_404.h"
#include "Webserver/Page_root.h"
#include "Webserver/Page_wifi.h"
#include "Webserver/Page_system.h"
#include "Webserver/Page_grow.h"
/*
* include Api header files
*/
#include "Webserver/Api_sensor.h"
AsyncWebServer webserver(80);
// load requestLogger middleware
AsyncLoggingMiddleware requestLogger;
/*
* setup all the webhandlers
*/
void Webserver_Init() {
const static char LogLoc[] PROGMEM = "[Webserver]";
Log.notice(F("%s initializing" CR), LogLoc);
/* url handler definition */
webserver.on("/", HTTP_GET, WebPage_root);
webserver.on("/cangrow.css", HTTP_GET, WebFile_cangrow_CSS);
webserver.on("/cangrow.js", HTTP_GET, WebFile_cangrow_JS);
webserver.on("/favicon.ico", HTTP_GET, WebFile_favicon_ico);
webserver.on("/wifi/", HTTP_GET, WebPage_wifi);
webserver.on("/wifi/", HTTP_POST, WebPage_wifi);
webserver.on("/system/", HTTP_GET, WebPage_system);
webserver.on("/system/", HTTP_POST, WebPage_system);
webserver.on("/system/update", HTTP_GET, WebPage_system_update);
webserver.on("/system/update", HTTP_POST, WebPage_system_update, WebPage_system_update_ApplyUpdate);
webserver.on("/system/restart", HTTP_GET, WebPage_system_restart);
webserver.on("/system/restart", HTTP_POST, WebPage_system_restart);
webserver.on("/system/wipe", HTTP_GET, WebPage_system_wipe);
webserver.on("/system/wipe", HTTP_POST, WebPage_system_wipe);
webserver.on("/system/output/", HTTP_GET, WebPage_system_output);
webserver.on("/system/output/", HTTP_POST, WebPage_system_output);
webserver.on("/system/output/add", HTTP_GET, WebPage_system_output_add);
webserver.on("/system/output/add", HTTP_POST, WebPage_system_output_add);
webserver.on("/system/sensor/", HTTP_GET, WebPage_system_sensor);
webserver.on("/system/sensor/", HTTP_POST, WebPage_system_sensor);
webserver.on("/system/sensor/add", HTTP_GET, WebPage_system_sensor_add);
webserver.on("/system/sensor/add", HTTP_POST, WebPage_system_sensor_add);
webserver.on("/system/sensor/calibrate", HTTP_GET, WebPage_system_sensor_calibrate);
webserver.on("/system/sensor/calibrate", HTTP_POST, WebPage_system_sensor_calibrate);
/* grow */
webserver.on("/grow/", HTTP_GET, WebPage_grow);
webserver.on("/grow/", HTTP_POST, WebPage_grow);
webserver.on("/grow/light/", HTTP_GET, WebPage_grow_light);
webserver.on("/grow/light/", HTTP_POST, WebPage_grow_light);
webserver.on("/grow/air/", HTTP_GET, WebPage_grow_air);
webserver.on("/grow/air/", HTTP_POST, WebPage_grow_air);
webserver.on("/grow/water/", HTTP_GET, WebPage_grow_water);
webserver.on("/grow/water/", HTTP_POST, WebPage_grow_water);
webserver.on("/grow/dashboard/", HTTP_GET, WebPage_grow_dashboard);
webserver.on("/grow/dashboard/", HTTP_POST, WebPage_grow_dashboard);
/* api */
//webserver.on("/api/sensor", HTTP_GET, Api_sensor_data);
webserver.on("/api/sensor/", HTTP_GET, Api_sensor_data);
webserver.on("/api/sensor/raw", HTTP_GET, Api_sensor_data_raw);
webserver.on("/api/sensor/driver", HTTP_GET, Api_sensor_driver);
/* DEBUG only - offer config for direct download */
#ifndef DEBUG
webserver.serveStatic(CANGROW_CFG, LittleFS, CANGROW_CFG);
#endif
/* 404 Error page */
webserver.onNotFound(WebserverNotFound);
// this activates the middleware
if(config.system.httpLogSerial == true) {
requestLogger.setOutput(Serial);
Log.notice(F("%s serial logging: enabled" CR), LogLoc);
webserver.addMiddleware(&requestLogger);
} else {
Log.notice(F("%s serial logging: disabled" CR), LogLoc);
}
// Workaround, see comment at
// https://github.com/mathieucarbou/ESPAsyncWebServer/blob/main/docs/index.md#scanning-for-available-wifi-networks
// call the network scan once, so there are some values at the first call
// of the wifi settings page. otherwise the first call of the wifi scan would return
// an empty list of networks
Log.notice(F("%s call [wifi:ScanNetworks] to workaround empty scan results bug" CR), LogLoc);
WebPage_wifi_ScanNetworks();
webserver.begin();
Log.notice(F("%s Ready to serve" CR), LogLoc);
}