Files
control/README.md
T
2026-08-03 04:05:18 +09:00

111 lines
4.3 KiB
Markdown

# Control
Raspberry Pi 상태와 팬 동작을 확인하고 제어하는 개인 운영용 대시보드입니다.
웹 화면은 PHP로 동작합니다. Raspberry Pi 7인치 터치 디스플레이에서는 Python/PyQt 패널을 별도로 띄웁니다.
## 구성
- `public/index.php`: 웹 화면
- `public/api.php`: 상태 조회와 제어 API
- `public/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/`: 서비스 예시 파일
## 사용한 것
- `PHP`
- `MariaDB`
- `JavaScript`
- `Chart.js`
- `Python`
- `PyQt`
- `WebSocket`
- `systemd`
- `Raspberry Pi`
- `Synology`
## 웹 대시보드
- 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`: 팬 모드와 PWM
- `sensor_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 설정은 서버 환경에 맞춰 둡니다.
터치 패널 수동 실행:
```bash
cd /var/www/control
/usr/bin/python3 touch_panel/panel.py
```
GUI 로그인 뒤 자동 실행하려면 desktop autostart 파일을 사용합니다.
```bash
mkdir -p /home/seo/.config/autostart
cp touch_panel/control-touch-panel.desktop /home/seo/.config/autostart/
```
## 메모
- UPS 배터리 기능은 장치 제거 상태라 기본으로 표시하지 않습니다.
- Synology 디스크 SMART 값은 대시보드에서 직접 읽지 않습니다.
- 민감한 값은 코드에 넣지 않고 별도 설정 파일과 DB 설정값으로 분리합니다.