feat(doorbell): add inactivity timeout to turn off screen

This commit is contained in:
2026-02-18 01:12:36 -08:00
parent bfba3b02fd
commit 4c0991b8bd
4 changed files with 91 additions and 104 deletions

View File

@@ -16,6 +16,7 @@
#define HOLD_TO_SILENCE_MS 3000
#define ALERT_TIMEOUT_MS 120000
#define SILENCE_DISPLAY_MS 10000
#define INACTIVITY_TIMEOUT_MS 30000
#define WIFI_CONNECT_TIMEOUT_MS 15000
#define HTTP_TIMEOUT_MS 10000
#define HINT_ANIMATION_MS 2000

View File

@@ -79,6 +79,7 @@ void DoorbellLogic::finishBoot() {
_display->setBacklight(false);
_state.backlightOn = false;
_bootGraceEnd = millis() + BOOT_GRACE_MS;
_lastActivityMs = millis();
Serial.printf("[BOOT] Grace period: %d ms\n", BOOT_GRACE_MS);
Serial.printf("[BOOT] Ready — monitoring %s\n", NTFY_SERVER);
}
@@ -130,6 +131,13 @@ void DoorbellLogic::update() {
}
break;
default:
// Inactivity timeout: turn off screen after no activity
if(_state.screen != ScreenID::OFF && now - _lastActivityMs > INACTIVITY_TIMEOUT_MS) {
Serial.println("[STATE] Inactivity timeout → OFF");
_state.screen = ScreenID::OFF;
_display->setBacklight(false);
_state.backlightOn = false;
}
break;
}
}
@@ -300,6 +308,9 @@ int DoorbellLogic::handleTouch(const TouchEvent& evt) {
if(!evt.pressed)
return -1;
// Reset inactivity timer on any touch
_lastActivityMs = millis();
if(_state.screen == ScreenID::OFF) {
Serial.println("[TOUCH] OFF → DASHBOARD");
setScreen(ScreenID::DASHBOARD);

View File

@@ -57,6 +57,7 @@ private:
uint32_t _lastPollMs = 0;
uint32_t _lastHeartbeatMs = 0;
uint32_t _lastActivityMs = 0;
uint32_t _bootGraceEnd = 0;
String _alertUrl;