Skip to content

Commit

Permalink
feat: Implement OTA class
Browse files Browse the repository at this point in the history
  • Loading branch information
becem-gharbi committed Jun 30, 2023
1 parent 3a470ee commit b95ccdb
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 21 deletions.
1 change: 1 addition & 0 deletions include/ESPAdmin.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "Command.h"
#include "MQTT.h"
#include "HTTP.h"
#include "OTA.h"

namespace ESPAdmin
{
Expand Down
12 changes: 11 additions & 1 deletion include/OTA.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,23 @@
#define H_ESP_ADMIN_OTA

#include <Arduino.h>
#include <HttpsOTAUpdate.h>
#include <esp_https_ota.h>
#include "Store.h"
#include "Logger.h"

namespace ESPAdmin
{
class OTA
{
public:
void start(String downloadURL);
static void start(String downloadURL);

private:
static Logger _logger;
static void _onStart();
static void _onSuccess();
static void _onFailed();
};
}

Expand Down
2 changes: 1 addition & 1 deletion include/Store.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace ESPAdmin

// States
static bool mqttConnected;
static UpdateStatus updateStatus;
static bool updateRunning;
static bool debugSerialEnabled;
static bool debugRemoteEnabled;
static String deviceId;
Expand Down
7 changes: 0 additions & 7 deletions include/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,6 @@ namespace ESPAdmin
STORE_UPDATE_RELEASE_ID,
STORE_UPDATE_CERT,
};

enum UpdateStatus
{
UPDATE_ACTIVE,
UPDATE_FAILED,
UPDATE_DONE
};
}

#endif
2 changes: 1 addition & 1 deletion src/ESPAdmin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ namespace ESPAdmin
{
Store::begin();

MQTT::connect();
// MQTT::connect();
}
}
55 changes: 54 additions & 1 deletion src/OTA.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,60 @@

namespace ESPAdmin
{
Logger OTA::_logger("OTA");

void OTA::start(String downloadURL)
{
String cert = Store::get(STORE_UPDATE_CERT);

char *_cert = new char[cert.length() + 1];
strcpy(_cert, cert.c_str());

HttpsOTA.onHttpEvent([](HttpEvent_t *event) {});
HttpsOTA.begin(downloadURL.c_str(), _cert);

bool running = true;

_onStart();

while (running)
{
switch (HttpsOTA.status())
{
case HTTPS_OTA_UPDATING:
_logger.info("update running");
break;

case HTTPS_OTA_SUCCESS:
running = false;
_onSuccess();
break;

case HTTPS_OTA_FAIL:
running = false;
_onFailed();
break;
}

delay(2000);
}
}

void OTA::_onStart()
{
Store::updateRunning = true;
_logger.info("update started");
}

void OTA::_onSuccess()
{
Store::updateRunning = false;
_logger.success("update succeeded");
}

void OTA::_onFailed()
{
Store::updateRunning = false;
_logger.error("update failed");
}
}
}
35 changes: 34 additions & 1 deletion src/Store.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace ESPAdmin
bool Store::debugSerialEnabled = true;
String Store::deviceId = "from backend";
String Store::mac = "from wifi";
UpdateStatus Store::updateStatus = UPDATE_DONE;
bool Store::updateRunning = false;

void Store::begin()
{
Expand Down Expand Up @@ -71,6 +71,39 @@ namespace ESPAdmin
"mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d\n"
"emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=\n"
"-----END CERTIFICATE-----\n");

set(STORE_UPDATE_CERT,
"-----BEGIN CERTIFICATE-----\n"
"MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw\n"
"TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh\n"
"cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4\n"
"WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu\n"
"ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY\n"
"MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc\n"
"h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+\n"
"0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U\n"
"A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW\n"
"T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH\n"
"B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC\n"
"B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv\n"
"KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn\n"
"OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn\n"
"jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw\n"
"qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI\n"
"rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\n"
"HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq\n"
"hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL\n"
"ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ\n"
"3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK\n"
"NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5\n"
"ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur\n"
"TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC\n"
"jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc\n"
"oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq\n"
"4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA\n"
"mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d\n"
"emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=\n"
"-----END CERTIFICATE-----\n");
}

String Store::get(StoreKey key)
Expand Down
20 changes: 11 additions & 9 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,24 @@ void setup()
logger.success("WiFi connected");

ESPAdmin::begin();

ESPAdmin::OTA::start("https://esp-ota-cicd.s3.us-east-005.backblazeb2.com/becem-gharbi/esp-ota-cicd/v0.1.2.bin");
}

void loop()
{
String content;
StaticJsonDocument<96> doc;
// String content;
// StaticJsonDocument<96> doc;

doc["title"] = "foo";
doc["body"] = "bar";
doc["userId"] = 1;
// doc["title"] = "foo";
// doc["body"] = "bar";
// doc["userId"] = 1;

serializeJson(doc, content);
// serializeJson(doc, content);

String res = ESPAdmin::HTTP::post("/posts", content, "application/json");
// String res = ESPAdmin::HTTP::post("/posts", content, "application/json");

logger.info(res);
// logger.info(res);

delay(10000);
// delay(10000);
}

0 comments on commit b95ccdb

Please sign in to comment.