From e2fdd0417c8665d94ba06879cd3a0ba95c1a8ce3 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:09:42 +1100 Subject: [PATCH 01/22] Refactor uptime calculation and string formatting for ESPHome 2026.1.0 --- athom-smart-plug-v2.yaml | 45 ++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-smart-plug-v2.yaml b/athom-smart-plug-v2.yaml index 0b637bbd..0a07a4a1 100644 --- a/athom-smart-plug-v2.yaml +++ b/athom-smart-plug-v2.yaml @@ -379,24 +379,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 91c77dbfb9b9f9a9b62f577dc0388e8dd82e4305 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:10:21 +1100 Subject: [PATCH 02/22] Refactor uptime calculation and string formatting for ESPHome 2026.1.0 --- athom-smart-plug.yaml | 45 ++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-smart-plug.yaml b/athom-smart-plug.yaml index 2cc9095e..6e6086ba 100644 --- a/athom-smart-plug.yaml +++ b/athom-smart-plug.yaml @@ -393,24 +393,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 39f420b0980de05c7a5a043f802fbd963a038eea Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:11:13 +1100 Subject: [PATCH 03/22] Refactor uptime calculation and string formatting --- athom-sw01-v2.yaml | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-sw01-v2.yaml b/athom-sw01-v2.yaml index c6d739cd..40ac76ac 100644 --- a/athom-sw01-v2.yaml +++ b/athom-sw01-v2.yaml @@ -253,24 +253,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From c1d51335024810996833e4a3ac878984465ce1f6 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:11:28 +1100 Subject: [PATCH 04/22] Refactor uptime calculation and return types --- athom-cb02.yaml | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-cb02.yaml b/athom-cb02.yaml index 9234e140..92f01e79 100644 --- a/athom-cb02.yaml +++ b/athom-cb02.yaml @@ -230,24 +230,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 95d6c247feecc82d6647c3754a590a5041d34d0e Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:11:42 +1100 Subject: [PATCH 05/22] Refactor uptime sensor to use std::string Refactor uptime calculation to use std::string and modern C++ features. --- athom-garage-door.yaml | 45 ++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-garage-door.yaml b/athom-garage-door.yaml index feac609b..ae312396 100644 --- a/athom-garage-door.yaml +++ b/athom-garage-door.yaml @@ -217,24 +217,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 29a6fbba505f576820164fa8ff836cd90d722bfe Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:12:31 +1100 Subject: [PATCH 06/22] Refactor uptime calculation and string formatting --- athom-mini-switch.yaml | 45 ++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-mini-switch.yaml b/athom-mini-switch.yaml index 8c388cbd..106f16cd 100644 --- a/athom-mini-switch.yaml +++ b/athom-mini-switch.yaml @@ -258,24 +258,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 3cd2c4f4c4d3e36ad090467c76b019c40d702cc4 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:12:54 +1100 Subject: [PATCH 07/22] Refactor uptime sensor to use std::string --- athom-presence-sensor.yaml | 45 +++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-presence-sensor.yaml b/athom-presence-sensor.yaml index b5673f10..2c0a74b1 100644 --- a/athom-presence-sensor.yaml +++ b/athom-presence-sensor.yaml @@ -436,24 +436,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From b7227d76412935f0be532b4f06936fb4761ccc4c Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:13:12 +1100 Subject: [PATCH 08/22] Refactor uptime calculation to use std::string --- athom-relay-board-x1.yaml | 45 ++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-relay-board-x1.yaml b/athom-relay-board-x1.yaml index 819ef6c8..743f4a77 100644 --- a/athom-relay-board-x1.yaml +++ b/athom-relay-board-x1.yaml @@ -166,24 +166,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From c2f9b54c3bd568ca030d97e419be512cf989d00b Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:13:24 +1100 Subject: [PATCH 09/22] Refactor uptime calculation to use std::string --- athom-relay-board-x2.yaml | 45 ++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-relay-board-x2.yaml b/athom-relay-board-x2.yaml index 096843ef..1b437e71 100644 --- a/athom-relay-board-x2.yaml +++ b/athom-relay-board-x2.yaml @@ -173,24 +173,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 332d7e0768e706f1d3bc09f2e713d49495ed7b97 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:13:36 +1100 Subject: [PATCH 10/22] Refactor uptime calculation to use std::string --- athom-relay-board-x4.yaml | 45 ++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-relay-board-x4.yaml b/athom-relay-board-x4.yaml index f6d49000..c9ed0434 100644 --- a/athom-relay-board-x4.yaml +++ b/athom-relay-board-x4.yaml @@ -186,24 +186,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 679ebe9ef86bfff96608b9d1dd4bb89f366966a9 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:13:46 +1100 Subject: [PATCH 11/22] Update athom-relay-board-x8.yaml --- athom-relay-board-x8.yaml | 45 ++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-relay-board-x8.yaml b/athom-relay-board-x8.yaml index 7bf38627..2b5399e7 100644 --- a/athom-relay-board-x8.yaml +++ b/athom-relay-board-x8.yaml @@ -214,24 +214,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From fe478e8ac651c72919b4a4baa9afbc54858d0e25 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:13:58 +1100 Subject: [PATCH 12/22] Update athom-rgb-light.yaml --- athom-rgb-light.yaml | 45 +++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-rgb-light.yaml b/athom-rgb-light.yaml index 71e317e0..2d63b8ea 100644 --- a/athom-rgb-light.yaml +++ b/athom-rgb-light.yaml @@ -188,24 +188,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 7c0a3ea29aebb2433ef098b8f48ef5baf37a9a68 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:14:11 +1100 Subject: [PATCH 13/22] Refactor uptime sensor lambda for better clarity --- athom-rgbct-light.yaml | 45 ++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-rgbct-light.yaml b/athom-rgbct-light.yaml index d21b8b1c..fbee7346 100644 --- a/athom-rgbct-light.yaml +++ b/athom-rgbct-light.yaml @@ -249,24 +249,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 4200b539b38acc517d816e58086ee57092d45468 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:14:23 +1100 Subject: [PATCH 14/22] Refactor uptime sensor lambda for better clarity --- athom-rgbw-light.yaml | 45 ++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-rgbw-light.yaml b/athom-rgbw-light.yaml index 37b1e76d..a373a591 100644 --- a/athom-rgbw-light.yaml +++ b/athom-rgbw-light.yaml @@ -193,24 +193,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From fe146937e4a261ad974f09de62ed8653a3fb5067 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:14:36 +1100 Subject: [PATCH 15/22] Refactor uptime sensor logic for better clarity --- athom-rgbww-light.yaml | 45 ++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-rgbww-light.yaml b/athom-rgbww-light.yaml index b936df47..156ab878 100644 --- a/athom-rgbww-light.yaml +++ b/athom-rgbww-light.yaml @@ -243,24 +243,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 24ca70e11a00b21e4f91503c71fe80311a3232d0 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:15:10 +1100 Subject: [PATCH 16/22] Refactor uptime display logic in athom-sw01.yaml --- athom-sw01.yaml | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-sw01.yaml b/athom-sw01.yaml index 4a1df27a..e5b3bccb 100644 --- a/athom-sw01.yaml +++ b/athom-sw01.yaml @@ -253,24 +253,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 645ad2d17d7fca69b3ccd9793ee089bdeef844bf Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:15:22 +1100 Subject: [PATCH 17/22] Refactor uptime calculation and string formatting --- athom-sw02-v2.yaml | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-sw02-v2.yaml b/athom-sw02-v2.yaml index 974f723d..3f6797c1 100644 --- a/athom-sw02-v2.yaml +++ b/athom-sw02-v2.yaml @@ -299,24 +299,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 98641c5fbde76d4fe103f7b545be34ce1a619645 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:15:39 +1100 Subject: [PATCH 18/22] Refactor uptime calculation to use std::string --- athom-sw02.yaml | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-sw02.yaml b/athom-sw02.yaml index dc10dfd9..3f20b5ee 100644 --- a/athom-sw02.yaml +++ b/athom-sw02.yaml @@ -294,24 +294,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 2060450d8bbcd5e5fd7a5d608134a6847bf7e362 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:15:52 +1100 Subject: [PATCH 19/22] Refactor uptime calculation and output formatting --- athom-sw03.yaml | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-sw03.yaml b/athom-sw03.yaml index 956bb012..c27c5184 100644 --- a/athom-sw03.yaml +++ b/athom-sw03.yaml @@ -335,24 +335,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 068c528d87279961d0acddd69c6333f69c752a43 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:16:04 +1100 Subject: [PATCH 20/22] Update athom-sw04.yaml --- athom-sw04.yaml | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-sw04.yaml b/athom-sw04.yaml index e89e9df2..ff8b8bff 100644 --- a/athom-sw04.yaml +++ b/athom-sw04.yaml @@ -297,24 +297,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 1fcd5ef8059bba66fcad36c85f176ed3295e9e3c Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:16:21 +1100 Subject: [PATCH 21/22] Refactor uptime calculation to use std::string --- athom-wall-outlet.yaml | 45 ++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-wall-outlet.yaml b/athom-wall-outlet.yaml index cd078caf..4b828b40 100644 --- a/athom-wall-outlet.yaml +++ b/athom-wall-outlet.yaml @@ -346,24 +346,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: From 0fe9ca60198946f132e57a67f9ec556d51c8e725 Mon Sep 17 00:00:00 2001 From: Roving Ronin <108674933+Roving-Ronin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:16:36 +1100 Subject: [PATCH 22/22] Refactor uptime calculation and string formatting --- athom-without-relay-plug.yaml | 45 +++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/athom-without-relay-plug.yaml b/athom-without-relay-plug.yaml index 1e44e62b..509ed80e 100644 --- a/athom-without-relay-plug.yaml +++ b/athom-without-relay-plug.yaml @@ -289,24 +289,39 @@ text_sensor: name: "Uptime" entity_category: diagnostic lambda: |- - int seconds = (id(uptime_sensor).state); + int seconds = (int) id(uptime_seconds).state; int days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); + seconds %= (24 * 3600); int hours = seconds / 3600; - seconds = seconds % 3600; - int minutes = seconds / 60; - seconds = seconds % 60; - if ( days > 3650 ) { - return { "Starting up" }; - } else if ( days ) { - return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( hours ) { - return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; - } else if ( minutes ) { - return { (String(minutes) +"m "+ String(seconds) +"s").c_str() }; + seconds %= 3600; + int minutes = seconds / 60; + seconds %= 60; + + if (days > 3650) { + return std::string("Starting up"); + } else if (days) { + return std::string( + std::to_string(days) + "d " + + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (hours) { + return std::string( + std::to_string(hours) + "h " + + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); + } else if (minutes) { + return std::string( + std::to_string(minutes) + "m " + + std::to_string(seconds) + "s" + ); } else { - return { (String(seconds) +"s").c_str() }; - } + return std::string( + std::to_string(seconds) + "s" + ); + } icon: mdi:clock-start time: