Skip to content

Commit 02bf21b

Browse files
committed
integrate new HTTP FW update function
1 parent 34cd8ed commit 02bf21b

File tree

2 files changed

+40
-11
lines changed

2 files changed

+40
-11
lines changed

src/ocpp.cpp

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
#include <ArduinoOcpp.h> // Facade for ArduinoOcpp
1111
#include <ArduinoOcpp/SimpleOcppOperationFactory.h> // define behavior for incoming req messages
1212

13-
#include <HTTPUpdate.h>
14-
#include <MongooseHttpClient.h> //for HTTP update
13+
#include "http_update.h"
1514

1615
#include <ArduinoOcpp/Core/OcppEngine.h>
1716

@@ -70,11 +69,12 @@ void ArduinoOcppTask::initializeArduinoOcpp() {
7069
DynamicJsonDocument *evseDetailsDoc = new DynamicJsonDocument(JSON_OBJECT_SIZE(6));
7170
JsonObject evseDetails = evseDetailsDoc->to<JsonObject>();
7271
evseDetails["chargePointModel"] = "Advanced Series";
73-
//evseDetails["chargePointSerialNumber"] = "TODO";
72+
//evseDetails["chargePointSerialNumber"] = "TODO"; //see https://github.com/OpenEVSE/ESP32_WiFi_V4.x/issues/218
7473
evseDetails["chargePointVendor"] = "OpenEVSE";
7574
evseDetails["firmwareVersion"] = evse->getFirmwareVersion();
7675
//evseDetails["meterSerialNumber"] = "TODO";
7776
//evseDetails["meterType"] = "TODO";
77+
//see https://github.com/OpenEVSE/ESP32_WiFi_V4.x/issues/219
7878

7979
bootNotification(evseDetailsDoc, [this](JsonObject payload) { //ArduinoOcpp will delete evseDetailsDoc
8080
LCD_DISPLAY("OCPP connected!");
@@ -242,6 +242,7 @@ void ArduinoOcppTask::loadEvseBehavior() {
242242

243243
setOnUnlockConnector([] () {
244244
//TODO Send unlock command to peripherals. If successful, return true, otherwise false
245+
//see https://github.com/OpenEVSE/ESP32_WiFi_V4.x/issues/230
245246
return false;
246247
});
247248

@@ -526,14 +527,41 @@ void ArduinoOcppTask::initializeDiagnosticsService() {
526527
}
527528

528529
void ArduinoOcppTask::initializeFwService() {
529-
//TODO finish when HTTP FW download will be available in the OpenEVSE core
530-
//ArduinoOcpp::FirmwareService *fwService = ArduinoOcpp::getFirmwareService();
531-
//if (fwService) {
532-
// fwService->setOnInstall([this](String location) {
533-
// ...
534-
// return true;
535-
// });
536-
//}
530+
ArduinoOcpp::FirmwareService *fwService = ArduinoOcpp::getFirmwareService();
531+
if (fwService) {
532+
fwService->setBuildNumber(evse->getFirmwareVersion());
533+
534+
fwService->setInstallationStatusSampler([this] () {
535+
if (updateFailure) {
536+
return ArduinoOcpp::InstallationStatus::InstallationFailed;
537+
} else if (updateSuccess) {
538+
return ArduinoOcpp::InstallationStatus::Installed;
539+
} else {
540+
return ArduinoOcpp::InstallationStatus::NotInstalled;
541+
}
542+
});
543+
544+
fwService->setOnInstall([this](String &location) {
545+
546+
DBUGLN(F("[ocpp] Starting installation routine"));
547+
548+
//reset reported state
549+
updateFailure = false;
550+
updateSuccess = false;
551+
552+
return http_update_from_url(location, [] (size_t complete, size_t total) { },
553+
[this] (int status_code) {
554+
//onSuccess
555+
updateSuccess = true;
556+
557+
resetTime = millis();
558+
resetTriggered = true;
559+
}, [this] (int error_code) {
560+
//onFailure
561+
updateFailure = true;
562+
});
563+
});
564+
}
537565
}
538566

539567
bool ArduinoOcppTask::operationIsAccepted(JsonObject payload) {

src/ocpp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class ArduinoOcppTask: public MicroTasks::Task {
4343
bool diagSuccess, diagFailure = false;
4444
void initializeDiagnosticsService();
4545

46+
bool updateSuccess, updateFailure = false;
4647
void initializeFwService();
4748

4849
void initializeArduinoOcpp();

0 commit comments

Comments
 (0)