터치 패널 시놀로지 팬 가드 표시

This commit is contained in:
seo committed 2026-07-31 13:08:10 +09:00
1 parent be6e9e117b
commit 5d79938a56
2 files changed
+28 -7

No files matched your search

+27 -6
View File
@@ -94,9 +94,14 @@ awk -F= '
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)"
pwm="$(cat /sys/class/hwmon/hwmon1/pwm2 2>/dev/null)"
enable="$(cat /sys/class/hwmon/hwmon1/pwm2_enable 2>/dev/null)"
guard="$(systemctl is-active synology-fan-guard.service 2>/dev/null || printf unknown)"
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}'
case "$pwm" in ''|*[!0-9]*) pwm=0 ;; esac
case "$enable" in ''|*[!0-9]*) enable=-1 ;; esac
awk -v cpu="$cpu" -v fan="$fan" -v pwm="$pwm" -v enable="$enable" -v guard="$guard" 'BEGIN {printf "SYNO_CPU=%.1f\nSYNO_FAN=%d\nSYNO_GUARD=%s\nSYNO_PWM=%d\nSYNO_PWM_ENABLE=%d\n", cpu / 1000, fan, guard, pwm, enable}'
"""
SAMPLE_INTERVAL_MS = 50
GRAPH_SECONDS = 10
@@ -715,7 +720,7 @@ class TouchPanel(QMainWindow):
(("wan", "UPLINK"), ("synology_sata2", "SATA2 I/O"), ("rpi_throttle", "RPI THROT")),
(("lan", "ETH1"), ("synology_sata4", "SATA4 I/O"), ("synology_temp", "SYNO TEMP")),
(("wifi5", "5G"), ("synology_local", "LOCAL"), ("synology_fan", "SYNO FAN")),
(("wifi24", "2.4G"), ("synology_wan", "UPLINK"), None),
(("wifi24", "2.4G"), ("synology_wan", "UPLINK"), ("synology_guard", "SYNO GUARD")),
]
for index, (pi_row, synology_row, extra_row) in enumerate(status_rows, 1):
key, label = pi_row
@@ -923,11 +928,11 @@ class TouchPanel(QMainWindow):
def render_synology_ping(self, latency_ms):
detail = f"{latency_ms:.1f}ms"
if latency_ms <= 10:
if latency_ms <= 15:
self.rows["synology_ping"].set_state(detail, read_steady=True, write_steady=False, error_steady=False)
elif latency_ms <= 15:
self.rows["synology_ping"].set_state(detail, read_steady=False, write_steady=True, error_steady=False)
elif latency_ms <= 30:
self.rows["synology_ping"].set_state(detail, read_steady=False, write_steady=True, error_steady=False)
elif latency_ms <= 50:
self.rows["synology_ping"].set_state(detail, read_steady=False, write_steady=False, error_steady=True)
else:
self.rows["synology_ping"].set_state(detail, read_steady=False, write_steady=False, error_steady=False, error_blink=True)
@@ -1027,6 +1032,7 @@ class TouchPanel(QMainWindow):
self.synology_fan_rpm = int(values.get("SYNO_FAN", "0") or 0)
self.render_synology_temp()
self.render_synology_fan()
self.render_synology_guard(values)
def synology_status_ready(self):
output = bytes(self.synology_proc.readAllStandardOutput()).decode("utf-8", "ignore")
@@ -1047,7 +1053,7 @@ class TouchPanel(QMainWindow):
self.set_synology_offline()
def set_synology_offline(self):
for key in ["synology_sata1", "synology_sata2", "synology_sata4", "synology_wan", "synology_local"]:
for key in ["synology_sata1", "synology_sata2", "synology_sata4", "synology_wan", "synology_local", "synology_guard"]:
self.rows[key].set_state("-", read_steady=False, write_steady=False, error_steady=True)
def render_synology_status(self, values):
@@ -1114,6 +1120,21 @@ class TouchPanel(QMainWindow):
def render_synology_fan(self):
self.render_fan_tile("synology_fan", self.synology_fan_rpm)
def render_synology_guard(self, values):
guard = values.get("SYNO_GUARD", "unknown")
try:
pwm = int(values.get("SYNO_PWM", "0") or 0)
enable = int(values.get("SYNO_PWM_ENABLE", "-1") or -1)
except ValueError:
pwm = 0
enable = -1
if guard != "active" or self.synology_fan_rpm <= 0:
self.rows["synology_guard"].set_state("FAIL", read_steady=False, write_steady=False, error_steady=True)
elif pwm >= 255 or enable != 5:
self.rows["synology_guard"].set_state("FULL", read_steady=False, write_steady=True, error_steady=False)
else:
self.rows["synology_guard"].set_state("AUTO", read_steady=True, write_steady=False, error_steady=False)
def render_fan_tile(self, key, rpm):
detail = f"{int(rpm):,} rpm" if rpm > 0 else "0 rpm"
self.rows[key].set_state(