No description
Find a file
cw2007 f063060e2d refactor(dashboard): 탭 구조 전면 재개편(실시간/추이/이력/시스템)
단일 1594줄 스크롤 페이지를 상시 영역 + 4탭 서버렌더(?tab=) 구조로 재개편한다.
5인 리뷰 패널(정보구조·관제도메인·UX·구현·접근성) 종합 스펙 기반.

상시 영역(전 탭 공통):
- 시스템 상태 히어로 — 누수(is_leak)·미복구 사고를 FORECAST_ENABLED 와 무관하게
  반영(기존: 누수 중에도 '정상 감시 중' 표시 가능한 결함). 경보 시 센서명·위치·
  현재값·경보 시작 시각·SMS 발송 결과를 한 줄로 명시.
- 알림 스트립(SMS 실패/미복구 누수/수집 거부 1줄 요약 + 탭 딥링크)
- 대응 필요 패널(플레이북·담당자) — 안전 알림은 탭과 무관하게 상시 노출
- 통합 KPI 스트립 6타일 — 모바일 퀵타일·듀얼 KPI·게이지 배지를 하나로 통합
- 탭바(nav+aria-current, 경보 배지)

탭:
- 실시간 현황: 온습도/누수 카드(예보 여유 상시 표시), 미복구 사고, SMS 채널·오늘 요약
- 추이·통계: 온습도 추이 차트, 7일 경보 추이, 경보 종류 도넛(단위 명기), 가동률, 리더보드
- 이력 조회: 누수 사고·측정·이벤트·SMS 이력, 30일 센서별 평균 온습도, SMS 발송 통계
- 시스템 점검: 자가진단, 수집 거부 관측성, SMS 채널 점검, 플레이북 사본, 임계 설정 요약
- ?tab=all: 인쇄용 전체 렌더(details 강제 펼침, 자동 새로고침 없음)

구현:
- 데이터 계층 분리(dashboard_data.php): 전역 vs 탭 전용 쿼리 — 로드당 쿼리 ~50→전역
  14+탭 5~8개(약 60% 절감). ops_checks 파일 캐시(TTL 120초, 시스템 탭은 우회).
