터치 패널 Qt 프로토타입 추가
This commit is contained in:
1 parent
892e37e72d
commit
44ed804121
4 files changed
+458
No files matched your search
@@ -68,7 +68,10 @@ Control은 라즈베리파이/리눅스 호스트의 팬과 시스템 상태를
|
||||
- `apply_policy.php`: CLI/cron 팬 정책 적용
|
||||
- `bin/control_ws.php`: WebSocket 서버. 핵심 PHP 파일 변경 감지 시 종료되고 systemd가 재시작해 새 코드를 로드
|
||||
- `bin/wifi_observe.php`: 5G WiFi 연결 시간 보정을 위한 시스템단 관측 CLI
|
||||
- `touch_panel/panel.py`: 라즈베리파이 정품 터치 디스플레이용 Qt 관리자 패널 프로토타입
|
||||
- `touch_panel/control_touch_bridge.php`: Qt 패널이 기존 Control PHP 함수를 호출하는 로컬 JSON 브리지
|
||||
- `systemd/control-wifi-observe.*`: WiFi 관측 CLI를 주기적으로 실행하는 systemd unit 예시
|
||||
- `systemd/control-touch-panel.service`: GUI 세션에서 Qt 관리자 패널을 띄우는 systemd unit 예시
|
||||
|
||||
`asset-version.php`는 `public`의 PHP/JS/CSS/manifest/icon 파일과 `config`의 PHP 파일을 읽어 크기, 수정 시각, sha256 hash를 묶은 전체 버전과 파일별 버전을 만듭니다. `index.php`는 `app.js`, `asset-reload.js`, `wakelock.js`, manifest, icon 경로에 실제 파일 수정 시각과 hash 기반 `v` 값을 붙여 정적 파일 캐시가 오래 남지 않게 합니다. `asset-reload.js`는 화면 복귀, 포커스 복귀, 온라인 복귀, 모바일 터치/클릭 복귀, 30초 간격으로 이 값을 다시 확인하고, 전체 버전 또는 현재 로드된 script/link의 파일별 `v` 값이 다르면 브라우저 Cache Storage를 비우고 service worker 등록을 해제한 뒤 현재 화면을 다시 엽니다. 현재 URL의 `assetReload` 토큰이 최신 파일 묶음 hash와 다르면 첫 진입도 토큰을 붙인 URL로 다시 열어 낡은 JS/CSS가 먼저 실행되는 상황을 줄입니다. 삼성 브라우저 등에서 Web Storage나 `Promise.finally()` 호환성이 부족해도 동작하도록 쿠키 fallback과 timeout 기반 캐시 삭제를 사용합니다. `index.php`는 `no-store` 헤더를 내려 문서 자체가 브라우저 캐시에 오래 남지 않게 합니다.
|
||||
|
||||
@@ -124,6 +127,26 @@ API 응답의 `battery.enabled`는 false, `battery.removed`는 true로 내려가
|
||||
|
||||
설정 모달이 열려 있는 동안 1초 상태 갱신은 폼 DOM을 다시 만들지 않습니다. 입력 중인 값은 저장, 기본값 초기화, 닫기 전까지 유지되며, 백그라운드 snapshot은 내부 설정 payload만 갱신합니다. 단순 boolean 설정은 `켜기`/`끄기` 세그먼트로 표시합니다.
|
||||
|
||||
## 터치 패널 프로토타입
|
||||
|
||||
라즈베리파이 정품 7인치 DSI 터치 디스플레이에 띄울 로컬 Qt 관리자 패널 초안을 둡니다. 현재 라즈베리파이는 `multi-user.target` 콘솔 부팅이며 PyQt5는 설치되어 있습니다. GUI로 원복하려면 X/데스크톱 패키지를 다시 설치한 뒤 graphical target으로 바꾸고 재부팅해야 합니다.
|
||||
|
||||
```bash
|
||||
sudo raspi-config
|
||||
sudo systemctl set-default graphical.target
|
||||
```
|
||||
|
||||
패키지가 제거된 상태면 Raspberry Pi OS 데스크톱 패키지와 X 서버를 먼저 복구해야 합니다. 운영 패키지 설치는 사용자가 확인한 뒤 진행합니다.
|
||||
|
||||
프로토타입 수동 실행은 GUI 세션에서 다음처럼 합니다.
|
||||
|
||||
```bash
|
||||
cd /var/www/control
|
||||
/usr/bin/python3 touch_panel/panel.py
|
||||
```
|
||||
|
||||
패널은 `touch_panel/control_touch_bridge.php`를 통해 기존 `collect_snapshot()`, `set_control_state()`를 재사용합니다. 왼쪽에는 `IO`, `WAN`, `LAN`, `2.4G`, `5G` 상태 원을 표시하고 active 상태면 초록 원이 갱신 때 짧게 깜빡입니다. 오른쪽에는 팬 RPM, 판단 온도, PWM, `auto`/`manual`/`off`, PWM 증감 버튼을 둡니다. 팬 버튼은 우선 Control DB의 팬 상태를 저장하고, 실제 적용은 기존 Control 팬 정책 루프가 이어받는 구조입니다.
|
||||
|
||||
## 갱신 주기
|
||||
|
||||
- WebSocket 상태 갱신: 1초마다
|
||||
|
||||
Reference in new issue
Block a user