test upgrade

This commit is contained in:
Proddy
2022-12-23 18:28:09 +01:00
parent 5f9ba2e04b
commit 2151905d46
8 changed files with 139 additions and 79 deletions

View File

@@ -26,42 +26,43 @@
class DummySettings { class DummySettings {
public: public:
String locale = "en"; std::string version{"poerp"};
uint8_t tx_mode = 1; String locale = "en";
uint8_t ems_bus_id = 0x0B; uint8_t tx_mode = 1;
bool syslog_enabled = false; uint8_t ems_bus_id = 0x0B;
int8_t syslog_level = 3; // uuid::log::Level bool syslog_enabled = false;
uint32_t syslog_mark_interval = 0; int8_t syslog_level = 3; // uuid::log::Level
String syslog_host = "192.168.1.4"; uint32_t syslog_mark_interval = 0;
uint16_t syslog_port = 514; String syslog_host = "192.168.1.4";
bool shower_timer = true; uint16_t syslog_port = 514;
bool shower_alert = false; bool shower_timer = true;
uint8_t shower_alert_coldshot = 10; bool shower_alert = false;
uint8_t shower_alert_trigger = 7; uint8_t shower_alert_coldshot = 10;
bool hide_led = false; uint8_t shower_alert_trigger = 7;
bool notoken_api = false; bool hide_led = false;
bool readonly_mode = false; bool notoken_api = false;
uint8_t bool_format = 1; // using "on" and "off" bool readonly_mode = false;
uint8_t bool_dashboard = 1; uint8_t bool_format = 1; // using "on" and "off"
uint8_t enum_format = 1; uint8_t bool_dashboard = 1;
bool nosleep = false; uint8_t enum_format = 1;
bool fahrenheit = false; bool nosleep = false;
bool bandwidth20 = false; bool fahrenheit = false;
bool telnet_enabled = false; bool bandwidth20 = false;
String board_profile = "CUSTOM"; bool telnet_enabled = false;
bool trace_raw = false; String board_profile = "CUSTOM";
bool analog_enabled = true; // analog is enabled bool trace_raw = false;
int8_t weblog_level = 1; bool analog_enabled = true; // analog is enabled
uint8_t weblog_buffer = 50; int8_t weblog_level = 1;
bool weblog_compact = true; uint8_t weblog_buffer = 50;
uint8_t rx_gpio = 0; bool weblog_compact = true;
uint8_t tx_gpio = 0; uint8_t rx_gpio = 0;
uint8_t dallas_gpio = 16; // to ensure its enabled uint8_t tx_gpio = 0;
bool dallas_parasite = false; uint8_t dallas_gpio = 16; // to ensure its enabled
uint8_t led_gpio = 0; bool dallas_parasite = false;
bool low_clock = false; uint8_t led_gpio = 0;
uint8_t pbutton_gpio = false; bool low_clock = false;
uint8_t solar_maxflow = 30; uint8_t pbutton_gpio = false;
uint8_t solar_maxflow = 30;
// MQTT // MQTT
uint16_t publish_time = 10; uint16_t publish_time = 10;

View File

@@ -24,6 +24,7 @@ class FSPersistence {
} }
void readFromFS() { void readFromFS() {
Serial.println();
Serial.print("Fake reading file "); Serial.print("Fake reading file ");
Serial.println(_filePath); Serial.println(_filePath);
applyDefaults(); applyDefaults();

View File

@@ -1293,13 +1293,20 @@ void EMSESP::start() {
LOG_INFO("Last system reset reason Core0: %s, Core1: %s", system_.reset_reason(0).c_str(), system_.reset_reason(1).c_str()); LOG_INFO("Last system reset reason Core0: %s, Core1: %s", system_.reset_reason(0).c_str(), system_.reset_reason(1).c_str());
// do any system upgrades // see if we're restoring a settings file
if (system_.check_upgrade()) { if (system_.check_restore()) {
LOG_INFO("System needs a restart to apply new settings. Please wait."); LOG_WARNING("System needs a restart to apply new settings. Please wait.");
system_.system_restart();
};
webSettingsService.begin(); // load EMS-ESP Application settings...
// do any system upgrades
if (system_.check_upgrade()) {
LOG_WARNING("System needs a restart to apply new settings. Please wait.");
system_.system_restart(); system_.system_restart();
}; };
webSettingsService.begin(); // load EMS-ESP Application settings...
system_.reload_settings(); // ... and store some of the settings locally system_.reload_settings(); // ... and store some of the settings locally
webCustomizationService.begin(); // load the customizations webCustomizationService.begin(); // load the customizations

View File

@@ -208,7 +208,7 @@ MAKE_PSTR(uom_ua, "µA")
MAKE_PSTR(uom_lmin, "l/min") MAKE_PSTR(uom_lmin, "l/min")
MAKE_PSTR(uom_kw, "kW") MAKE_PSTR(uom_kw, "kW")
MAKE_PSTR(uom_w, "W") MAKE_PSTR(uom_w, "W")
MAKE_PSTR(uom_kb, "kB") MAKE_PSTR(uom_kb, "KB")
MAKE_PSTR(uom_dbm, "dBm") MAKE_PSTR(uom_dbm, "dBm")
MAKE_PSTR(uom_fahrenheit, "°F") MAKE_PSTR(uom_fahrenheit, "°F")
MAKE_PSTR(uom_mv, "mV") MAKE_PSTR(uom_mv, "mV")

View File

@@ -290,6 +290,8 @@ void System::syslog_init() {
// read some specific system settings to store locally for faster access // read some specific system settings to store locally for faster access
void System::reload_settings() { void System::reload_settings() {
EMSESP::webSettingsService.read([&](WebSettings & settings) { EMSESP::webSettingsService.read([&](WebSettings & settings) {
version_ = settings.version;
pbutton_gpio_ = settings.pbutton_gpio; pbutton_gpio_ = settings.pbutton_gpio;
analog_enabled_ = settings.analog_enabled; analog_enabled_ = settings.analog_enabled;
low_clock_ = settings.low_clock; low_clock_ = settings.low_clock;
@@ -969,10 +971,8 @@ void System::show_system(uuid::console::Shell & shell) {
#endif #endif
} }
// handle upgrades from previous versions // see if there is a restore of an older settings file that needs to be applied
// or managing an uploaded files to replace settings files bool System::check_restore() {
// returns true if we need a reboot
bool System::check_upgrade() {
bool reboot_required = false; bool reboot_required = false;
#ifndef EMSESP_STANDALONE #ifndef EMSESP_STANDALONE
@@ -1012,6 +1012,50 @@ bool System::check_upgrade() {
return reboot_required; return reboot_required;
} }
// handle upgrades from previous versions
// returns true if we need a reboot
bool System::check_upgrade() {
std::string old_version;
// TODO fix
if (version_ != EMSESP_APP_VERSION) {
if (version_.empty()) {
LOG_DEBUG("No version, presuming fresh install. Setting to %s", EMSESP_APP_VERSION);
old_version = EMSESP_APP_VERSION;
} else {
LOG_DEBUG("Going from version %s to %s", version_, EMSESP_APP_VERSION);
old_version = version_;
}
// save the new version
version_ = EMSESP_APP_VERSION;
EMSESP::webSettingsService.update(
[&](WebSettings & settings) {
settings.version = EMSESP_APP_VERSION;
return StateUpdateResult::CHANGED;
},
"local");
}
if (old_version == EMSESP_APP_VERSION) {
return false; // no upgrades or reboot needed. we're on the latest
}
LOG_DEBUG("Doing upgrade..."); // TODO remove
// check variations between versions
// get major version
// get minor version
// get patch version (ignore alphanumerics)
bool reboot_required = false;
return reboot_required;
}
// list commands // list commands
bool System::command_commands(const char * value, const int8_t id, JsonObject & output) { bool System::command_commands(const char * value, const int8_t id, JsonObject & output) {
return Command::list(EMSdevice::DeviceType::SYSTEM, output); return Command::list(EMSdevice::DeviceType::SYSTEM, output);

View File

@@ -75,6 +75,7 @@ class System {
void wifi_tweak(); void wifi_tweak();
void syslog_init(); void syslog_init();
bool check_upgrade(); bool check_upgrade();
bool check_restore();
bool heartbeat_json(JsonObject & output); bool heartbeat_json(JsonObject & output);
void send_heartbeat(); void send_heartbeat();
void send_info_mqtt(const char * event_str, bool send_ntp = false); void send_info_mqtt(const char * event_str, bool send_ntp = false);
@@ -294,6 +295,7 @@ class System {
uint8_t bool_format_; uint8_t bool_format_;
uint8_t enum_format_; uint8_t enum_format_;
bool readonly_mode_; bool readonly_mode_;
std::string version_;
// ethernet // ethernet
uint8_t phy_type_; uint8_t phy_type_;

View File

@@ -80,6 +80,10 @@ void WebSettings::read(WebSettings & settings, JsonObject & root) {
// call on initialization and also when settings are updated via web or console // call on initialization and also when settings are updated via web or console
StateUpdateResult WebSettings::update(JsonObject & root, WebSettings & settings) { StateUpdateResult WebSettings::update(JsonObject & root, WebSettings & settings) {
// load the version of the settings
// will be picked up in System::check_upgrade()
settings.version = root["version"] || "";
// load default GPIO configuration based on board profile // load default GPIO configuration based on board profile
std::vector<int8_t> data; // // led, dallas, rx, tx, button, phy_type, eth_power, eth_phy_addr, eth_clock_mode std::vector<int8_t> data; // // led, dallas, rx, tx, button, phy_type, eth_power, eth_phy_addr, eth_clock_mode
#if CONFIG_IDF_TARGET_ESP32C3 #if CONFIG_IDF_TARGET_ESP32C3

View File

@@ -29,40 +29,41 @@ namespace emsesp {
class WebSettings { class WebSettings {
public: public:
String locale; std::string version;
uint8_t tx_mode; String locale;
uint8_t ems_bus_id; uint8_t tx_mode;
bool shower_timer; uint8_t ems_bus_id;
bool shower_alert; bool shower_timer;
uint8_t shower_alert_trigger; bool shower_alert;
uint8_t shower_alert_coldshot; uint8_t shower_alert_trigger;
bool syslog_enabled; uint8_t shower_alert_coldshot;
int8_t syslog_level; // uuid::log::Level bool syslog_enabled;
uint32_t syslog_mark_interval; int8_t syslog_level; // uuid::log::Level
String syslog_host; uint32_t syslog_mark_interval;
uint16_t syslog_port; String syslog_host;
bool trace_raw; uint16_t syslog_port;
uint8_t rx_gpio; bool trace_raw;
uint8_t tx_gpio; uint8_t rx_gpio;
uint8_t dallas_gpio; uint8_t tx_gpio;
bool dallas_parasite; uint8_t dallas_gpio;
uint8_t led_gpio; bool dallas_parasite;
bool hide_led; uint8_t led_gpio;
bool low_clock; bool hide_led;
bool telnet_enabled; bool low_clock;
bool notoken_api; bool telnet_enabled;
bool readonly_mode; bool notoken_api;
bool analog_enabled; bool readonly_mode;
uint8_t pbutton_gpio; bool analog_enabled;
uint8_t solar_maxflow; uint8_t pbutton_gpio;
String board_profile; uint8_t solar_maxflow;
uint8_t bool_format; String board_profile;
uint8_t bool_dashboard; uint8_t bool_format;
uint8_t enum_format; uint8_t bool_dashboard;
int8_t weblog_level; uint8_t enum_format;
uint8_t weblog_buffer; int8_t weblog_level;
bool weblog_compact; uint8_t weblog_buffer;
bool fahrenheit; bool weblog_compact;
bool fahrenheit;
uint8_t phy_type; uint8_t phy_type;
int8_t eth_power; // -1 means disabled int8_t eth_power; // -1 means disabled