feat(firmware): software heartbeat-miss watchdog reboots after 6h offline
Reporter task counts consecutive heartbeat failures from the bool returned by reporter_heartbeat (Task 5). After 6 consecutive misses (~6 hours at the hourly cadence) the device logs EVT_HEARTBEAT_MISS then EVT_REBOOT(REBOOT_HEARTBEAT_MISS) and restarts, giving the whole network stack a clean reinitialization. The 200ms delay before the restart lets NVS commit the REBOOT entry so the next boot can report it via EVT_BOOT + esp_reset_reason().
This commit is contained in:
@@ -137,10 +137,24 @@ static void task_reporter(void*) {
|
|||||||
|
|
||||||
reporter_submit_camera(g_cfg, cam_rec);
|
reporter_submit_camera(g_cfg, cam_rec);
|
||||||
reporter_submit_ble(g_cfg, ble_rec);
|
reporter_submit_ble(g_cfg, ble_rec);
|
||||||
reporter_heartbeat(g_cfg, millis() / 1000, WiFi.RSSI());
|
bool hb_ok = reporter_heartbeat(g_cfg, millis() / 1000, WiFi.RSSI());
|
||||||
|
|
||||||
ble_scanner_reinit();
|
ble_scanner_reinit();
|
||||||
led_set(false);
|
led_set(false);
|
||||||
|
|
||||||
|
static uint8_t consecutive_misses = 0;
|
||||||
|
if (hb_ok) {
|
||||||
|
consecutive_misses = 0;
|
||||||
|
} else {
|
||||||
|
consecutive_misses++;
|
||||||
|
event_log_write(EVT_HEARTBEAT_MISS, consecutive_misses, 0);
|
||||||
|
Serial.printf("[WDG] heartbeat miss %u/6\n", consecutive_misses);
|
||||||
|
if (consecutive_misses >= 6) {
|
||||||
|
event_log_write(EVT_REBOOT, REBOOT_HEARTBEAT_MISS, 0);
|
||||||
|
delay(200); // let NVS commit before reboot
|
||||||
|
ESP.restart();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user