@@ -36,29 +36,29 @@ void APB::WebServer::setup() {
3636 ElegantOTA.onEnd ([this ](bool success){ Log.infoln (LOG_SCOPE " OTA Finished, success=%d" , success); });
3737 Log.traceln (LOG_SCOPE " ElegantOTA setup" );
3838
39- onJsonRequest (" /api/config/accessPoint" , std::bind (&APB::WebServer:: onConfigAccessPoint, this , _1, _2), HTTP_POST | HTTP_DELETE);
40- onJsonRequest (" /api/config/station" , std::bind (&APB::WebServer:: onConfigStation, this , _1, _2), HTTP_POST | HTTP_DELETE);
41- onJsonRequest (" /api/config/statusLedDuty" , std::bind (&APB:: WebServer::onConfigStatusLedDuty, this , _1, _2), HTTP_POST);
42- server.on (" /api/metrics" , HTTP_GET, std::bind (&APB:: WebServer::onGetMetrics, this , _1));
43- server.on (" /api/config/write" , HTTP_POST, std::bind (&APB:: WebServer::onPostWriteConfig, this , _1));
44- server.on (" /api/config" , HTTP_GET, std::bind (&APB:: WebServer::onGetConfig, this , _1));
45- server.on (" /api/info" , HTTP_GET, std::bind (&APB:: WebServer::onGetESPInfo, this , _1));
46- server.on (" /api/history" , HTTP_GET, std::bind (&APB:: WebServer::onGetHistory, this , _1));
47- server.on (" /api/power" , HTTP_GET, std::bind (&APB:: WebServer::onGetPower, this , _1));
48- server.on (" /api/wifi/connect" , HTTP_POST, std::bind (&APB::WebServer:: onPostReconnectWiFi, this , _1));
39+ onJsonRequest (" /api/config/accessPoint" , std::bind (&WiFiManager:: onConfigAccessPoint, &WiFiManager::Instance , _1, _2), HTTP_POST | HTTP_DELETE);
40+ onJsonRequest (" /api/config/station" , std::bind (&WiFiManager:: onConfigStation, &WiFiManager::Instance , _1, _2), HTTP_POST | HTTP_DELETE);
41+ onJsonRequest (" /api/config/statusLedDuty" , std::bind (&WebServer::onConfigStatusLedDuty, this , _1, _2), HTTP_POST);
42+ server.on (" /api/metrics" , HTTP_GET, std::bind (&WebServer::onGetMetrics, this , _1));
43+ server.on (" /api/config/write" , HTTP_POST, std::bind (&WebServer::onPostWriteConfig, this , _1));
44+ server.on (" /api/config" , HTTP_GET, std::bind (&WebServer::onGetConfig, this , _1));
45+ server.on (" /api/info" , HTTP_GET, std::bind (&WebServer::onGetESPInfo, this , _1));
46+ server.on (" /api/history" , HTTP_GET, std::bind (&WebServer::onGetHistory, this , _1));
47+ server.on (" /api/power" , HTTP_GET, std::bind (&WebServer::onGetPower, this , _1));
48+ server.on (" /api/wifi/connect" , HTTP_POST, std::bind (&WiFiManager:: onPostReconnectWiFi, &WiFiManager::Instance , _1));
4949 #ifdef CONFIGURATION_FOR_PROTOTYPE
5050 server.on (" /api/wifi" , HTTP_DELETE, [this ](AsyncWebServerRequest *request){
5151 new Task (1'000 , TASK_ONCE, [](){WiFi.disconnect ();}, &scheduler, true );
5252 JsonResponse response (request);
5353 response.root ()[" status" ] = " Dropping WiFi" ;
5454 });
5555 #endif
56- server.on (" /api/wifi" , HTTP_GET, std::bind (&APB::WebServer:: onGetWiFiStatus, this , _1));
57- server.on (" /api/restart" , HTTP_POST, std::bind (&APB:: WebServer::onRestart, this , _1));
56+ server.on (" /api/wifi" , HTTP_GET, std::bind (&WiFiManager:: onGetWiFiStatus, &WiFiManager::Instance , _1));
57+ server.on (" /api/restart" , HTTP_POST, std::bind (&WebServer::onRestart, this , _1));
5858
59- server.on (" /api/status" , HTTP_GET, std::bind (&APB:: WebServer::onGetStatus, this , _1));
60- server.on (" /api/ambient" , HTTP_GET, std::bind (&APB:: WebServer::onGetAmbient, this , _1));
61- server.on (" /api/heaters" , HTTP_GET, std::bind (&APB:: WebServer::onGetHeaters, this , _1));
59+ server.on (" /api/status" , HTTP_GET, std::bind (&WebServer::onGetStatus, this , _1));
60+ server.on (" /api/ambient" , HTTP_GET, std::bind (&WebServer::onGetAmbient, this , _1));
61+ server.on (" /api/heaters" , HTTP_GET, std::bind (&WebServer::onGetHeaters, this , _1));
6262 server.serveStatic (" /" , LittleFS, " /web/" ).setDefaultFile (" index.html" );
6363 server.serveStatic (" /static" , LittleFS, " /web/static" ).setDefaultFile (" index.html" );
6464 server.addHandler (&events);
@@ -103,14 +103,9 @@ void APB::WebServer::onGetStatus(AsyncWebServerRequest *request) {
103103
104104void APB::WebServer::onGetConfig (AsyncWebServerRequest *request) {
105105 JsonResponse response (request);
106- response.root ()[" accessPoint" ][" essid" ] = Settings::Instance.wifi ().apConfiguration ().essid ;
107- response.root ()[" accessPoint" ][" psk" ] = Settings::Instance.wifi ().apConfiguration ().psk ;
108- for (uint8_t i=0 ; i<APB_MAX_STATIONS; i++) {
109- auto station = Settings::Instance.wifi ().station (i);
110- response.root ()[" stations" ][i][" essid" ] = station.essid ;
111- response.root ()[" stations" ][i][" psk" ] = station.psk ;
112- }
113- response.root ()[" ledDuty" ] = Settings::Instance.statusLedDuty ();
106+ JsonObject rootObject = response.root ().to <JsonObject>();
107+ WiFiManager::Instance.onGetConfig (rootObject);
108+ rootObject[" ledDuty" ] = Settings::Instance.statusLedDuty ();
114109}
115110
116111void APB::WebServer::onGetHistory (AsyncWebServerRequest *request) {
@@ -129,65 +124,12 @@ void APB::WebServer::onNotFound(AsyncWebServerRequest *request) {
129124 response.root ()[" url" ] = request->url ();
130125}
131126
132- void APB::WebServer::onConfigAccessPoint (AsyncWebServerRequest *request, JsonVariant &json) {
133- if (request->method () == HTTP_DELETE) {
134- Log.traceln (LOG_SCOPE " onConfigAccessPoint: method=%d (%s)" , request->method (), request->methodToString ());
135- Settings::Instance.wifi ().setAPConfiguration (" " , " " );
136- }
137- if (request->method () == HTTP_POST) {
138- if (Validation{request, json}.required <const char *>({" essid" , " psk" }).notEmpty (" essid" ).invalid ()) return ;
139-
140- String essid = json[" essid" ];
141- String psk = json[" psk" ];
142- Log.traceln (LOG_SCOPE " onConfigAccessPoint: essid=%s, psk=%s, method=%d (%s)" ,
143- essid.c_str (), psk.c_str (), request->method (), request->methodToString ());
144- Settings::Instance.wifi ().setAPConfiguration (essid.c_str (), psk.c_str ());
145-
146- }
147- onGetConfig (request);
148- }
149-
150-
151-
152- void APB::WebServer::onConfigStation (AsyncWebServerRequest *request, JsonVariant &json) {
153- Validation validation{request, json};
154- validation.required <int >(" index" ).range (" index" , {0 }, {APB_MAX_STATIONS-1 });
155-
156- if (request->method () == HTTP_POST) {
157- validation.required <const char *>({" essid" , " psk" }).notEmpty (" essid" );
158- }
159- if (validation.invalid ()) return ;
160- int stationIndex = json[" index" ];
161- String essid = json[" essid" ];
162- String psk = json[" psk" ];
163- Log.traceln (LOG_SCOPE " onConfigStation: `%d`, essid=`%s`, psk=`%s`, method=%d (%s)" ,
164- stationIndex, essid.c_str (), psk.c_str (), request->method (), request->methodToString ());
165- if (request->method () == HTTP_POST) {
166- Settings::Instance.wifi ().setStationConfiguration (stationIndex, essid.c_str (), psk.c_str ());
167- } else if (request->method () == HTTP_DELETE) {
168- Settings::Instance.wifi ().setStationConfiguration (stationIndex, " " , " " );
169- }
170- onGetConfig (request);
171- }
172127
173128void APB::WebServer::onPostWriteConfig (AsyncWebServerRequest *request) {
174129 Settings::Instance.save ();
175130 onGetConfig (request);
176131}
177132
178- void APB::WebServer::onGetWiFiStatus (AsyncWebServerRequest *request) {
179- JsonResponse response (request);
180- response.root ()[" wifi" ][" status" ] = WiFiManager::Instance.statusAsString ();
181- response.root ()[" wifi" ][" essid" ] = WiFiManager::Instance.essid ();
182- response.root ()[" wifi" ][" ip" ] = WiFiManager::Instance.ipAddress ();
183- response.root ()[" wifi" ][" gateway" ] = WiFiManager::Instance.gateway ();
184- }
185-
186- void APB::WebServer::onPostReconnectWiFi (AsyncWebServerRequest *request) {
187- WiFiManager::Instance.reconnect ();
188- onGetConfig (request);
189- }
190-
191133void APB::WebServer::onGetAmbient (AsyncWebServerRequest *request) {
192134 if (!Ambient::Instance.reading ()) {
193135 JsonResponse::error (500 , " Ambient reading not available" , request);
0 commit comments