mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-05-06 05:55:53 +00:00
83 lines
3.0 KiB
C++
83 lines
3.0 KiB
C++
#ifndef WebStatusService_h
|
|
#define WebStatusService_h
|
|
|
|
#define EMSESP_SYSTEM_STATUS_SERVICE_PATH "/rest/systemStatus"
|
|
#define EMSESP_ACTION_SERVICE_PATH "/rest/action"
|
|
|
|
#define EMSESP_VERSIONS_URL "http://emsesp.org/versions.json"
|
|
|
|
#include "../core/firmwareVersion.h"
|
|
#include "../emsesp_version.h"
|
|
|
|
namespace emsesp {
|
|
|
|
class WebStatusService {
|
|
public:
|
|
WebStatusService(AsyncWebServer * server, SecurityManager * securityManager);
|
|
void set_current_version(const std::string & version) {
|
|
current_version_s = version;
|
|
}
|
|
std::string get_current_version() {
|
|
return current_version_s;
|
|
}
|
|
|
|
// called from EMSESP::loop() to refresh the cached versions.json from emsesp.org
|
|
// so that the web request handler never has to do blocking HTTPS on the small AsyncTCP stack
|
|
void loop();
|
|
|
|
// true once we've had at least one successful versions.json fetch
|
|
bool versions_cache_valid() const {
|
|
return versions_cache_valid_;
|
|
}
|
|
|
|
// schedule a refresh of the versions.json cache. Defers the fetch by
|
|
// VERSIONS_INITIAL_FETCH_DELAY_MS so the network stack (DHCP, default netif, DNS server)
|
|
// has time to settle after the link first comes up — otherwise hostByName() can fail
|
|
// immediately on boot with a noisy "DNS Failed ... error '-54'".
|
|
void schedule_versions_refresh();
|
|
|
|
bool current_upgradeable() const; // true if a newer version is available
|
|
|
|
// make action function public so we can test in the debug and standalone mode
|
|
#ifndef EMSESP_STANDALONE
|
|
protected:
|
|
#endif
|
|
void systemStatus(AsyncWebServerRequest * request);
|
|
void action(AsyncWebServerRequest * request, JsonVariant json);
|
|
|
|
private:
|
|
SecurityManager * _securityManager;
|
|
|
|
// actions
|
|
void getVersions(JsonObject root);
|
|
bool exportData(JsonObject root, std::string & type);
|
|
bool getCustomSupport(JsonObject root);
|
|
bool uploadURL(const char * url);
|
|
bool setSystemStatus(const char * status);
|
|
void allvalues(JsonObject output);
|
|
uint8_t upgradeImportantMessages(std::string & version);
|
|
|
|
std::string current_version_s = EMSESP_APP_VERSION;
|
|
|
|
// cached emsesp.org/versions.json. Refreshed from the main loop task, which has more stack.
|
|
struct VersionInfo {
|
|
std::string version;
|
|
std::string date;
|
|
bool upgradeable = false;
|
|
};
|
|
VersionInfo versions_stable_;
|
|
VersionInfo versions_dev_;
|
|
bool versions_cache_valid_ = false; // true once we've had at least one successful fetch
|
|
uint32_t versions_next_fetch_ms_ = 0; // uuid::get_uptime() of the next attempt; 0 = idle
|
|
|
|
bool refresh_versions_cache(); // does the actual HTTPS fetch + parse, returns true on success
|
|
|
|
static constexpr uint32_t VERSIONS_REFRESH_INTERVAL_MS = 60UL * 60UL * 1000UL; // 1 hour on success
|
|
static constexpr uint32_t VERSIONS_RETRY_INTERVAL_MS = 5UL * 60UL * 1000UL; // 5 min after failure
|
|
static constexpr uint32_t VERSIONS_INITIAL_FETCH_DELAY_MS = 5UL * 1000UL; // 5 s after a link comes up
|
|
};
|
|
|
|
} // namespace emsesp
|
|
|
|
#endif
|