Drop "On battery for", clarify the remaining-estimate label
Build and push server image / build-and-push (push) Successful in 38s

"On battery for" was clutter next to the actual number people care
about. Relabeled "Est. remaining" to "Est. battery life left" and
dropped the now-unused on_battery_since field from the /queue response.

battery_estimate_s itself is unchanged -- it still needs 2h of span and
a 2% drop within the current discharge cycle (reset on any 5%+ jump,
i.e. a recharge or reflash) before it'll show anything. A frame that's
been power-cycled/reflashed recently won't have an estimate yet; that's
expected, not a regression.
This commit is contained in:
2026-07-22 11:29:17 -04:00
parent 55b53d5bb2
commit f4d2a23e8a
2 changed files with 3 additions and 9 deletions
-2
View File
@@ -207,7 +207,6 @@ def api_queue(
"firmware_available": cfg.firmware_available_version, "firmware_available": cfg.firmware_available_version,
"battery_percent": cfg.battery_percent, "battery_percent": cfg.battery_percent,
"battery_as_of": cfg.battery_as_of, "battery_as_of": cfg.battery_as_of,
"on_battery_since": cfg.battery_history[0][0] if cfg.battery_history else None,
"battery_estimate_s": battery_estimate_s(cfg), "battery_estimate_s": battery_estimate_s(cfg),
"controller_id": cfg.controlled_by_user_id, "controller_id": cfg.controlled_by_user_id,
"controller": ( "controller": (
@@ -240,7 +239,6 @@ def api_queue(
if snapshot["battery_percent"] >= 0 if snapshot["battery_percent"] >= 0
else None else None
), ),
"on_battery_since": snapshot["on_battery_since"],
"battery_estimate_s": snapshot["battery_estimate_s"], "battery_estimate_s": snapshot["battery_estimate_s"],
}, },
} }
+3 -7
View File
@@ -27,11 +27,8 @@ function renderDeviceStatusBar(device) {
if (device.battery) { if (device.battery) {
rows.push(['Battery', `${device.battery.percent}%`, false]); rows.push(['Battery', `${device.battery.percent}%`, false]);
} }
if (device.on_battery_since) {
rows.push(['On battery for', formatDuration(now - device.on_battery_since), false]);
}
if (device.battery_estimate_s !== null && device.battery_estimate_s !== undefined) { if (device.battery_estimate_s !== null && device.battery_estimate_s !== undefined) {
rows.push(['Est. remaining', `~${formatDuration(device.battery_estimate_s)}`, false]); rows.push(['Est. battery life left', `~${formatDuration(device.battery_estimate_s)}`, false]);
} }
for (const [label, value, alert] of rows) { for (const [label, value, alert] of rows) {
const stat = document.createElement('span'); const stat = document.createElement('span');
@@ -65,9 +62,8 @@ document.addEventListener('themechange', () => {
} }
}); });
// Fast tick: re-renders "Last seen"/"On battery for" from already- // Fast tick: re-renders "Last seen" from already-fetched data every
// fetched data every second so they count up smoothly without hitting // second so it counts up smoothly without hitting the server that often.
// the server that often.
setInterval(() => { setInterval(() => {
if (lastDeviceStatus) { if (lastDeviceStatus) {
renderDeviceStatusBar(lastDeviceStatus); renderDeviceStatusBar(lastDeviceStatus);