55#include < ArduinoLog.h>
66#include < forward_list>
77#include < webvalidation.h>
8- #include < jsonresponse .h>
8+ #include < jsonwebresponse .h>
99#include " metricsresponse.h"
1010#include < esp_system.h>
1111#include < LittleFS.h>
@@ -48,7 +48,7 @@ void APB::WebServer::setup() {
4848 #ifdef CONFIGURATION_FOR_PROTOTYPE
4949 server.on (" /api/wifi" , HTTP_DELETE, [this ](AsyncWebServerRequest *request){
5050 new Task (1'000 , TASK_ONCE, [](){WiFi.disconnect ();}, &scheduler, true );
51- JsonResponse response (request);
51+ JsonWebResponse response (request);
5252 response.root ()[" status" ] = " Dropping WiFi" ;
5353 });
5454 #endif
@@ -94,13 +94,13 @@ void APB::WebServer::setup() {
9494
9595
9696void APB::WebServer::onRestart (AsyncWebServerRequest *request) {
97- JsonResponse response (request);
97+ JsonWebResponse response (request);
9898 response.root ()[" status" ] = " restarting" ;
9999 new Task (3000 , TASK_ONCE, [](){ esp_restart (); }, &scheduler, true );
100100}
101101
102102void APB::WebServer::onGetStatus (AsyncWebServerRequest *request) {
103- JsonResponse response (request);
103+ JsonWebResponse response (request);
104104 response.root ()[" status" ] = " ok" ;
105105 response.root ()[" uptime" ] = esp_timer_get_time () / 1000'000.0 ;
106106
@@ -110,7 +110,7 @@ void APB::WebServer::onGetStatus(AsyncWebServerRequest *request) {
110110}
111111
112112void APB::WebServer::onGetConfig (AsyncWebServerRequest *request) {
113- JsonResponse response (request);
113+ JsonWebResponse response (request);
114114 JsonObject rootObject = response.root ().to <JsonObject>();
115115 WiFiManager::Instance.onGetConfig (rootObject);
116116 rootObject[" ledDuty" ] = Settings::Instance.statusLedDuty ();
@@ -134,26 +134,19 @@ void APB::WebServer::onPostWriteConfig(AsyncWebServerRequest *request) {
134134
135135void APB::WebServer::onGetAmbient (AsyncWebServerRequest *request) {
136136 if (!Ambient::Instance.reading ()) {
137- JsonResponse ::error (500 , " Ambient reading not available" , request);
137+ JsonWebResponse ::error (JsonWebResponse::InternalError , " Ambient reading not available" , request);
138138 return ;
139139 }
140- JsonResponse response (request);
140+ JsonWebResponse response (request);
141141 Ambient::Instance.toJson (response.root ().to <JsonObject>());
142142}
143143
144-
145-
146- void APB::WebServer::onGetPWMOutputs (AsyncWebServerRequest *request) {
147- JsonResponse response (request);
148- CommandParser::Instance.getPWMOutputs (response.root ().to <JsonArray>());
149- }
150-
151144void APB::WebServer::onGetPower (AsyncWebServerRequest *request) {
152145 if (!PowerMonitor::Instance.status ().initialised ) {
153- JsonResponse ::error (500 , " Power reading not available" , request);
146+ JsonWebResponse ::error (JsonWebResponse::InternalError , " Power reading not available" , request);
154147 return ;
155148 }
156- JsonResponse response (request);
149+ JsonWebResponse response (request);
157150 PowerMonitor::Instance.toJson (response.root ().to <JsonObject>());
158151}
159152
@@ -231,7 +224,7 @@ void APB::WebServer::onGetMetrics(AsyncWebServerRequest *request) {
231224
232225
233226void APB::WebServer::onGetESPInfo (AsyncWebServerRequest *request) {
234- JsonResponse response (request);
227+ JsonWebResponse response (request);
235228 response.root ()[" mem" ][" freeHeap" ] = ESP.getFreeHeap ();
236229 response.root ()[" mem" ][" freePsRam" ] = ESP.getFreePsram ();
237230 response.root ()[" mem" ][" heapSize" ] = ESP.getHeapSize ();
@@ -251,53 +244,24 @@ void APB::WebServer::onGetESPInfo(AsyncWebServerRequest *request) {
251244
252245void APB::WebServer::onPostSetPWMOutputs (AsyncWebServerRequest *request, JsonVariant &json) {
253246 WebValidation validation{request, json};
254- if (validation.required <int >(" index" ).required <const char *>(" mode" )
255- .range (" index" , {0 }, {PWMOutputs::Instance.size ()-1 })
256- .range (" max_duty" , {0 }, {1 })
257- .choice (" mode" , PWMOutput::validModes ()).invalid ()) return ;
258-
259- PWMOutput::Mode mode = PWMOutput::modeFromString (json[" mode" ]);
260- if (mode != PWMOutput::Mode::off) {
261- if (validation.range (" max_duty" , {0 }, {1 }).required <float >(" max_duty" ).invalid ()) return ;
262- if (mode == PWMOutput::Mode::dewpoint) {
263- if (validation
264- .range (" dewpoint_offset" , {-30 }, {30 })
265- .required <float >(" dewpoint_offset" )
266- .range (" min_duty" , 0 , 1 )
267- .range (" ramp_offset" , 0 , 20 )
268- .invalid ()
269- ) return ;
270- }
271- if (mode == PWMOutput::Mode::target_temperature) {
272- if (validation
273- .range (" target_temperature" , {-50 }, {50 })
274- .required <float >(" target_temperature" )
275- .range (" min_duty" , 0 , 1 )
276- .range (" ramp_offset" , 0 , 20 )
277- .invalid ()
278- ) return ;
279- }
280- }
247+ CommandParser::Instance.setPWMOutputs (validation);
248+ JsonWebResponse response (request, CommandParser::Instance.getPWMOutputs ());
249+ }
281250
282- PWMOutput &pwmOutput = PWMOutputs::Instance[json[" index" ]];
283- const char *errorMessage = pwmOutput.setState (json);
284- if (errorMessage) {
285- JsonResponse::error (500 , errorMessage, request);
286- return ;
287- }
288- if (pwmOutput.applyAtStartup ()) {
289- PWMOutputs::saveConfig ();
290- }
291- onGetPWMOutputs (request);
251+ void APB::WebServer::onGetPWMOutputs (AsyncWebServerRequest *request) {
252+ auto jsonResponse = CommandParser::Instance.getPWMOutputs ();
253+ JsonWebResponse response (request, jsonResponse);
292254}
293255
256+
257+
294258void APB::WebServer::onConfigStatusLedDuty (AsyncWebServerRequest *request, JsonVariant &json) {
295259 WebValidation validation{request, json};
296260 if (validation.required <float >(" duty" )
297261 .range (" duty" , {0 }, {1 })
298262 .invalid ()) return ;
299263 StatusLed::Instance.setDuty (json[" duty" ]);
300- JsonResponse response (request);
264+ JsonWebResponse response (request);
301265 response.root ()[" duty" ] = StatusLed::Instance.duty ();
302266}
303267
@@ -317,7 +281,7 @@ void APB::WebServer::onConfigPowerSourceType(AsyncWebServerRequest *request, Jso
317281 .choice (" powerSourceType" , choices)
318282 .invalid ()) return ;
319283 Settings::Instance.setPowerSource (mapping.at (json[" powerSourceType" ]));
320- JsonResponse response (request);
284+ JsonWebResponse response (request);
321285 response.root ()[" powerSourceType" ] = Settings::PowerSourcesNames.at (Settings::Instance.powerSource ());
322286}
323287
0 commit comments