터치 패널 체크 열에 팬 상태 추가
This commit is contained in:
1 parent
e82602a22d
commit
3eda77c741
2 files changed
+65
-13
No files matched your search
+64
-12
@@ -90,11 +90,19 @@ awk -F= '
|
||||
$1 == "sata4" {printf "SATA4_TEMP=%s\n", $2 ? $2 : "-"}
|
||||
'
|
||||
"""
|
||||
SYNOLOGY_HEALTH_SCRIPT = r"""
|
||||
cpu="$(cat /sys/class/hwmon/hwmon0/temp1_input 2>/dev/null)"
|
||||
fan="$(cat /sys/class/hwmon/hwmon1/fan2_input 2>/dev/null)"
|
||||
case "$cpu" in ''|*[!0-9]*) cpu=0 ;; esac
|
||||
case "$fan" in ''|*[!0-9]*) fan=0 ;; esac
|
||||
awk -v cpu="$cpu" -v fan="$fan" 'BEGIN {printf "SYNO_CPU=%.1f\nSYNO_FAN=%d\n", cpu / 1000, fan}'
|
||||
"""
|
||||
SAMPLE_INTERVAL_MS = 50
|
||||
GRAPH_SECONDS = 30
|
||||
GRAPH_POINTS = GRAPH_SECONDS * 1000 // SAMPLE_INTERVAL_MS
|
||||
SYNOLOGY_RESTART_INTERVAL_MS = 1000
|
||||
SYNOLOGY_DISK_TEMP_INTERVAL_MS = 10000
|
||||
SYNOLOGY_HEALTH_INTERVAL_MS = 5000
|
||||
|
||||
|
||||
def byte_rate_unit(values):
|
||||
@@ -569,6 +577,8 @@ class TouchPanel(QMainWindow):
|
||||
self.synology_buffer = ""
|
||||
self.synology_values = {}
|
||||
self.synology_disk_temps = {}
|
||||
self.synology_cpu_temp = 0.0
|
||||
self.synology_fan_rpm = 0
|
||||
self.last_io = None
|
||||
self.last_sample = None
|
||||
self.last_graph = None
|
||||
@@ -621,6 +631,12 @@ class TouchPanel(QMainWindow):
|
||||
self.synology_disk_temp_timer.timeout.connect(self.update_synology_disk_temp)
|
||||
self.synology_disk_temp_timer.start(SYNOLOGY_DISK_TEMP_INTERVAL_MS)
|
||||
|
||||
self.synology_health_proc = QProcess(self)
|
||||
self.synology_health_proc.finished.connect(self.synology_health_finished)
|
||||
self.synology_health_timer = QTimer(self)
|
||||
self.synology_health_timer.timeout.connect(self.update_synology_health)
|
||||
self.synology_health_timer.start(SYNOLOGY_HEALTH_INTERVAL_MS)
|
||||
|
||||
self.pulse_timer = QTimer(self)
|
||||
self.pulse_timer.timeout.connect(self.tick_pulses)
|
||||
self.pulse_timer.start(25)
|
||||
@@ -629,6 +645,7 @@ class TouchPanel(QMainWindow):
|
||||
self.update_disk_temp()
|
||||
self.update_synology_status()
|
||||
self.update_synology_disk_temp()
|
||||
self.update_synology_health()
|
||||
self.update_dashboard()
|
||||
|
||||
def _build_ui(self):
|
||||
@@ -663,9 +680,9 @@ class TouchPanel(QMainWindow):
|
||||
|
||||
status_rows = [
|
||||
(("io", "DISK I/O"), ("synology_sata1", "SATA1"), ("rpi_temp", "RPI TEMP")),
|
||||
(("local", "LOCAL"), ("synology_sata2", "SATA2"), ("synology_temp", "SYNO TEMP")),
|
||||
(("wan", "UPLINK"), ("synology_sata4", "SATA4"), None),
|
||||
(("lan", "ETH1"), ("synology_local", "LOCAL"), None),
|
||||
(("local", "LOCAL"), ("synology_sata2", "SATA2"), ("rpi_fan", "RPI FAN")),
|
||||
(("wan", "UPLINK"), ("synology_sata4", "SATA4"), ("synology_temp", "SYNO TEMP")),
|
||||
(("lan", "ETH1"), ("synology_local", "LOCAL"), ("synology_fan", "SYNO FAN")),
|
||||
(("wifi5", "5G"), ("synology_wan", "UPLINK"), None),
|
||||
(("wifi24", "2.4G"), None, None),
|
||||
]
|
||||
@@ -801,6 +818,7 @@ class TouchPanel(QMainWindow):
|
||||
self.rows["wifi24"].set_state(self.iface_detail(groups["wifi24"], "wlan0"), activity["wifi24"]["error"], activity["wifi24"]["read"], activity["wifi24"]["write"])
|
||||
self.rows["wifi5"].set_state(self.iface_detail(groups["wifi5"], "wlan1"), activity["wifi5"]["error"], activity["wifi5"]["read"], activity["wifi5"]["write"])
|
||||
self.render_rpi_temp(temp)
|
||||
self.render_rpi_fan(rpm)
|
||||
|
||||
self.latest_temp = temp
|
||||
self.latest_rpm = rpm
|
||||
@@ -865,6 +883,11 @@ class TouchPanel(QMainWindow):
|
||||
return
|
||||
self.synology_disk_temp_proc.start(SYNOLOGY_SSH[0], SYNOLOGY_SSH[1:] + [SYNOLOGY_DISK_TEMP_SCRIPT])
|
||||
|
||||
def update_synology_health(self):
|
||||
if self.synology_health_proc.state() != QProcess.NotRunning:
|
||||
return
|
||||
self.synology_health_proc.start(SYNOLOGY_SSH[0], SYNOLOGY_SSH[1:] + [SYNOLOGY_HEALTH_SCRIPT])
|
||||
|
||||
def synology_disk_temp_finished(self, exit_code, exit_status):
|
||||
del exit_status
|
||||
if exit_code != 0:
|
||||
@@ -877,7 +900,25 @@ class TouchPanel(QMainWindow):
|
||||
key, value = line.split("=", 1)
|
||||
temps[key.strip()] = value.strip()
|
||||
self.synology_disk_temps = temps
|
||||
|
||||
def synology_health_finished(self, exit_code, exit_status):
|
||||
del exit_status
|
||||
if exit_code != 0:
|
||||
return
|
||||
output = bytes(self.synology_health_proc.readAllStandardOutput()).decode("utf-8", "ignore")
|
||||
values = {}
|
||||
for line in output.splitlines():
|
||||
if "=" not in line:
|
||||
continue
|
||||
key, value = line.split("=", 1)
|
||||
values[key.strip()] = value.strip()
|
||||
try:
|
||||
self.synology_cpu_temp = float(values.get("SYNO_CPU", "0") or 0)
|
||||
except ValueError:
|
||||
self.synology_cpu_temp = 0.0
|
||||
self.synology_fan_rpm = int(values.get("SYNO_FAN", "0") or 0)
|
||||
self.render_synology_temp()
|
||||
self.render_synology_fan()
|
||||
|
||||
def synology_status_ready(self):
|
||||
output = bytes(self.synology_proc.readAllStandardOutput()).decode("utf-8", "ignore")
|
||||
@@ -947,18 +988,29 @@ class TouchPanel(QMainWindow):
|
||||
error_steady=hottest >= 70,
|
||||
)
|
||||
|
||||
def render_rpi_fan(self, rpm):
|
||||
self.render_fan_tile("rpi_fan", rpm)
|
||||
|
||||
def render_synology_temp(self):
|
||||
synology_temps = []
|
||||
for value in self.synology_disk_temps.values():
|
||||
if value.isdigit():
|
||||
synology_temps.append(float(value))
|
||||
synology_max = max(synology_temps) if synology_temps else 0.0
|
||||
detail = f"{synology_max:.0f} C" if synology_max > 0 else "- C"
|
||||
temp = self.synology_cpu_temp
|
||||
detail = f"{temp:.0f} C" if temp > 0 else "- C"
|
||||
self.rows["synology_temp"].set_state(
|
||||
detail,
|
||||
read_steady=0 < synology_max < 60,
|
||||
write_steady=60 <= synology_max < 70,
|
||||
error_steady=synology_max >= 70,
|
||||
read_steady=0 < temp < 75,
|
||||
write_steady=75 <= temp < 90,
|
||||
error_steady=temp >= 90,
|
||||
)
|
||||
|
||||
def render_synology_fan(self):
|
||||
self.render_fan_tile("synology_fan", self.synology_fan_rpm)
|
||||
|
||||
def render_fan_tile(self, key, rpm):
|
||||
detail = f"{int(rpm):,} rpm" if rpm > 0 else "0 rpm"
|
||||
self.rows[key].set_state(
|
||||
detail,
|
||||
read_steady=500 <= rpm <= 4500,
|
||||
write_steady=4500 < rpm <= 7000,
|
||||
error_steady=rpm == 0 or rpm > 7000,
|
||||
)
|
||||
|
||||
def synology_disk_temp_detail(self, disk):
|
||||
|
||||
Reference in new issue
Block a user