add Factory RESET

This commit is contained in:
Phat Nguyen
2024-02-26 17:48:22 +07:00
parent ea204d90b1
commit cf5ff99d8a
2 changed files with 150 additions and 2 deletions

View File

@ -153,6 +153,19 @@ public:
loadConfig(); loadConfig();
} }
/**
* @brief Reset local config into default value.
*
*/
void defaultReset(void) {
config.inF = false;
config.inUSAQI = false;
memset(config.models, 0, sizeof(config.models));
memset(config.mqttBrokers, 0, sizeof(config.mqttBrokers));
config.useRGBLedBar = UseLedBarOff;
saveConfig();
}
/** /**
* @brief Get server configuration * @brief Get server configuration
* *
@ -687,6 +700,7 @@ static void showNr(void);
static void webServerInit(void); static void webServerInit(void);
static String getServerSyncData(bool localServer); static String getServerSyncData(bool localServer);
static void createMqttTask(void); static void createMqttTask(void);
static void factoryConfigReset(void);
/** Init schedule */ /** Init schedule */
bool hasSensorS8 = true; bool hasSensorS8 = true;
@ -694,6 +708,7 @@ bool hasSensorPMS = true;
bool hasSensorSGP = true; bool hasSensorSGP = true;
bool hasSensorSHT = true; bool hasSensorSHT = true;
int pmFailCount = 0; int pmFailCount = 0;
uint32_t factoryBtnPressTime = 0;
AgSchedule dispLedSchedule(DISP_UPDATE_INTERVAL, updateDispLedBar); AgSchedule dispLedSchedule(DISP_UPDATE_INTERVAL, updateDispLedBar);
AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL, serverConfigPoll); AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL, serverConfigPoll);
AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer); AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer);
@ -810,6 +825,9 @@ void loop() {
/** Check for handle WiFi reconnect */ /** Check for handle WiFi reconnect */
updateWiFiConnect(); updateWiFiConnect();
/** factory reset handle */
factoryConfigReset();
} }
static void setTestColor(char color) { static void setTestColor(char color) {
@ -1000,6 +1018,58 @@ static void createMqttTask(void) {
} }
} }
static void factoryConfigReset(void) {
if (ag.button.getState() == ag.button.BUTTON_PRESSED) {
if (factoryBtnPressTime == 0) {
factoryBtnPressTime = millis();
} else {
uint32_t ms = (uint32_t)(millis() - factoryBtnPressTime);
if (ms >= 2000) {
// Show display message: For factory keep for x seconds
// Count display.
displayShowText("For factory reset", "keep pressed", "for 8 sec");
int count = 7;
while (ag.button.getState() == ag.button.BUTTON_PRESSED) {
delay(1000);
displayShowText("For factory reset", "keep pressed",
"for " + String(count) + " sec");
count--;
// ms = (uint32_t)(millis() - factoryBtnPressTime);
if (count == 0) {
/** Stop MQTT task first */
if (mqttTask) {
vTaskDelete(mqttTask);
mqttTask = NULL;
}
/** Disconnect WIFI */
WiFi.disconnect();
wifiManager.resetSettings();
/** Reset local config */
agServer.defaultReset();
displayShowText("Factory reset", "successful", "");
delay(3000);
ESP.restart();
}
}
/** Show current content cause reset ignore */
factoryBtnPressTime = 0;
appDispHandler();
}
}
} else {
if (factoryBtnPressTime != 0) {
/** Restore last display content */
appDispHandler();
}
factoryBtnPressTime = 0;
}
}
static void sendPing() { static void sendPing() {
JSONVar root; JSONVar root;
root["wifi"] = WiFi.RSSI(); root["wifi"] = WiFi.RSSI();
@ -1950,7 +2020,9 @@ static void updateWiFiConnect(void) {
* *
*/ */
static void updateDispLedBar(void) { static void updateDispLedBar(void) {
appDispHandler(); if (factoryBtnPressTime == 0) {
appDispHandler();
}
appLedHandler(); appLedHandler();
} }
@ -2007,7 +2079,7 @@ static void sendDataToServer(void) {
if (agServer.postToServer(getDevId(), syncData)) { if (agServer.postToServer(getDevId(), syncData)) {
resetWatchdog(); resetWatchdog();
} }
bootCount++; bootCount++;
} }

View File

@ -85,6 +85,8 @@ enum {
#define LED_FAST_BLINK_DELAY 250 /** ms */ #define LED_FAST_BLINK_DELAY 250 /** ms */
#define LED_SLOW_BLINK_DELAY 1000 /** ms */ #define LED_SLOW_BLINK_DELAY 1000 /** ms */
#define LED_SHORT_BLINK_DELAY 500 /** ms */
#define LED_LONG_BLINK_DELAY 2000 /** ms */
#define WIFI_CONNECT_COUNTDOWN_MAX 180 /** sec */ #define WIFI_CONNECT_COUNTDOWN_MAX 180 /** sec */
#define WIFI_CONNECT_RETRY_MS 10000 /** ms */ #define WIFI_CONNECT_RETRY_MS 10000 /** ms */
#define LED_BAR_COUNT_INIT_VALUE (-1) /** */ #define LED_BAR_COUNT_INIT_VALUE (-1) /** */
@ -153,6 +155,19 @@ public:
loadConfig(); loadConfig();
} }
/**
* @brief Reset local config into default value.
*
*/
void defaultReset(void) {
config.inF = false;
config.inUSAQI = false;
memset(config.models, 0, sizeof(config.models));
memset(config.mqttBrokers, 0, sizeof(config.mqttBrokers));
config.useRGBLedBar = UseLedBarOff;
saveConfig();
}
/** /**
* @brief Get server configuration * @brief Get server configuration
* *
@ -704,11 +719,13 @@ static void showNr(void);
static void webServerInit(void); static void webServerInit(void);
static String getServerSyncData(bool localServer); static String getServerSyncData(bool localServer);
static void createMqttTask(void); static void createMqttTask(void);
static void factoryConfigReset(void);
bool hasSensorS8 = true; bool hasSensorS8 = true;
bool hasSensorPMS1 = true; bool hasSensorPMS1 = true;
bool hasSensorPMS2 = true; bool hasSensorPMS2 = true;
bool hasSensorSGP = true; bool hasSensorSGP = true;
uint32_t factoryBtnPressTime = 0;
AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL, serverConfigPoll); AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL, serverConfigPoll);
AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer); AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer);
AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Poll); AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Poll);
@ -777,6 +794,8 @@ void loop() {
} }
} }
updateWiFiConnect(); updateWiFiConnect();
factoryConfigReset();
} }
void sendPing() { void sendPing() {
@ -1450,6 +1469,63 @@ static void createMqttTask(void) {
} }
} }
static void factoryConfigReset(void) {
if (ag.button.getState() == ag.button.BUTTON_PRESSED) {
if (factoryBtnPressTime == 0) {
factoryBtnPressTime = millis();
} else {
uint32_t ms = (uint32_t)(millis() - factoryBtnPressTime);
if (ms >= 2000) {
Serial.println("Factory reset keep presssed for 8 sec");
uint32_t ledTime = millis();
bool ledOn = true;
ag.statusLed.setOn();
while (ag.button.getState() == ag.button.BUTTON_PRESSED) {
ms = (uint32_t)(millis() - ledTime);
if (ms >= LED_SHORT_BLINK_DELAY) {
ledTime = millis();
ag.statusLed.setToggle();
}
ms = (uint32_t)(millis() - factoryBtnPressTime);
if (ms > 10000) {
ag.statusLed.setOff();
/** Stop MQTT task first */
if (mqttTask) {
vTaskDelete(mqttTask);
mqttTask = NULL;
}
/** Disconnect WIFI */
WiFi.disconnect();
wifiManager.resetSettings();
/** Reset local config */
agServer.defaultReset();
Serial.println("Factory successful");
ledBlinkDelay(LED_LONG_BLINK_DELAY);
ledBlinkDelay(LED_LONG_BLINK_DELAY);
ledBlinkDelay(LED_LONG_BLINK_DELAY);
ESP.restart();
}
}
/** Show current content cause reset ignore */
factoryBtnPressTime = 0;
ag.statusLed.setOff();
}
}
} else {
if (factoryBtnPressTime != 0) {
ag.statusLed.setOff();
}
factoryBtnPressTime = 0;
}
}
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, static void mqtt_event_handler(void *handler_args, esp_event_base_t base,
int32_t event_id, void *event_data) { int32_t event_id, void *event_data) {