- 탭 partial(tabs/*.php)은 dash_render_tab() 함수 스코프 격리(EXTR_SKIP)로 렌더.
- 30초 자동 새로고침은 URL 쿼리 보존으로 탭·기간 유지. 스크롤/details 복원은 탭별 키.
- 폐쇄망 유지: 외부 CDN/JS 없음(인라인 SVG). app.css 는 기존 규칙 불변, 추가만.
- 보안: dashboard_data·forecast·tabs 를 .htaccess FilesMatch + tabs/.htaccess +
  PHP 직접접근 가드로 삼중 차단.

security_hardening_test: 대시보드 표면을 분리 구조(셸+데이터+탭)에 맞춰 검사하도록 보정.
2026-07-11 11:23:14 +09:00
.claude docs: 문서 현행화(leak_ 접두사·경로 스크럽) + 코드 투어 + settings deny 수정 2026-07-02 18:52:15 +09:00
.tours docs: 문서 현행화(leak_ 접두사·경로 스크럽) + 코드 투어 + settings deny 수정 2026-07-02 18:52:15 +09:00
docs docs(sht30): 온습도 2번 모듈 문서를 STM32 기본 → Raspberry Pi 기본으로 정합 2026-07-10 10:42:31 +09:00
firmware docs: 문서 현행화(leak_ 접두사·경로 스크럽) + 코드 투어 + settings deny 수정 2026-07-02 18:52:15 +09:00
P4422-2 feat(sht30): 벤더 예제(P4422-2) 기반 단발 측정 명령 0x2400 전환 2026-07-10 10:42:10 +09:00
php refactor(dashboard): 탭 구조 전면 재개편(실시간/추이/이력/시스템) 2026-07-11 11:23:14 +09:00
raspberry_pi4 i18n(pi): Raspberry Pi 번들 소스 한글 → 영어 (콘솔 mojibake 해소) 2026-07-10 10:44:13 +09:00
raspberry_pi4_sht30 i18n(pi): Raspberry Pi 번들 소스 한글 → 영어 (콘솔 mojibake 해소) 2026-07-10 10:44:13 +09:00
scripts refactor(db)!: DB 테이블 전체 leak_ 접두사 통일 + 구 마이그레이션 폐기 2026-07-02 18:50:56 +09:00
sql refactor(db)!: DB 테이블 전체 leak_ 접두사 통일 + 구 마이그레이션 폐기 2026-07-02 18:50:56 +09:00
tests refactor(dashboard): 탭 구조 전면 재개편(실시간/추이/이력/시스템) 2026-07-11 11:23:14 +09:00
tools feat(sensor): 센서별 표시 라벨(위치·관리주체) 서버측 오버라이드 2026-07-11 11:22:40 +09:00
(20260518)_IoT_기반_모니터링_체계_구축을_위한_보안대책서.hwp chore: import codebase with security hardening 2026-06-20 09:37:40 +09:00
(Y수정)_(20260520)_IoT_기반_모니터링_체계_구축을_위한_보안대책서.hwp chore: import codebase with security hardening 2026-06-20 09:37:40 +09:00
(Y수정)_(20260528)_IoT_기반_모니터링_체계_구축을_위한_보안대책서.hwp chore: import codebase with security hardening 2026-06-20 09:37:40 +09:00
.gitignore chore: 실수로 커밋된 tools/__pycache__ 제거 + __pycache__ gitignore 2026-07-02 18:56:33 +09:00
CHANGELOG.md feat: RPi4 누수+온습도 2-모듈 단일 서버 통합 + 보안 하드닝 2026-06-23 16:21:11 +09:00
PR_BODY.md docs: PR 본문 추가 (PR_BODY.md) 2026-06-24 09:01:56 +09:00
README.md docs: 문서 현행화(leak_ 접두사·경로 스크럽) + 코드 투어 + settings deny 수정 2026-07-02 18:52:15 +09:00
report_leak_detection_system.md feat: RPi4 누수+온습도 2-모듈 단일 서버 통합 + 보안 하드닝 2026-06-23 16:21:11 +09:00
run_tests.sh feat(observability): 수집 거부 출처 IP 로그 + 대시보드 노출 2026-07-09 13:43:12 +09:00
SYSTEM_OVERVIEW.md docs: 문서 현행화(leak_ 접두사·경로 스크럽) + 코드 투어 + settings deny 수정 2026-07-02 18:52:15 +09:00
VERSION chore: import codebase with security hardening 2026-06-20 09:37:40 +09:00

서버실 통합 모니터링 시스템 (누수 + 온습도)

Raspberry Pi 4 센서 모듈 2대 — 1번: 누수 감지 + 카메라, 2번: SHT30 온습도 — 와 선택적 3번째 노드(신규 지점, sensor_id 3)가 동일한 cafe24 PHP 서버로 HTTPS 보고 (raw-body 서명 X-Signature = HMAC-SHA256(API_KEY, 요청본문))를 하고, 서버가 MySQL 저장, 임계/누수 판정, SMS 발송, 통합 대시보드(dashboard.php) 표시를 담당하는 단일 시스템입니다.

모듈 구성

폴더 역할 sensor_id
raspberry_pi4/ 누수 감지(e-con 5C-08) + Pi Camera 촬영·사진 업로드 1 (신규 지점 노드는 3)
raspberry_pi4_sht30/ SHT30 온습도 측정(I2C) 2
php/ cafe24 서버 — API 수신, DB 저장, 판정/SMS, 대시보드 —
sql/ DB 스키마(schema_sht30.sql = 신규 설치 완결) + 마이그레이션 —
firmware/ STM32F407 마이그레이션 트랙(별도) — RPi4 배포와 무관 —

문서