Add Hailo temperature retrieval

This commit is contained in:
tigattack 2025-12-01 12:14:38 +00:00
parent 97b29d177a
commit 4d0456dcf0
2 changed files with 47 additions and 0 deletions

View File

@ -22,6 +22,7 @@ from frigate.util.services import (
get_bandwidth_stats, get_bandwidth_stats,
get_cpu_stats, get_cpu_stats,
get_fs_type, get_fs_type,
get_hailo_temps,
get_intel_gpu_stats, get_intel_gpu_stats,
get_jetson_stats, get_jetson_stats,
get_nvidia_gpu_stats, get_nvidia_gpu_stats,
@ -91,6 +92,9 @@ def get_temperatures() -> dict[str, float]:
if temp is not None: if temp is not None:
temps[apex] = temp temps[apex] = temp
# Get temperatures for Hailo devices
temps.update(get_hailo_temps())
return temps return temps

View File

@ -18,6 +18,7 @@ import cv2
import psutil import psutil
import py3nvml.py3nvml as nvml import py3nvml.py3nvml as nvml
import requests import requests
from hailo_platform import Device
from frigate.const import ( from frigate.const import (
DRIVER_AMD, DRIVER_AMD,
@ -549,6 +550,48 @@ def get_jetson_stats() -> Optional[dict[int, dict]]:
return results return results
def get_hailo_temps() -> dict[str, float]:
"""Get temperatures for Hailo devices."""
temps = {}
try:
device_ids = Device.scan()
for i, device_id in enumerate(device_ids):
try:
device = Device(device_id)
temp_info = device.control.get_chip_temperature()
# Get board name and normalise it
try:
identity = device.control.identify()
# Extract board name from identity string (e.g., "Hailo-8" -> "hailo8")
board_name = None
for line in str(identity).split("\n"):
if line.startswith("Board Name:"):
board_name = (
line.split(":", 1)[1].strip().lower().replace("-", "")
)
break
if not board_name:
board_name = f"hailo{i}"
except Exception:
board_name = f"hailo{i}"
# Use indexed name if multiple devices, otherwise just the board name
device_name = f"{board_name}-{i}" if len(device_ids) > 1 else board_name
# ts1_temperature is also available, but appeared to be the same as ts0 in testing.
temps[device_name] = round(temp_info.ts0_temperature, 1)
device.release()
except Exception:
continue
except Exception:
pass
return temps
def ffprobe_stream(ffmpeg, path: str, detailed: bool = False) -> sp.CompletedProcess: def ffprobe_stream(ffmpeg, path: str, detailed: bool = False) -> sp.CompletedProcess:
"""Run ffprobe on stream.""" """Run ffprobe on stream."""
clean_path = escape_special_characters(path) clean_path = escape_special_characters(path)