Files
AIO_3D_Print_Local_Screen/utils/auto_fan_status.py
2026-05-11 00:21:16 +08:00

40 lines
1.4 KiB
Python

import json
from PyQt6.QtCore import QTimer
class AutoFanStatus:
def __init__(self, update_interval_ms=1000):
self.cpu_temp = 0.0
self.fan_speed = 0
self.fan_state = "Unknown"
self.fan_rpm = 0
self.is_auto_fan_service_running = False
self._last_temp = 0.0
self._same_counter = 0
self._update_interval_ms = update_interval_ms
self._timer = QTimer()
self._timer.setSingleShot(False)
self._timer.timeout.connect(self.update_status)
self._timer.start(self._update_interval_ms)
def update_status(self):
try:
with open("/dev/shm/fan_status.json", "r") as f:
data = json.load(f)
self.cpu_temp = data.get("temp", 0.0)
self.fan_speed = data.get("pwm", 0)
self.fan_state = "Stalled" if data.get("is_stalled", False) else "Running"
self.fan_rpm = data.get("rpm", 0)
if self.cpu_temp == self._last_temp:
self._same_counter += 1
else:
self._same_counter = 0
self._last_temp = self.cpu_temp
self.is_auto_fan_service_running = self._same_counter < 5
except (FileNotFoundError, json.JSONDecodeError, OSError):
self.cpu_temp = 0.0
self.fan_speed = 0
self.fan_state = "Unknown"
self.fan_rpm = 0
self.is_auto_fan_service_running = False