Add Motion Sensor functionality and integrate timezone, bedtime, and wake time settings

This commit is contained in:
Joshua King
2026-02-21 20:25:30 -05:00
parent 192e657b07
commit 63061bdab2
9 changed files with 346 additions and 42 deletions

View File

@@ -20,6 +20,9 @@ void WebUI::begin(Settings& settings,
String wifiSsid = settings.wifiSsid();
String currentSsid = wifi.ssid();
String plantProfile = settings.plantProfile();
String timezone = settings.timezone();
String bedtime = settings.bedtime();
String wakeTime = settings.wakeTime();
String page =
"<!DOCTYPE html><html><head>"
@@ -132,6 +135,22 @@ void WebUI::begin(Settings& settings,
"<label class='checkbox-label'>"
"<input type='checkbox' name='wh_en' " + String(settings.webhookEnabled() ? "checked" : "") + "> Enable Webhook"
"</label>"
"<h2><i class='fas fa-clock' style='margin-right: 10px;'></i>Sleep Schedule</h2>"
"<label for='bed'>Bedtime</label>"
"<input type='time' id='bed' name='bed' value='" + bedtime + "' required>"
"<div class='form-hint'>FacePlant starts falling asleep 5 minutes before bedtime</div>"
"<label for='wake'>Wake Time</label>"
"<input type='time' id='wake' name='wake' value='" + wakeTime + "' required>"
"<div class='form-hint'>FacePlant shows wake-up animation for 5 minutes after this time</div>"
"<label for='tz'>Timezone</label>"
"<select id='tz' name='tz'>"
"<option value='America/New_York'" + String(timezone == "America/New_York" ? " selected" : "") + ">America/New_York (Eastern)</option>"
"<option value='America/Chicago'" + String(timezone == "America/Chicago" ? " selected" : "") + ">America/Chicago (Central)</option>"
"<option value='America/Denver'" + String(timezone == "America/Denver" ? " selected" : "") + ">America/Denver (Mountain)</option>"
"<option value='America/Los_Angeles'" + String(timezone == "America/Los_Angeles" ? " selected" : "") + ">America/Los_Angeles (Pacific)</option>"
"<option value='UTC0'" + String(timezone == "UTC0" ? " selected" : "") + ">UTC</option>"
"</select>"
"<div class='form-hint'>Default is America/New_York</div>"
"<div class='btn-group'>"
"<button type='submit' class='btn btn-primary'>Save Settings</button>"
"</div>"
@@ -235,6 +254,9 @@ void WebUI::begin(Settings& settings,
settings.setKidsMode(_server.hasArg("kids"));
settings.setWebhookEnabled(_server.hasArg("wh_en"));
if (_server.hasArg("wh")) settings.setWebhookUrl(_server.arg("wh"));
if (_server.hasArg("tz")) settings.setTimezone(_server.arg("tz"));
if (_server.hasArg("bed")) settings.setBedtime(_server.arg("bed"));
if (_server.hasArg("wake")) settings.setWakeTime(_server.arg("wake"));
_server.sendHeader("Location", "/");
_server.send(303);
});
@@ -302,6 +324,9 @@ void WebUI::begin(Settings& settings,
doc["moisture_pct"] = moisture.percent();
doc["raw"] = moisture.raw();
doc["kids_mode"] = settings.kidsMode();
doc["timezone"] = settings.timezone();
doc["bedtime"] = settings.bedtime();
doc["wake_time"] = settings.wakeTime();
doc["dead_mode"] = face.isDeadMode();
doc["uptime_ms"] = millis() - bootMs;