터치 패널 시놀로지 핑 상태 추가
This commit is contained in:
1 parent
b02b374c88
commit
1ac3cf0355
2 files changed
+82
-7
No files matched your search
+81
-6
@@ -30,6 +30,7 @@ NET_GROUPS = {
|
||||
|
||||
PC_IP = "192.168.50.73"
|
||||
PC_MAC = "74:56:3C:CD:CD:79"
|
||||
SYNOLOGY_PING_HOST = "chaegeon.com"
|
||||
SYNOLOGY_SSH = [
|
||||
"/usr/bin/ssh",
|
||||
"-i",
|
||||
@@ -102,6 +103,8 @@ GRAPH_SECONDS = 10
|
||||
GRAPH_POINTS = GRAPH_SECONDS * 1000 // SAMPLE_INTERVAL_MS
|
||||
SYNOLOGY_RESTART_INTERVAL_MS = 1000
|
||||
DISK_TEMP_INTERVAL_MS = SAMPLE_INTERVAL_MS
|
||||
RPI_THROTTLE_INTERVAL_MS = SAMPLE_INTERVAL_MS
|
||||
SYNOLOGY_PING_INTERVAL_MS = SAMPLE_INTERVAL_MS
|
||||
SYNOLOGY_DISK_TEMP_INTERVAL_MS = SAMPLE_INTERVAL_MS
|
||||
SYNOLOGY_HEALTH_INTERVAL_MS = SAMPLE_INTERVAL_MS
|
||||
|
||||
@@ -646,6 +649,18 @@ class TouchPanel(QMainWindow):
|
||||
self.synology_health_timer.timeout.connect(self.update_synology_health)
|
||||
self.synology_health_timer.start(SYNOLOGY_HEALTH_INTERVAL_MS)
|
||||
|
||||
self.synology_ping_proc = QProcess(self)
|
||||
self.synology_ping_proc.finished.connect(self.synology_ping_finished)
|
||||
self.synology_ping_timer = QTimer(self)
|
||||
self.synology_ping_timer.timeout.connect(self.ping_synology)
|
||||
self.synology_ping_timer.start(SYNOLOGY_PING_INTERVAL_MS)
|
||||
|
||||
self.rpi_throttle_proc = QProcess(self)
|
||||
self.rpi_throttle_proc.finished.connect(self.rpi_throttle_finished)
|
||||
self.rpi_throttle_timer = QTimer(self)
|
||||
self.rpi_throttle_timer.timeout.connect(self.update_rpi_throttle)
|
||||
self.rpi_throttle_timer.start(RPI_THROTTLE_INTERVAL_MS)
|
||||
|
||||
self.pulse_timer = QTimer(self)
|
||||
self.pulse_timer.timeout.connect(self.tick_pulses)
|
||||
self.pulse_timer.start(25)
|
||||
@@ -655,6 +670,8 @@ class TouchPanel(QMainWindow):
|
||||
self.update_synology_status()
|
||||
self.update_synology_disk_temp()
|
||||
self.update_synology_health()
|
||||
self.ping_synology()
|
||||
self.update_rpi_throttle()
|
||||
self.update_dashboard()
|
||||
|
||||
def _build_ui(self):
|
||||
@@ -688,12 +705,12 @@ class TouchPanel(QMainWindow):
|
||||
status_grid.addWidget(extra_title, 0, 2)
|
||||
|
||||
status_rows = [
|
||||
(("io", "SSD I/O"), ("synology_sata1", "SATA1 I/O"), ("rpi_temp", "RPI TEMP")),
|
||||
(("local", "LOCAL"), ("synology_sata2", "SATA2 I/O"), ("rpi_fan", "RPI FAN")),
|
||||
(("wan", "UPLINK"), ("synology_sata4", "SATA4 I/O"), ("synology_temp", "SYNO TEMP")),
|
||||
(("lan", "ETH1"), ("synology_local", "LOCAL"), ("synology_fan", "SYNO FAN")),
|
||||
(("wifi5", "5G"), ("synology_wan", "UPLINK"), None),
|
||||
(("wifi24", "2.4G"), None, None),
|
||||
(("io", "SSD I/O"), ("synology_ping", "PING"), ("rpi_temp", "RPI TEMP")),
|
||||
(("local", "LOCAL"), ("synology_sata1", "SATA1 I/O"), ("rpi_fan", "RPI FAN")),
|
||||
(("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),
|
||||
]
|
||||
for index, (pi_row, synology_row, extra_row) in enumerate(status_rows, 1):
|
||||
key, label = pi_row
|
||||
@@ -863,6 +880,64 @@ class TouchPanel(QMainWindow):
|
||||
del exit_status
|
||||
self.pc_button.set_online(exit_code == 0)
|
||||
|
||||
def ping_synology(self):
|
||||
if self.synology_ping_proc.state() != QProcess.NotRunning:
|
||||
return
|
||||
self.synology_ping_proc.start("/usr/bin/ping", ["-n", "-c", "1", "-W", "1", SYNOLOGY_PING_HOST])
|
||||
|
||||
def synology_ping_finished(self, exit_code, exit_status):
|
||||
del exit_status
|
||||
output = (
|
||||
bytes(self.synology_ping_proc.readAllStandardOutput()).decode("utf-8", "ignore")
|
||||
+ bytes(self.synology_ping_proc.readAllStandardError()).decode("utf-8", "ignore")
|
||||
)
|
||||
latency_ms = None
|
||||
for token in output.replace("\n", " ").split():
|
||||
if not token.startswith("time="):
|
||||
continue
|
||||
try:
|
||||
latency_ms = float(token.split("=", 1)[1])
|
||||
except ValueError:
|
||||
latency_ms = None
|
||||
break
|
||||
if exit_code != 0 or latency_ms is None:
|
||||
self.rows["synology_ping"].set_state("fail", read_steady=False, write_steady=False, error_steady=False, error_blink=True)
|
||||
return
|
||||
detail = f"{latency_ms:.1f}ms"
|
||||
if latency_ms <= 10:
|
||||
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=False, error_steady=True)
|
||||
else:
|
||||
self.rows["synology_ping"].set_state(detail, read_steady=False, write_steady=False, error_steady=False, error_blink=True)
|
||||
|
||||
def update_rpi_throttle(self):
|
||||
if self.rpi_throttle_proc.state() != QProcess.NotRunning:
|
||||
return
|
||||
self.rpi_throttle_proc.start("/usr/bin/vcgencmd", ["get_throttled"])
|
||||
|
||||
def rpi_throttle_finished(self, exit_code, exit_status):
|
||||
del exit_status
|
||||
output = bytes(self.rpi_throttle_proc.readAllStandardOutput()).decode("utf-8", "ignore").strip()
|
||||
if exit_code != 0 or "throttled=" not in output:
|
||||
self.rows["rpi_throttle"].set_state("N/A", read_steady=False, write_steady=False, error_steady=True)
|
||||
return
|
||||
try:
|
||||
flags = int(output.split("=", 1)[1], 16)
|
||||
except ValueError:
|
||||
self.rows["rpi_throttle"].set_state("N/A", read_steady=False, write_steady=False, error_steady=True)
|
||||
return
|
||||
current = flags & 0xF
|
||||
history = flags & 0xF0000
|
||||
if current:
|
||||
self.rows["rpi_throttle"].set_state(f"0x{flags:x}", read_steady=False, write_steady=False, error_steady=True)
|
||||
elif history:
|
||||
self.rows["rpi_throttle"].set_state(f"0x{flags:x}", read_steady=False, write_steady=True, error_steady=False)
|
||||
else:
|
||||
self.rows["rpi_throttle"].set_state("OK", read_steady=True, write_steady=False, error_steady=False)
|
||||
|
||||
def update_disk_temp(self):
|
||||
if self.disk_temp_proc.state() != QProcess.NotRunning:
|
||||
return
|
||||
|
||||
Reference in new issue
Block a user