POSA_LEAKSMS/firmware/common/app_config.h
유창욱 90f121e14c chore: import codebase with security hardening
SHT30 온습도 모니터링 시스템 전체 소스(서버 PHP, STM32 펌웨어, SQL, 테스트).
전체 코드리뷰에서 도출된 보안 하드닝 10건 반영:
- 요청 서명 HMAC-SHA256 전환(펌웨어 sig.c/서버 config.php/호스트 패리티 동시)
- 재전송 방어 + 기본 API_KEY fail-closed + 디바이스 문자열 정제(api/sensor_data.php)
- 오프라인 SMS 중복 발송 경합 제거(cron_heartbeat.php, 원자적 선점)
- CSV 수식 주입 방지(monthly_report.php), 감사로그 회전 락(retention_cleanup.php)
- 브루트포스 카운터 원자화(login.php), 예시 TOTP 비밀키 무효화, 마이그레이션 멱등화

_backup/(하드코딩 실 비밀값 포함)·config.local.php·런타임 상태는 .gitignore 제외.
2026-06-20 09:37:40 +09:00

79 lines
4.7 KiB
C

/* =============================================================================
* app_config.h - SHT30 온습도 모니터링 STM32F407 펌웨어 공통 설정 (컴파일 타임)
*
* 이 헤더는 SHT30 온습도 보드의 네트워크/API/주기/핀 설정을 담는다.
* 운영 비밀값(API_KEY 등)은 secrets.h 로 분리한다(저장소 미포함).
* 보드 식별값(device_id 등)은 board_config.h 에서 BOARD_* 매크로로 정의한다.
*
* RPi config.py 대응:
* API_URL/API_KEY -> APP_API_HOST/APP_API_PATH/secrets.h:APP_API_KEY
* REPORT_INTERVAL -> APP_SHT30_REPORT_INTERVAL_SEC
* HTTP_TIMEOUT/RETRY -> APP_HTTP_*_*
* ===========================================================================*/
#ifndef APP_CONFIG_H
#define APP_CONFIG_H
/* ── 펌웨어 버전 (서버로 보고하는 app_version 필드) ───────────────────────── */
#define APP_VERSION "v2606-sht30"
/* ── 서버 API (Cafe24 PHP, HTTPS) ───────────────────────────────────────── */
/* 서버 호스트명. TLS SNI 및 HTTP Host 헤더, 인증서 CN/SAN 검증에 사용된다. */
#ifndef APP_API_HOST
#define APP_API_HOST "your-domain.example"
#endif
#ifndef APP_API_PORT
#define APP_API_PORT 443
#endif
/* sensor_data.php 경로 (서버 디렉터리 구조에 맞게 조정) */
#ifndef APP_API_PATH
#define APP_API_PATH "/raspi_leck_detecter/api/sensor_data.php"
#endif
/* ── 주기/타이밍 (초) ───────────────────────────────────────────────────── */
/* SHT30 측정/보고 주기 (sht30_monitor.py: 기본 300초, 최소 30초) */
#define APP_SHT30_REPORT_INTERVAL_SEC 300u
/* ── HTTP/네트워크 재시도 (config.py HTTP_*_*) ──────────────────────────── */
#define APP_HTTP_TIMEOUT_MS 10000u /* 단일 요청 타임아웃 */
#define APP_HTTP_RETRY_COUNT 3u /* 재시도 횟수 */
#define APP_HTTP_RETRY_DELAY_MS 5000u /* 재시도 간 대기 */
/* ── 시간 동기 (SNTP) — TLS 인증서 유효기간/timestamp 필드에 필수 ────────── */
#define APP_SNTP_SERVER "pool.ntp.org"
#define APP_SNTP_RETRY_DELAY_MS 15000u
/* ── 네트워크 주소 지정 ─────────────────────────────────────────────────── */
/* 1 = DHCP 우선(실패 시 아래 static fallback), 0 = static 고정 */
#define APP_NET_USE_DHCP 1
#define APP_NET_DHCP_TIMEOUT_MS 20000u
/* static fallback (DHCP 실패 또는 APP_NET_USE_DHCP=0 일 때) */
#define APP_NET_STATIC_IP "192.168.0.50"
#define APP_NET_STATIC_NETMASK "255.255.255.0"
#define APP_NET_STATIC_GW "192.168.0.1"
#define APP_NET_STATIC_DNS "8.8.8.8"
/* ── 워치독 (IWDG) ──────────────────────────────────────────────────────── */
#define APP_WATCHDOG_TIMEOUT_MS 20000u /* 이 시간 내 refresh 없으면 리셋 */
/* ── 디버그 로그 UART (USART3: PD8 TX / PD9 RX) ──────────────────────────
* 주의: PA2/PA3 는 LAN8720 RMII(ETH_MDIO 등)와 충돌하므로 로그 UART 로 쓸 수 없다.
* 따라서 ST-Link VCP(PA2/PA3) 대신 USART3 PD8/PD9 를 사용한다. HARDWARE.md 참조. */
#define APP_LOG_UART_BAUD 115200u
/* ── SHT30 보드: I2C 설정 (board_sht30) ─────────────────────────────────── */
#define APP_SHT30_I2C_ADDR 0x44u /* 7-bit 주소 */
/* 센서 plausibility 범위 (벗어나면 metric_status="out_of_range").
* 주의: 운영 경보 임계(고온/저온/고습/저습 → SMS)는 서버(php/config.php 의
* METRIC_* 상수)에서 판정한다. 폐쇄망에서 임계값을 바꿀 때 펌웨어 재플래시가
* 불필요하도록, 펌웨어는 측정 원값만 보고하고 아래 범위는 센서 물리/타당성
* 한계로만 사용한다. */
#define APP_SHT30_TEMP_LOW_C (-40.0)
#define APP_SHT30_TEMP_HIGH_C (125.0)
#define APP_SHT30_RH_LOW (0.0)
#define APP_SHT30_RH_HIGH (100.0)
/* 운영 비밀값/보드 식별 */
#include "secrets.h"
#include "board_config.h"
#endif /* APP_CONFIG_H */