From e29b3406c60ccd178f81474af0ac1bcc59b86c0c Mon Sep 17 00:00:00 2001 From: ESPHome Device Builder Date: Thu, 30 Jul 2026 22:24:25 +1200 Subject: [PATCH] Edit esp-reterminal-e1001.yaml --- esphome/esp-reterminal-e1001.yaml | 56 ++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/esphome/esp-reterminal-e1001.yaml b/esphome/esp-reterminal-e1001.yaml index 5ffe553..e485eab 100644 --- a/esphome/esp-reterminal-e1001.yaml +++ b/esphome/esp-reterminal-e1001.yaml @@ -715,38 +715,62 @@ display: bool inverse = false; int border = normal_border; + auto ago_text = [&](int64_t seconds) -> std::string { + if (seconds < 60) return "Just now"; + if (seconds < 3600) { + int m = seconds / 60; + return std::to_string(m) + (m == 1 ? " min ago" : " mins ago"); + } + if (seconds < 86400) { + int h = seconds / 3600; + return std::to_string(h) + (h == 1 ? " hour ago" : " hours ago"); + } + int d = seconds / 86400; + return std::to_string(d) + (d == 1 ? " day ago" : " days ago"); + }; + + auto due_in_text = [&](int64_t seconds) -> std::string { + if (seconds < 60) return "due in 1 min"; + if (seconds < 3600) { + int m = seconds / 60; + return "due in " + std::to_string(m) + (m == 1 ? " min" : " mins"); + } + if (seconds < 86400) { + int h = seconds / 3600; + return "due in " + std::to_string(h) + (h == 1 ? " hour" : " hours"); + } + int d = seconds / 86400; + return "due in " + std::to_string(d) + (d == 1 ? " day" : " days"); + }; + if (state == "Complete") { - if (!elapsed.empty() && elapsed != "unknown" && elapsed != "Never") { - status = "COMPLETED"; - status_sub = elapsed; - } else if (!completed_time.empty() && completed_time != "Never" && completed_time != "unknown") { - status = "COMPLETED"; + status = "COMPLETED"; + if (!completed_time.empty() && completed_time != "Never" && completed_time != "unknown") { status_sub = completed_time; - } else { - status = "COMPLETED"; } } else if (state == "Not Due") { + status = "Not Due"; if (now_ts > 0 && !isnan(due_ts) && due_ts > now_ts) { const int64_t remaining = static_cast(due_ts) - now_ts; - const int hours = static_cast((remaining + 3599) / 3600); - if (hours <= hour_limit) { - status = "Due: " + std::to_string(hours) + (hours == 1 ? " Hour" : " Hours"); - } else { - const int days = static_cast((remaining + 86399) / 86400); - status = "Due: " + std::to_string(days) + (days == 1 ? " Day" : " Days"); - } - } else { - status = "Not Due"; + status_sub = due_in_text(remaining); } } else if (state == "Due") { status = "DUE NOW"; inverse = true; + if (now_ts > 0 && !isnan(due_ts) && now_ts > due_ts) { + const int64_t since = static_cast(now_ts - due_ts); + status_sub = ago_text(since); + } } else if (state == "Overdue") { status = "OVERDUE"; inverse = true; } else if (state == "Missed") { status = "MISSED"; inverse = true; + if (now_ts > 0 && !isnan(due_ts) && now_ts > due_ts) { + const int64_t since = static_cast(now_ts - due_ts); + status_sub = ago_text(since); + } } else if (state == "Skipped") { status = "SKIPPED"; inverse = true;