Files
IoTManager/src/PeriodicTasks.cpp
2024-11-26 23:30:16 +03:00

180 lines
7.4 KiB
C++

#include "PeriodicTasks.h"
void periodicTasksInit() {
//задачи редкого выполнения
ts.add(
PTASK, 1000 * 60, [&](void*) {
// fs
getFSInfo();
// heap
String heap = prettyBytes(ESP.getFreeHeap());
SerialPrint(F("i"), F("HEAP"), heap);
SerialPrint(F("i"), F("IoTItems"), (String)IoTItems.size());
printGlobalVarSize();
jsonWriteStr_(errorsHeapJson, F("heap"), heap);
// rssi
jsonWriteInt_(errorsHeapJson, F("rssi"), RSSIquality());
// uptime
jsonWriteStr_(errorsHeapJson, F("upt"), prettyMillis(millis()));
jsonWriteStr_(errorsHeapJson, F("uptm"), prettyMillis(mqttUptime));
jsonWriteStr_(errorsHeapJson, F("uptw"), prettyMillis(wifiUptime));
// flash
jsonWriteInt_(errorsHeapJson, F("fl"), flashWriteNumber);
// build ver
jsonWriteStr_(errorsHeapJson, F("bver"), String(FIRMWARE_VERSION));
jsonWriteStr_(errorsHeapJson, F("bn"), String(FIRMWARE_NAME));
jsonWriteStr_(errorsHeapJson, F("wver"), getWebVersion());
// reset reason
jsonWriteStr_(errorsHeapJson, F("rst"), ESP_getResetReason());
periodicWsSend();
},
nullptr, true);
SerialPrint("i", "Task", "Periodic tasks init");
}
void printGlobalVarSize() {
size_t settingsFlashJsonSize = settingsFlashJson.length();
// SerialPrint(F("i"), F("settingsFlashJson"), String(settingsFlashJsonSize));
size_t valuesFlashJsonSize = valuesFlashJson.length();
size_t errorsHeapJsonSize = errorsHeapJson.length();
// SerialPrint(F("i"), F("errorsHeapJson"), String(errorsHeapJsonSize));
size_t devListHeapJsonSize = devListHeapJson.length();
// SerialPrint(F("i"), F("devListHeapJson"), String(devListHeapJsonSize));
SerialPrint(F("i"), F("Var summ sz"), String(settingsFlashJsonSize + valuesFlashJsonSize + errorsHeapJsonSize + devListHeapJsonSize));
size_t halfBuffer = JSON_BUFFER_SIZE / 2;
if (settingsFlashJsonSize > halfBuffer ||
valuesFlashJsonSize > halfBuffer ||
errorsHeapJsonSize > halfBuffer ||
devListHeapJsonSize > halfBuffer) {
SerialPrint(F("EE"), F("Json"), F("Insufficient buffer size!!!"));
jsonWriteInt(errorsHeapJson, "jse1", 1);
}
}
#ifdef ESP8266
String ESP_getResetReason(void) {
return ESP.getResetReason();
}
#endif
#ifdef LIBRETINY
String ESP_getResetReason(void) {
return ESP.getResetReason();
}
#endif
#if defined(esp32s2_4mb) || defined(esp32s3_16mb) || defined(esp32c3m_4mb) || defined(esp32c6_4mb) || defined(esp32c6_8mb)
String ESP_getResetReason(void) {
// return ESP32GetResetReason(0); // CPU 0
esp_reset_reason_t esp_reason = esp_reset_reason();
switch (esp_reason) {
case ESP_RST_UNKNOWN: return "UNKNOWN";
case ESP_RST_POWERON: return "POWER ON";
case ESP_RST_EXT: return "EXTERNAL PIN";
case ESP_RST_SW: return "SOFTWARE RESET";
case ESP_RST_PANIC: return "EXCEPTION / PANIC";
case ESP_RST_INT_WDT: return "INTERRUPT WATCHDOG";
case ESP_RST_TASK_WDT: return "TASK WATCHDOG";
case ESP_RST_WDT: return "WATCHDOGS";
case ESP_RST_DEEPSLEEP: return "EXITING DEEP SLLEP MODE";
case ESP_RST_BROWNOUT: return "BROWNOUT";
case ESP_RST_SDIO: return "SDIO";
default : return "NO MEAN";
};
}
String ESP32GetResetReason(uint32_t cpu_no) {
// tools\sdk\include\esp32\rom\rtc.h
switch (rtc_get_reset_reason((RESET_REASON)cpu_no)) {
case POWERON_RESET:
return F("Vbat power on reset"); // 1
case RTC_SW_SYS_RESET:
return F("Software reset digital core"); // 3
// case OWDT_RESET:
// return F("Legacy Watchdog reset digital core"); // 4
case DEEPSLEEP_RESET:
return F("Deep Sleep reset digital core"); // 5
// case SDIO_RESET:
// return F("Reset by SLC module, reset digital core"); // 6
case TG0WDT_SYS_RESET:
return F("Timer Group0 Watchdog reset digital core"); // 7
case TG1WDT_SYS_RESET:
return F("Timer Group1 Watchdog reset digital core"); // 8
case RTCWDT_SYS_RESET:
return F("RTC Watchdog Reset digital core"); // 9
// case INTRUSION_RESET:
// return F("Instrusion tested to reset CPU"); // 10
case TG0WDT_CPU_RESET:
return F("Time Group reset CPU"); // 11
case RTC_SW_CPU_RESET:
return F("Software reset CPU"); // 12
case RTCWDT_CPU_RESET:
return F("RTC Watchdog Reset CPU"); // 13
// case EXT_CPU_RESET:
// return F("or APP CPU, reseted by PRO CPU"); // 14
case RTCWDT_BROWN_OUT_RESET:
return F("Reset when the vdd voltage is not stable"); // 15
case RTCWDT_RTC_RESET:
return F("RTC Watchdog reset digital core and rtc module"); // 16
default:
return F("NO_MEAN"); // 0
}
}
#endif
#if defined(esp32_4mb) || defined(esp32_4mb3f) || defined(esp32_16mb) || defined(esp32cam_4mb)
String ESP_getResetReason(void) {
// return ESP32GetResetReason(0); // CPU 0
esp_reset_reason_t esp_reason = esp_reset_reason();
switch (esp_reason) {
case ESP_RST_UNKNOWN: return "UNKNOWN";
case ESP_RST_POWERON: return "POWER ON";
case ESP_RST_EXT: return "EXTERNAL PIN";
case ESP_RST_SW: return "SOFTWARE RESET";
case ESP_RST_PANIC: return "EXCEPTION / PANIC";
case ESP_RST_INT_WDT: return "INTERRUPT WATCHDOG";
case ESP_RST_TASK_WDT: return "TASK WATCHDOG";
case ESP_RST_WDT: return "WATCHDOGS";
case ESP_RST_DEEPSLEEP: return "EXITING DEEP SLLEP MODE";
case ESP_RST_BROWNOUT: return "BROWNOUT";
case ESP_RST_SDIO: return "SDIO";
default : return "NO MEAN";
};
}
String ESP32GetResetReason(uint32_t cpu_no) {
// tools\sdk\include\esp32\rom\rtc.h
switch (rtc_get_reset_reason((RESET_REASON)cpu_no)) {
case POWERON_RESET:
return F("Vbat power on reset"); // 1
case SW_RESET:
return F("Software reset digital core"); // 3
case OWDT_RESET:
return F("Legacy Watchdog reset digital core"); // 4
case DEEPSLEEP_RESET:
return F("Deep Sleep reset digital core"); // 5
case SDIO_RESET:
return F("Reset by SLC module, reset digital core"); // 6
case TG0WDT_SYS_RESET:
return F("Timer Group0 Watchdog reset digital core"); // 7
case TG1WDT_SYS_RESET:
return F("Timer Group1 Watchdog reset digital core"); // 8
case RTCWDT_SYS_RESET:
return F("RTC Watchdog Reset digital core"); // 9
case INTRUSION_RESET:
return F("Instrusion tested to reset CPU"); // 10
case TGWDT_CPU_RESET:
return F("Time Group reset CPU"); // 11
case SW_CPU_RESET:
return F("Software reset CPU"); // 12
case RTCWDT_CPU_RESET:
return F("RTC Watchdog Reset CPU"); // 13
case EXT_CPU_RESET:
return F("or APP CPU, reseted by PRO CPU"); // 14
case RTCWDT_BROWN_OUT_RESET:
return F("Reset when the vdd voltage is not stable"); // 15
case RTCWDT_RTC_RESET:
return F("RTC Watchdog reset digital core and rtc module"); // 16
default:
return F("NO_MEAN"); // 0
}
}
#endif