POSA_LEAKSMS/raspberry_pi_zero2w_display/config.py
cw2007 42a6ee4bb0 feat(display): Zero 2 W ST7789 상태 디스플레이 노드
Pi Zero 2 W + ST7789 패널에 노드 상태(누수/온습도/미세먼지·오프라인·정체)를 상시 표시하는
디스플레이 노드 신설. 배포 전 렌더 검증 원칙에 따라 합성 최악 프레임 11종을 패널 실해상도로
render_preview/ 에 PNG 로 선렌더.

- st7789_driver.py · display_dashboard.py · render_preview.py(합성 프레임 생성)
- install.sh · vendor.sh · systemd/display-dashboard.service · 배선(WIRING)·연결테스트
- render_preview/01~11: 요약/통합/메트릭/오프라인/stale/legacy-무PM 최악 케이스
2026-07-19 10:47:00 +09:00

50 lines
3.1 KiB
Python

# =============================================================================
# config.py — 미니 상태 표시기 (Pi Zero 2 W + ST7789V GMT020-02 2.0" 240x320)
# 비밀값(STATUS_URL/STATUS_KEY)은 config_local.py 에서 로드한다(커밋 금지).
# cp config_local.example.py config_local.py 후 실값 입력.
# =============================================================================
# ─────────────────────────────────────────────
# 폴링/화면 주기
# ─────────────────────────────────────────────
POLL_INTERVAL = 30 # 서버 상태 폴링 주기(초) — 대시보드 자동 새로고침과 동일
PAGE_INTERVAL = 8 # 페이지 자동 순환 주기(초): 요약 ↔ 센서별
FETCH_TIMEOUT = 10 # HTTP 타임아웃(초)
STALE_AFTER = 120 # 마지막 성공 수신 후 이 시간(초) 지나면 STALE 표시
# ─────────────────────────────────────────────
# ST7789V SPI 배선 (BCM 번호) — README.md 배선표와 일치
# GMT020-02(7핀): GND / VCC / SCL=SCLK / SDA=MOSI / RES / DC / CS (BLK 없음)
# ─────────────────────────────────────────────
SPI_BUS = 0 # SPI0
SPI_DEVICE = 0 # CE0 (GPIO8)
SPI_SPEED_HZ = 40_000_000
PIN_DC = 25 # Data/Command
PIN_RST = 24 # Reset — 물리 18번(SDA 옆). 7핀을 물리 17~24 블록에 집약
PIN_BL = None # 7핀 모듈은 백라이트 핀 없음(내부 상시 점등). 8핀이면 BCM 번호(예: 18)
WIDTH = 240
HEIGHT = 320
ROTATION = 0 # 0/90/180/270 — 설치 방향에 맞춰 조정
INVERT = True # GMT020-02(IPS) 는 색반전 ON 이 정색
# 하드웨어 없이 개발/검증: True 면 SPI 대신 /tmp/display_preview.png 로 렌더 저장.
# spidev/RPi.GPIO 미설치 환경에서는 자동으로 시뮬레이션 폴백.
FORCE_SIMULATION = False
# 한글 라벨이 필요하면 한글 TTF 경로 지정(기본은 DejaVu — 영문/숫자만).
FONT_PATH = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"
FONT_PATH_LIGHT = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
LOG_FILE = "/var/log/display_dashboard.log"
# ─────────────────────────────────────────────
# 비밀값 로드 (fail closed — config_local.py 없으면 즉시 중단)
# ─────────────────────────────────────────────
try:
from config_local import * # noqa: F401,F403 — STATUS_URL/STATUS_KEY/DEVICE_NAME
except ImportError as e:
raise RuntimeError(
"config_local.py not found. Run `cp config_local.example.py config_local.py`, "
"then fill in STATUS_URL / STATUS_KEY."
) from e