Skip to content

Commit 6bd82f9

Browse files
committed
Update to newest AsyncWebServerUtils and WiFiManager versions
1 parent 4137dfe commit 6bd82f9

9 files changed

Lines changed: 91 additions & 70 deletions

File tree

platformio.ini

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ lib_deps =
1717
Wire
1818
SPI
1919
https://github.com/GuLinux/AsyncBufferedTcpLogger#v0.0.6
20-
https://github.com/GuLinux/AsyncWebserverUtils#v0.3.1
21-
https://github.com/GuLinux/WiFiManager.git#v1.2.0
20+
https://github.com/GuLinux/AsyncWebserverUtils#v1.1.0
21+
https://github.com/GuLinux/WiFiManager.git#v2.0.0
2222
https://github.com/GuLinux/ArduinoOTA-Manager.git#v0.0.3
2323
ESP32Async/AsyncTCP@^3.4.0
24-
ESP32Async/ESPAsyncWebServer@^3.7.7
24+
ESP32Async/ESPAsyncWebServer@^3.7.10
2525
ayushsharma82/ElegantOTA @ 3.1.7
2626
bblanchon/ArduinoJson@^7.3.1
2727
adafruit/Adafruit Unified Sensor@^1.1.14
@@ -42,8 +42,6 @@ build_flags =
4242
-std=c++2a
4343
-std=gnu++2a
4444
-D_TASK_STD_FUNCTION
45-
-DWIFIMANAGER_DEFAULT_RECONNECT=true
46-
-DWIFIMANAGER_DEFAULT_RETRIES=3
4745
-DDEBUG_WIFI_MULTI=2
4846
-DBOOT_DELAY=1000
4947
-DCORE_DEBUG_LEVEL=0

src/commandparser.cpp

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,50 @@ CommandParser &CommandParser::Instance = *new CommandParser();
1010
CommandParser::CommandParser() {
1111
}
1212

13-
void CommandParser::getPWMOutputs(JsonArray response) {
13+
JsonResponse CommandParser::getPWMOutputs() {
1414
Log.infoln(LOG_SCOPE "onGetPWMOutputs: %d", PWMOutputs::Instance.size());
15-
PWMOutputs::toJson(response);
15+
JsonResponse response;
16+
PWMOutputs::toJson(response.root()["pwmOutputs"].to<JsonArray>());
17+
return response;
18+
}
19+
20+
JsonResponse APB::CommandParser::setPWMOutputs(Validation &validation) {
21+
JsonObject json = validation.json();
22+
if(validation.required<int>("index").required<const char*>("mode")
23+
.range("index", {0}, {PWMOutputs::Instance.size()-1})
24+
.range("max_duty", {0}, {1})
25+
.choice("mode", PWMOutput::validModes()).invalid()) return validation.errorResponse();
26+
27+
PWMOutput::Mode mode = PWMOutput::modeFromString(json["mode"]);
28+
if(mode != PWMOutput::Mode::off) {
29+
if(validation.range("max_duty", {0}, {1}).required<float>("max_duty").invalid()) return validation.errorResponse();
30+
if(mode == PWMOutput::Mode::dewpoint) {
31+
if(validation
32+
.range("dewpoint_offset", {-30}, {30})
33+
.required<float>("dewpoint_offset")
34+
.range("min_duty", 0, 1)
35+
.range("ramp_offset", 0, 20)
36+
.invalid()
37+
) return validation.errorResponse();
38+
}
39+
if(mode == PWMOutput::Mode::target_temperature) {
40+
if(validation
41+
.range("target_temperature", {-50}, {50})
42+
.required<float>("target_temperature")
43+
.range("min_duty", 0, 1)
44+
.range("ramp_offset", 0, 20)
45+
.invalid()
46+
) return validation.errorResponse();
47+
}
48+
}
49+
50+
PWMOutput &pwmOutput = PWMOutputs::Instance[json["index"]];
51+
const char *errorMessage = pwmOutput.setState(json);
52+
if(errorMessage) {
53+
return JsonResponse::error(JsonResponse::InternalError, errorMessage);
54+
}
55+
if(pwmOutput.applyAtStartup()) {
56+
PWMOutputs::saveConfig();
57+
}
58+
return getPWMOutputs();
1659
}

src/commandparser.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#pragma once
22
#include <ArduinoJson.h>
3+
#include <validation.h>
34

45
namespace APB {
56
class CommandParser {
67
public:
78
CommandParser();
89
static CommandParser &Instance;
9-
void getPWMOutputs(JsonArray response);
10-
void setPWMOutputs(JsonVariant request);
10+
JsonResponse getPWMOutputs();
11+
JsonResponse setPWMOutputs(Validation &validation);
1112
};
1213
}

src/serial_interface.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#include "serial_interface.h"
2+
3+
APB::SerialInterface::SerialInterface(Print *stream) {
4+
}

src/serial_interface.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#pragma once
2+
#include <Print.h>
3+
4+
namespace APB {
5+
6+
class SerialInterface {
7+
public:
8+
SerialInterface(Print *stream);
9+
private:
10+
Print *_stream;
11+
};
12+
13+
}

src/settings.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,11 @@ const std::unordered_map<APB::PowerMonitor::PowerSource, const char*> APB::Setti
2626

2727
APB::Settings::Settings() :
2828
#ifdef APB_DEFAULT_HOSTNAME
29-
wifiSettings{prefs, LittleFS, APB_DEFAULT_HOSTNAME, false}
29+
wifiSettings{prefs, LittleFS, APB_DEFAULT_HOSTNAME, false, 5, true, 3}
3030
#else
31-
wifiSettings{prefs, LittleFS, "AstroPowerBox-", true}
31+
wifiSettings{prefs, LittleFS, "AstroPowerBox-", true, 5, true, 3}
3232
#endif
3333
{
34-
3534
}
3635

3736
void APB::Settings::setup() {

src/webserver.cpp

Lines changed: 20 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
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

9696
void 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

102102
void 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

112112
void 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

135135
void 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-
151144
void 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

233226
void 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

252245
void 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+
294258
void 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

src/webserver.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class WebServer : public AsyncWebServerBase {
3030
void onGetStatus(AsyncWebServerRequest *request);
3131
void onGetConfig(AsyncWebServerRequest *request);
3232
void onGetHistory(AsyncWebServerRequest *request);
33-
void onNotFound(AsyncWebServerRequest *request);
3433
void onPostWriteConfig(AsyncWebServerRequest *request);
3534
void onGetAmbient(AsyncWebServerRequest *request);
3635
void onGetPower(AsyncWebServerRequest *request);

web/src/features/sensors/pwmOutputs/pwmOutputsSlice.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const addPWMOutputsToHistory = (state) => {
2626
state.history = [...state.history, { timestamp: new Date().getTime(), pwmOutputs: state.pwmOutputs.map(transformDuty) }]
2727
}
2828
const onPWMOutputsReceived = (state, payload) => {
29-
state.pwmOutputs = payload;
29+
state.pwmOutputs = payload.pwmOutputs;
3030
addPWMOutputsToHistory(state)
3131
}
3232

0 commit comments

Comments
 (0)