4.3 KiB
4.3 KiB
Control
Raspberry Pi 상태와 팬 동작을 확인하고 제어하는 개인 운영용 대시보드입니다.
웹 화면은 PHP로 동작합니다. Raspberry Pi 7인치 터치 디스플레이에서는 Python/PyQt 패널을 별도로 띄웁니다.
구성
public/index.php: 웹 화면public/api.php: 상태 조회와 제어 APIpublic/assets/app.js: 화면 렌더링, 차트, WebSocket 처리config/config.php: DB, 인증, 명령 실행 공통 코드apply_policy.php: 팬 정책 계산bin/control_ws.php: WebSocket 서버bin/wifi_observe.php: WiFi/LAN 장치 관측bin/synology_fan_guard.sh: Synology 팬 상태 확인용 스크립트touch_panel/panel.py: Raspberry Pi 터치 패널touch_panel/rpi_disk_temp_cache.py: Raspberry Pi SSD 온도 캐시systemd/: 서비스 예시 파일
사용한 것
PHPMariaDBJavaScriptChart.jsPythonPyQtWebSocketsystemdRaspberry PiSynology
웹 대시보드
- CPU 온도, RP1 온도, 팬 RPM, PWM 값을 보여줍니다.
- 팬 모드는
auto,manual,off로 나눕니다. - 설정 화면에서 팬 곡선, 로그인 정책, 진단 표시값을 바꿀 수 있습니다.
- WAN, LAN, 2.4G, 5G 기준으로 트래픽, 패킷, 오류, 드롭 값을 기록합니다.
- 네트워크 오류/드롭 값은 재부팅으로 커널 카운터가 초기화돼도 DB 누적값으로 이어서 봅니다.
- 저전압과 스로틀링 값은
vcgencmd get_throttled결과를 기준으로 표시합니다. - 사용자 생성 systemd 서비스 상태와 최근 journal 로그를 접힘 영역에 보여줍니다.
- 화면 파일이 바뀌면
asset-version.php값으로 캐시를 확인하고 브라우저를 새로 엽니다.
터치 패널
터치 패널은 웹 API를 호출하지 않습니다. Python이 로컬 /proc, /sys 값을 직접 읽습니다.
- Raspberry Pi: SSD I/O, LOCAL, UPLINK, ETH1, 5G, 2.4G
- Synology: PING, SATA1 I/O, SATA2 I/O, SATA4 I/O, LOCAL, UPLINK
- CHECK: RPI TEMP, RPI FAN, RPI THROT, SYNO TEMP, SYNO FAN, SYNO GUARD
표시등은 장식용으로 깜빡이지 않습니다. 직전 샘플보다 카운터가 증가했을 때만 켜집니다.
- 읽기 / 업로드: 초록
- 쓰기 / 다운로드: 주황
- 오류 / 드롭: 빨강
터치 패널 주기:
- 네트워크와 디스크 I/O: 100ms
- 온도와 팬 RPM: 500ms
- UPLINK 그래프: 100ms 샘플, 200포인트
- 온도/RPM 그래프: 500ms 샘플, 최근 60초
Synology SATA SMART/온도 직접 조회는 하지 않습니다. 디스크 응답 지연이 있을 때 smartctl이 D-state로 남을 수 있어서, 터치 패널은 /proc/diskstats 카운터만 읽습니다.
백그라운드 서비스
fanpanel-apply.service: 팬 정책을 1초마다 계산합니다.control-wifi-observe.timer: 접속한 브라우저가 없어도 WiFi/LAN 장치 관측 시간을 갱신합니다.control-rpi-disk-temp.service: Raspberry Pi SSD 온도를 캐시 파일에 저장합니다.synology-fan-guard.service: Synology CPU 온도와 팬 상태를 확인합니다.
데이터
control_state: 팬 모드와 PWMsensor_logs: 온도, RPM, PWM, 부하, 메모리, 디스크 사용률network_usage_logs: 인터페이스별 트래픽과 오류/드롭 이력network_quality_totals: 인터페이스별 오류/드롭 누적값power_event_states: 저전압과 스로틀링 상태systemd_service_cache: systemd 서비스 조회 캐시system_notice_logs: 알림 이력wifi_observed_sessions: 장치별 최초/마지막 관측 시간wifi_client_aliases: MAC 기준 수동 이름app_settings: 설정 화면에서 바꾼 값
실행
웹 서버와 DB 설정은 서버 환경에 맞춰 둡니다.
터치 패널 수동 실행:
cd /var/www/control
/usr/bin/python3 touch_panel/panel.py
GUI 로그인 뒤 자동 실행하려면 desktop autostart 파일을 사용합니다.
mkdir -p /home/seo/.config/autostart
cp touch_panel/control-touch-panel.desktop /home/seo/.config/autostart/
메모
- UPS 배터리 기능은 장치 제거 상태라 기본으로 표시하지 않습니다.
- Synology 디스크 SMART 값은 대시보드에서 직접 읽지 않습니다.
- 민감한 값은 코드에 넣지 않고 별도 설정 파일과 DB 설정값으로 분리합니다.