diff --git a/frigate/stats/util.py b/frigate/stats/util.py index 8a3a476e0..66c154f35 100644 --- a/frigate/stats/util.py +++ b/frigate/stats/util.py @@ -246,6 +246,7 @@ async def set_gpu_stats( "mem": str(round(float(nvidia_usage[i]["mem"]), 2)) + "%", "enc": str(round(float(nvidia_usage[i]["enc"]), 2)) + "%", "dec": str(round(float(nvidia_usage[i]["dec"]), 2)) + "%", + "temp": str(nvidia_usage[i]["temp"]), } else: diff --git a/frigate/util/services.py b/frigate/util/services.py index 1fdc376c7..767278554 100644 --- a/frigate/util/services.py +++ b/frigate/util/services.py @@ -484,10 +484,13 @@ def get_rockchip_npu_stats() -> Optional[dict[str, float | str]]: return stats -def try_get_info(f, h, default="N/A"): +def try_get_info(f, h, default="N/A", sensor=None): try: if h: - v = f(h) + if sensor is not None: + v = f(h, sensor) + else: + v = f(h) else: v = f() except nvml.NVMLError_NotSupported: @@ -516,6 +519,9 @@ def get_nvidia_gpu_stats() -> dict[int, dict]: util = try_get_info(nvml.nvmlDeviceGetUtilizationRates, handle) enc = try_get_info(nvml.nvmlDeviceGetEncoderUtilization, handle) dec = try_get_info(nvml.nvmlDeviceGetDecoderUtilization, handle) + temp = try_get_info( + nvml.nvmlDeviceGetTemperature, handle, default=None, sensor=0 + ) pstate = try_get_info(nvml.nvmlDeviceGetPowerState, handle, default=None) if util != "N/A": @@ -528,6 +534,11 @@ def get_nvidia_gpu_stats() -> dict[int, dict]: else: gpu_mem_util = -1 + if temp != "N/A" and temp is not None: + temp = float(temp) + else: + temp = None + if enc != "N/A": enc_util = enc[0] else: @@ -545,6 +556,7 @@ def get_nvidia_gpu_stats() -> dict[int, dict]: "enc": enc_util, "dec": dec_util, "pstate": pstate or "unknown", + "temp": temp, } except Exception: pass diff --git a/web/src/views/system/GeneralMetrics.tsx b/web/src/views/system/GeneralMetrics.tsx index e7dfbc2cf..186f73f78 100644 --- a/web/src/views/system/GeneralMetrics.tsx +++ b/web/src/views/system/GeneralMetrics.tsx @@ -737,8 +737,9 @@ export default function GeneralMetrics({