diff --git a/usermods/deep_sleep/deep_sleep.cpp b/usermods/deep_sleep/deep_sleep.cpp index 08ef61a0..65cebc5e 100644 --- a/usermods/deep_sleep/deep_sleep.cpp +++ b/usermods/deep_sleep/deep_sleep.cpp @@ -80,8 +80,8 @@ class DeepSleepUsermod : public Usermod { } int findNextTimerInterval() { - if (localTime < 1672502400) { // time invalid before NTP sync 2023-1-1 - DEBUG_PRINTLN("Skipping timer check: local time not yet synchronized."); + if (toki.getTimeSource() == TOKI_TS_NONE) { + DEBUG_PRINTLN("DeepSleep: local time not yet synchronized, skipping timer check."); return -1; } int currentHour = hour(localTime); @@ -129,9 +129,8 @@ class DeepSleepUsermod : public Usermod { #ifdef WLED_DEBUG DEBUG_PRINTF("sleep wakeup cause: %d\n", esp_sleep_get_wakeup_cause()); #endif - if (esp_sleep_get_wakeup_cause() != ESP_SLEEP_WAKEUP_TIMER) { + if (esp_sleep_get_wakeup_cause() != ESP_SLEEP_WAKEUP_TIMER) wakeupPreset = 0; // not a timed wakeup, don't apply preset - } initDone = true; } @@ -139,20 +138,22 @@ class DeepSleepUsermod : public Usermod { if (!enabled) return; if (!offMode) { // LEDs are on lastLoopTime = 0; // reset timer - if (delaycounter) delaycounter--; // decrease delay counter if LEDs are on (they are always turned on after a wake-up, see below) - else if (wakeupPreset) applyPreset(wakeupPreset); // apply preset if set, this ensures macro is applied even if we missed the wake-up time + if (delaycounter) + delaycounter--; // decrease delay counter if LEDs are on (they are always turned on after a wake-up, see below) + else if (wakeupPreset) + applyPreset(wakeupPreset); // apply preset if set, this ensures macro is applied even if we missed the wake-up time return; } if (sleepDelay > 0) { - powerup = false; // disable powerup sleep if delay is set - if (lastLoopTime == 0) lastLoopTime = millis(); // initialize - if (millis() - lastLoopTime < sleepDelay * 1000) { + powerup = false; // disable "safety" powerup sleep if delay is set + if (lastLoopTime == 0) + lastLoopTime = millis(); // initialize + if (millis() - lastLoopTime < sleepDelay * 1000) return; // wait until delay is over - } } else if (powerup && delaycounter) { delaycounter--; // on first boot without sleepDelay set, do not force-turn on - delay(1000); // just in case: give user a short ~10s window to turn LEDs on in UI + delay(1000); // just in case: give user a short ~10s window to turn LEDs on in UI (delaycounter is 10 by default) return; } if (powerup == false && delaycounter) { // delay sleep in case a preset is being loaded and turnOnAtBoot is disabled (handleIO() does enable offMode temporarily in this case) @@ -198,8 +199,8 @@ class DeepSleepUsermod : public Usermod { halerror = esp_deep_sleep_enable_gpio_wakeup(1<(PinOwner::None), "PinOwner::None must be zero, so default array initialization works as expected");