같은 cafe24 DB의 다른 시스템 테이블과 혼동/충돌을 막기 위해 5개 테이블을 leak_ 네임스페이스로 격리: sensor_log→leak_sensor_log, sensor_status→leak_sensor_status, sensor_metric→leak_sensor_metric, sms_log→leak_sms_log, ingest_nonce→leak_ingest_nonce (leak_incident/leak_photo는 이미 접두사). 컬럼명은 불변(sensor_id, is_leak 등) — 테이블명만 변경. sql/migration_add_leak.sql, migration_drop_leak.sql 삭제: 리네임 후 구버전 무접두 테이블 대상이라 실행 즉시 에러. 신규 설치는 schema_sht30.sql 하나로 완결. BREAKING CHANGE: 기존 무접두 테이블 배포와 호환 안 됨(신규 설치 전용). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01821XP36Q6t9eWKTPSEumnC
82 lines
4.9 KiB
Python
82 lines
4.9 KiB
Python
# =============================================================================
|
|
# config.py - 온습도(SHT30) 모니터링 모듈 (Pi 4 Model B) 설정 — 비밀이 아닌 기본값
|
|
#
|
|
# 서버 URL / API_KEY / 기기 식별자(DEVICE_ID/LOCATION) 등 운영·비밀값은
|
|
# config_local.py 에서 로드한다. config_local.py 는 .gitignore 로 커밋 제외.
|
|
# 설정 방법: cp config_local.example.py config_local.py → 실제 값으로 채움
|
|
#
|
|
# 이 모듈은 "2번 모듈"(온습도)이다. 서버(php/) 대시보드는 sensor_id=2 를 기본
|
|
# 온습도 센서로 표시하므로 SENSOR_ID 기본값은 2 로 둔다.
|
|
# =============================================================================
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 센서 식별 (서버 대시보드 표시용; 비밀 아님)
|
|
# SENSOR_ID 는 서버 leak_sensor_metric / leak_sensor_status 의 키. 대시보드 기본 차트=2.
|
|
# ─────────────────────────────────────────────
|
|
SENSOR_ID = 2
|
|
SENSOR_NAME = "2번 센서 (SHT30)"
|
|
|
|
# ─────────────────────────────────────────────
|
|
# I2C 버스 설정 (Pi 4 40핀 헤더)
|
|
# SDA = GPIO2 (물리 3번), SCL = GPIO3 (물리 5번) → I2C 버스 1
|
|
# ADDR 핀: GND=0x44, VDD=0x45
|
|
# ─────────────────────────────────────────────
|
|
I2C_BUS = 1
|
|
I2C_ADDR = 0x44
|
|
|
|
# 강제 시뮬레이션. True 면 하드웨어 없이 더미 측정값으로 동작(서버 연동 점검용).
|
|
# False 라도 smbus2 미설치/ I2C 미활성이면 드라이버가 자동 시뮬레이션으로 폴백.
|
|
FORCE_SIMULATION = False
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 측정/보고 주기 (firmware app_config.h 와 동일 기본값)
|
|
# ─────────────────────────────────────────────
|
|
REPORT_INTERVAL = 300 # 정상 측정·보고 간격 (초) = 5분
|
|
MEASURE_RETRY_DELAY = 5 # 측정 실패 후 재시도 대기 (초)
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 온습도 물리 plausibility 범위 (firmware classify_metric_status 와 동일)
|
|
# 이 범위를 벗어나면 metric_status="out_of_range" 로 보고한다.
|
|
# ※ 운영 임계(고온/저온/고습/저습) 판정·SMS 는 모두 서버(config.php METRIC_*)가
|
|
# 수행한다. 이 모듈은 측정값만 충실히 보고한다.
|
|
# ─────────────────────────────────────────────
|
|
TEMP_LOW_C = -40.0
|
|
TEMP_HIGH_C = 125.0
|
|
RH_LOW = 0.0
|
|
RH_HIGH = 100.0
|
|
|
|
# 모듈 식별 버전 (서버 app_version 필드; 서버는 검증하지 않고 기록만 함)
|
|
APP_VERSION = "v2606-sht30-rpi4"
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 로그 설정
|
|
# ─────────────────────────────────────────────
|
|
LOG_FILE = "/var/log/sht30_sensor.log"
|
|
LOG_MAX_BYTES = 5 * 1024 * 1024 # 5MB
|
|
LOG_BACKUP_COUNT = 3
|
|
|
|
# ─────────────────────────────────────────────
|
|
# HTTP 재시도 설정 (firmware APP_HTTP_* 와 동일 기본값)
|
|
# ─────────────────────────────────────────────
|
|
HTTP_TIMEOUT = 10 # 단일 요청 타임아웃 (초)
|
|
HTTP_RETRY_COUNT = 3 # 재시도 횟수
|
|
HTTP_RETRY_DELAY = 5 # 재시도 간 대기 (초)
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 운영·비밀값 로드 (fail closed)
|
|
# config_local.py 가 없으면 placeholder/하드코딩 비밀로 잘못 기동하는 대신
|
|
# 명확한 오류로 즉시 중단한다.
|
|
# ─────────────────────────────────────────────
|
|
try:
|
|
from config_local import ( # noqa: F401 (sht30_sensor.py 가 config 에서 재수입)
|
|
API_URL,
|
|
API_KEY,
|
|
DEVICE_ID,
|
|
DEVICE_LOCATION,
|
|
)
|
|
except ImportError as e:
|
|
raise RuntimeError(
|
|
"config_local.py 를 찾을 수 없습니다. "
|
|
"`cp config_local.example.py config_local.py` 후 실제 서버 URL / API_KEY / "
|
|
"기기 정보를 채우세요. (비밀값은 절대 커밋하지 마세요.)"
|
|
) from e
|