mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-05-02 04:05:14 +00:00
fix firmware install date (was using UTC as TZ not initialised)
This commit is contained in:
@@ -407,11 +407,11 @@ void System::get_partition_info() {
|
|||||||
partition_info_.clear(); // clear existing data
|
partition_info_.clear(); // clear existing data
|
||||||
|
|
||||||
#ifdef EMSESP_STANDALONE
|
#ifdef EMSESP_STANDALONE
|
||||||
// dummy data for standalone mode - version, size, install_date
|
// dummy data for standalone mode - version, size, install_date in UTC epoch
|
||||||
partition_info_["app0"] = {EMSESP_APP_VERSION, 0, ""};
|
partition_info_["app0"] = {EMSESP_APP_VERSION, 0, 0};
|
||||||
partition_info_["app1"] = {"", 0, ""};
|
partition_info_["app1"] = {"", 0, 0};
|
||||||
partition_info_["factory"] = {"", 0, ""};
|
partition_info_["factory"] = {"", 0, 0};
|
||||||
partition_info_["boot"] = {"", 0, ""};
|
partition_info_["boot"] = {"", 0, 0};
|
||||||
#else
|
#else
|
||||||
|
|
||||||
auto current_partition = (const char *)esp_ota_get_running_partition()->label;
|
auto current_partition = (const char *)esp_ota_get_running_partition()->label;
|
||||||
@@ -451,10 +451,8 @@ void System::get_partition_info() {
|
|||||||
p_info.version = EMSESP::nvs_.getString(part->label, "").c_str();
|
p_info.version = EMSESP::nvs_.getString(part->label, "").c_str();
|
||||||
char c[20];
|
char c[20];
|
||||||
snprintf(c, sizeof(c), "d_%s", (const char *)part->label);
|
snprintf(c, sizeof(c), "d_%s", (const char *)part->label);
|
||||||
time_t d = EMSESP::nvs_.getULong(c, 0);
|
time_t d = EMSESP::nvs_.getULong(c, 0);
|
||||||
char time_string[25];
|
p_info.install_date = d > 1500000000L ? d : 0; // store UTC epoch; formatted to local time at render
|
||||||
strftime(time_string, sizeof(time_string), "%FT%T", localtime(&d));
|
|
||||||
p_info.install_date = d > 1500000000L ? time_string : "";
|
|
||||||
|
|
||||||
if (!p_info.version.empty()) {
|
if (!p_info.version.empty()) {
|
||||||
esp_image_metadata_t meta = {};
|
esp_image_metadata_t meta = {};
|
||||||
@@ -474,7 +472,7 @@ void System::get_partition_info() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// set NTP install time/date for the current partition
|
// set install time/date for the current partition, in UTC
|
||||||
// assumes NTP is connected and working
|
// assumes NTP is connected and working
|
||||||
void System::set_partition_install_date() {
|
void System::set_partition_install_date() {
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
@@ -1337,11 +1335,18 @@ void System::show_system(uuid::console::Shell & shell) {
|
|||||||
if (partition.second.version.empty()) {
|
if (partition.second.version.empty()) {
|
||||||
continue; // no version, empty string
|
continue; // no version, empty string
|
||||||
}
|
}
|
||||||
|
std::string installed;
|
||||||
|
if (partition.second.install_date > 0) {
|
||||||
|
char time_string[25];
|
||||||
|
time_t d = partition.second.install_date;
|
||||||
|
strftime(time_string, sizeof(time_string), "%FT%T", localtime(&d));
|
||||||
|
installed = std::string(", installed on ") + time_string;
|
||||||
|
}
|
||||||
shell.printfln(" %s: v%s (%d KB%s) %s",
|
shell.printfln(" %s: v%s (%d KB%s) %s",
|
||||||
partition.first.c_str(),
|
partition.first.c_str(),
|
||||||
partition.second.version.c_str(),
|
partition.second.version.c_str(),
|
||||||
partition.second.size,
|
partition.second.size,
|
||||||
partition.second.install_date.empty() ? "" : (std::string(", installed on ") + partition.second.install_date).c_str(),
|
installed.c_str(),
|
||||||
(strcmp(esp_ota_get_running_partition()->label, partition.first.c_str()) == 0) ? "** active **" : "");
|
(strcmp(esp_ota_get_running_partition()->label, partition.first.c_str()) == 0) ? "** active **" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ enum FUSE_VALUE : uint8_t { ALL = 0, MFG = 1, MODEL = 2, BOARD = 3, REV = 4, BAT
|
|||||||
struct PartitionInfo {
|
struct PartitionInfo {
|
||||||
std::string version;
|
std::string version;
|
||||||
size_t size;
|
size_t size;
|
||||||
std::string install_date; // optional, only available if NTP is connected
|
time_t install_date; // UTC epoch seconds; 0 if unknown. Format with localtime() at render time so it honors the current TZ.
|
||||||
};
|
};
|
||||||
|
|
||||||
class System {
|
class System {
|
||||||
|
|||||||
@@ -146,18 +146,27 @@ void WebStatusService::systemStatus(AsyncWebServerRequest * request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get the partition info for each partition, including the running one
|
// get the partition info for each partition, including the running one
|
||||||
// the partition data is done once in System::start() and stored in partition_info_
|
// the partition data is gathered once in System::start() and stored in partition_info_
|
||||||
|
// install_date is stored as a UTC epoch and formatted to local time here so it honors
|
||||||
|
// the current TZ (which may not have been set yet when System::start() ran).
|
||||||
JsonArray partitions = root["partitions"].to<JsonArray>();
|
JsonArray partitions = root["partitions"].to<JsonArray>();
|
||||||
for (const auto & partition : EMSESP::system_.partition_info_) {
|
for (const auto & partition : EMSESP::system_.partition_info_) {
|
||||||
// Skip partition if it has no version, or it's size is 0
|
// Skip partition if it has no version, or it's size is 0
|
||||||
if (partition.second.version.empty() || partition.second.size == 0) {
|
if (partition.second.version.empty() || partition.second.size == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
JsonObject part = partitions.add<JsonObject>();
|
JsonObject part = partitions.add<JsonObject>();
|
||||||
part["partition"] = partition.first;
|
part["partition"] = partition.first;
|
||||||
part["version"] = partition.second.version;
|
part["version"] = partition.second.version;
|
||||||
part["size"] = partition.second.size;
|
part["size"] = partition.second.size;
|
||||||
part["install_date"] = partition.second.install_date;
|
if (partition.second.install_date > 0) {
|
||||||
|
char time_string[25];
|
||||||
|
time_t d = partition.second.install_date;
|
||||||
|
strftime(time_string, sizeof(time_string), "%FT%T", localtime(&d));
|
||||||
|
part["install_date"] = time_string;
|
||||||
|
} else {
|
||||||
|
part["install_date"] = "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
root["developer_mode"] = EMSESP::system_.developer_mode();
|
root["developer_mode"] = EMSESP::system_.developer_mode();
|
||||||
|
|||||||
Reference in New Issue
Block a user