From ed40f7fdec977a733cbbd67e6f2118be28d1f8f8 Mon Sep 17 00:00:00 2001 From: barry Date: Sat, 18 Jan 2025 22:22:22 +0100 Subject: [PATCH] new standby mode v1.2 --- spotiplayer_pi/main.py | 45 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/spotiplayer_pi/main.py b/spotiplayer_pi/main.py index d3bf954..b2dc6f4 100644 --- a/spotiplayer_pi/main.py +++ b/spotiplayer_pi/main.py @@ -11,6 +11,7 @@ from typing import Dict import subprocess import numpy as np +import psutil from spotiplayer_pi.lib import LCD_2inch from spotiplayer_pi.api import Api @@ -31,6 +32,14 @@ def get_cpu_temp(): return None +def get_cpu_util(): + try: + return psutil.cpu_percent(interval=0) + except Exception as e: + warnings.warn(f"Error getting CPU util: {e}") + return None + + def get_mem_util(): try: return int( @@ -84,6 +93,8 @@ def display_loop(api: Api, cfg: Dict): auth_interval = 0 buffer_temp = deque([None] * 320, maxlen=320) buffer_mem = deque([None] * 320, maxlen=320) + buffer_cpu = deque([None] * 320, maxlen=320) + alpha = 0.3 while True: if time.time() - last_auth_refresh >= auth_interval: @@ -101,10 +112,34 @@ def display_loop(api: Api, cfg: Dict): elif data == "not-playing": pixels = not_playing_img.load() draw = ImageDraw.Draw(not_playing_img) - draw.rectangle( - [(0, 100), (320, 240)], fill=(0, 0, 0) - ) # refresh stats bg - draw.rectangle([(95, 25), (250, 98)], fill=(0, 0, 0)) # refresh time bg + draw.rectangle([(0, 100), (320, 240)], fill=(0, 0, 0)) # refresh bg + draw.rectangle([(95, 25), (250, 98)], fill=(0, 0, 0)) # refresh bg + draw.rectangle([(240, 0), (320, 150)], fill=(0, 0, 0)) # refresh bg + + # Draw CPU usage + buffer_cpu.append(get_cpu_util()) + cpu_values = np.array([x for x in buffer_cpu if x is not None]) + cpu_values_idxs = [i for i, x in enumerate(buffer_cpu) if x is not None] + if len(cpu_values) >= 2: + smoothed = np.empty_like(cpu_values, dtype=float) + smoothed[0] = cpu_values[0] + for t in range(1, len(cpu_values)): + smoothed[t] = ( + alpha * cpu_values[t] + (1 - alpha) * cpu_values[t - 1] + ) + for i in range(1, len(cpu_values_idxs)): + idx = cpu_values_idxs[i] + val, prev_val = cpu_values[i], cpu_values[i - 1] + draw.rectangle( + [(idx, 200 - val), (idx - 1, 200 - prev_val)], + fill=(255, 253, 195), + ) + draw.text( + (290, 180 - val), + f"{int(val)}%", + fill=(255, 255, 255), + font=Font0, + ) # Draw Temp buffer_temp.append(get_cpu_temp()) @@ -161,7 +196,7 @@ def display_loop(api: Api, cfg: Dict): col = 0 if idx_ == max_bin else n_bins - 1 draw.text( (320 - ((idx + 1) * 16), 230 - bin_i // 65), - f"{bin_i / 1024:.2f}Gib", + f"{bin_i / 1024:.1f}Gi", font=Font00, fill=tuple(cmap2[col]), )