docs(sht30): 온습도 2번 모듈 문서를 STM32 기본 → Raspberry Pi 기본으로 정합
실제 배포는 Raspberry Pi 4(raspberry_pi4_sht30)인데 다수 문서가 STM32를 "현재 단일보드"로 서술하던 드리프트를 교정(README/SYSTEM_OVERVIEW/ DEPLOYMENT_PLAN은 이미 Pi 기준). - SHT30_SENSOR2_SETUP.md: Pi 기본 전면 재작성, STM32는 마이그레이션 대안 - README.md / wiring_diagram.md / INSTALL_PI_SERVER.md: Pi 기본으로 재구성 - ops_checks.php / security_evidence.php: /etc/sht30-sensor.env → config_local.py - api/sensor_data.php: 헤더 예시 device_id rpi4-sht30-01 - examples/*.html: device_id 교정 + 구식 env 예제 폐기 배너 - 전압 경고 정정: "5V=소자 손상"은 틀림(모듈 2.4~5.5V). Pi에서 3.3V 쓰는 이유는 Pi GPIO 3.3V 전용(5V 시 SDA/SCL 5V → Pi 손상)
This commit is contained in:
parent
9f0e048e49
commit
3c8e6d6957
9 changed files with 96 additions and 74 deletions
|
|
@ -255,4 +255,4 @@ https://your-domain.example/raspi_leck_detecter/security_evidence.php
|
|||
- SMS 수신자 번호
|
||||
- 관리자 계정과 원문 비밀번호, `ADMIN_TOTP_SECRET`
|
||||
- 서버 업로드 경로
|
||||
- 장비 ID(`stm32-sht30-01`)와 설치 위치
|
||||
- 장비 ID(`rpi4-sht30-01`, 배포=Raspberry Pi 4)와 설치 위치
|
||||
|
|
|
|||
|
|
@ -1,32 +1,32 @@
|
|||
# 서버실 온습도(SHT30) 모니터링 시스템 v2606
|
||||
|
||||
Sensirion SHT30 온습도 센서, STM32F407VGT6(FreeRTOS) 펌웨어, Cafe24 PHP/MySQL, Cafe24 SMS를 이용한 서버실 온습도 24시간 모니터링 및 임계 초과 SMS 알림 시스템입니다. 측정값은 5분 주기로 서버에 전송되어 웹 대시보드에 표시되고, 고온/저온/고습/저습 임계를 초과하면 SMS로 통보합니다. 펌웨어는 유선 Ethernet(LAN8720 RMII) + 온칩 TLS(mbedTLS HTTPS)로 서버에 보고합니다.
|
||||
Sensirion SHT30 온습도 센서를 **Raspberry Pi 4 Model B(Python)**로 I2C 측정하여 Cafe24 PHP/MySQL 서버에 5분 주기로 보고하고, 웹 대시보드 표시와 고온/저온/고습/저습 임계 초과 SMS 알림을 제공하는 시스템입니다. Pi 는 유선 Ethernet(또는 WiFi) + HTTPS(raw-body HMAC 서명)로 보고합니다. (STM32F407VGT6 베어메탈 펌웨어는 별도의 마이그레이션 트랙 `firmware/` — 하드웨어 미검증, 현재 배포와 무관.)
|
||||
|
||||
## 구성
|
||||
|
||||
```text
|
||||
[SHT30] --I2C--> [STM32F407VGT6 (sht30_fw)] --유선 Ethernet/TLS--> [Cafe24 PHP API]
|
||||
[SHT30] --I2C--> [Raspberry Pi 4 (raspberry_pi4_sht30, Python)] --Ethernet/TLS--> [Cafe24 PHP API]
|
||||
|
|
||||
[MySQL DB]
|
||||
|
|
||||
[Cafe24 SMS / Dashboard]
|
||||
```
|
||||
|
||||
- 단일 보드 `sht30_fw` (`sensor_id=2`, `device_id=stm32-sht30-01`).
|
||||
- SHT30 → STM32 I2C1(PB6 SCL / PB7 SDA, 주소 0x44, 3.3V/GND, 4.7kΩ 풀업). 상세 배선은 [wiring_diagram.md](./wiring_diagram.md) 및 [firmware/docs/HARDWARE.md](../firmware/docs/HARDWARE.md) §3 참조.
|
||||
- 측정 주기: 5분(펌웨어 `APP_SHT30_REPORT_INTERVAL_SEC=300`). 최초 1회 startup, 이후 periodic.
|
||||
- 인증: 펌웨어가 `X-Signature = lowercase_hex(HMAC-SHA256(키=API_KEY, 메시지=요청본문 바이트))`(raw-body) 헤더로 서명하고 서버가 검증합니다. 관리자 로그인은 비밀번호 해시 + TOTP MFA + 감사로그로 보호합니다.
|
||||
- Raspberry Pi 4 노드 `raspberry_pi4_sht30`(= `deploy/03_pi_b_sht30_id2`) — `sensor_id=2`, `device_id=rpi4-sht30-01`.
|
||||
- SHT30 → Pi I2C 버스 1(GPIO2 SDA / GPIO3 SCL, 주소 0x44, VCC=3.3V/GND, 4.7kΩ 풀업). 상세 배선은 [SHT30_SENSOR2_SETUP.md](./SHT30_SENSOR2_SETUP.md) 및 `deploy/03_pi_b_sht30_id2/WIRING.html` 참조. (STM32 대안 배선 PB6/PB7 은 [wiring_diagram.md](./wiring_diagram.md).)
|
||||
- 측정 주기: 5분(`raspberry_pi4_sht30/config.py REPORT_INTERVAL=300`). 최초 1회 startup, 이후 periodic.
|
||||
- 인증: Pi 가 `X-Signature = lowercase_hex(HMAC-SHA256(키=API_KEY, 메시지=요청본문 바이트))`(raw-body) 헤더로 서명하고 서버가 검증합니다. 관리자 로그인은 비밀번호 해시 + TOTP MFA + 감사로그로 보호합니다.
|
||||
|
||||
## 폴더 구조
|
||||
|
||||
```text
|
||||
docs/
|
||||
README.md # 설치/운영 허브 문서
|
||||
INSTALL_PI_SERVER.md # STM32 펌웨어 및 Cafe24 서버 설치 설명서
|
||||
INSTALL_PI_SERVER.md # Cafe24 서버 설치 설명서 (Pi/STM32 공통)
|
||||
OPERATIONS_SECURITY_CHECKLIST.md # 월간 운영·보안 점검표
|
||||
SECURITY_EVIDENCE_PACKAGE.md # 보안대책서 첨부자료 패키지
|
||||
wiring_diagram.md # SHT30 I2C 배선도
|
||||
SHT30_SENSOR2_SETUP.md # SHT30 설치 가이드(STM32 기본 / RPi 대안)
|
||||
SHT30_SENSOR2_SETUP.md # SHT30 설치 가이드(Raspberry Pi 4 기본 / STM32 마이그레이션 대안)
|
||||
solutions/ # 실행-검토 사이클에서 얻은 교훈/반복 방지 기록
|
||||
firmware/ # STM32F407VGT6 베어메탈 펌웨어 (sht30_fw)
|
||||
common/ # 이식 코어(sha256/sig/jsonbody/sht30_convert/httpapi/net 등)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
# SHT30 온습도 센서 설치 가이드
|
||||
# SHT30 온습도 센서 설치 가이드 (2번 모듈, sensor_id=2)
|
||||
|
||||
서버실 온습도 모니터링을 위해 Sensirion SHT30(한진데이터 P4422-3, I2C) 센서를 설치하고 서버에 연동하는 가이드입니다. 기본 구성은 STM32F407VGT6 펌웨어(`sht30_fw`, `sensor_id=2`, `device_id=stm32-sht30-01`)이며, 폐쇄망의 다른 환경을 위한 Raspberry Pi I2C 대안도 함께 설명합니다.
|
||||
서버실 온습도 모니터링을 위해 Sensirion SHT30(한진데이터 P4422-3, I2C) 센서를 설치하고 서버에 연동하는 가이드입니다. **현재 배포 구성은 Raspberry Pi 4 Model B + Python**(`raspberry_pi4_sht30/` = `deploy/03_pi_b_sht30_id2/`, `device_id=rpi4-sht30-01`)입니다. STM32F407 펌웨어(`firmware/`)는 **별도의 마이그레이션 트랙**(하드웨어 미검증)으로, 실제 필드 배포와 무관합니다 — §3 참고.
|
||||
|
||||
> 기준 문서: 루트 [`README.md`](../README.md), [`SYSTEM_OVERVIEW.md`](../SYSTEM_OVERVIEW.md), [`docs/DEPLOYMENT_PLAN_RPI4x3.md`](./DEPLOYMENT_PLAN_RPI4x3.md) §5.
|
||||
> 현장 인쇄용 배선·핀맵 도해: `deploy/03_pi_b_sht30_id2/WIRING.html` (브라우저로 열람 — 자체 완결형, 오프라인 가능).
|
||||
|
||||
## 1. 서버 준비
|
||||
|
||||
|
|
@ -22,85 +25,93 @@
|
|||
|
||||
API는 `sht30` 측정을 수신하면 `leak_sensor_status`를 갱신하고 측정값을 `leak_sensor_metric`에 저장합니다. 서버가 `METRIC_*` 임계로 고온/저온/고습/저습을 판정하고, 초과 시 종류별 30분 쿨다운으로 SMS를 발송합니다.
|
||||
|
||||
## 2. 기본 구성 — STM32F407VGT6 (`sht30_fw`)
|
||||
> 서버는 수집 시 `device_id`/`app_version`/`metric_type` 문자열을 **검증하지 않습니다**(HMAC 서명 + 필수필드 + `sensor_id` 범위 1..255 + 타임스탬프 신선도만 확인). 따라서 라즈베리파이 클라이언트(`rpi4-sht30-01`, `app_version=v2606-sht30-rpi4`)가 그대로 수용됩니다.
|
||||
|
||||
### 2.1 I2C 배선
|
||||
## 2. 기본 구성 — Raspberry Pi 4 (I2C)
|
||||
|
||||
SHT30을 STM32 I2C1 버스에 연결합니다(상세는 [wiring_diagram.md](./wiring_diagram.md), [firmware/docs/HARDWARE.md](../firmware/docs/HARDWARE.md) §3).
|
||||
소스: `deploy/03_pi_b_sht30_id2/`(= `raspberry_pi4_sht30/`). 근거는 해당 README.md, SETUP.md, WIRING.html, config.py, install.sh, systemd/sht30-sensor.service.
|
||||
|
||||
### 2.1 I2C 배선 (Pi 4 40핀 헤더, 버스 1)
|
||||
|
||||
상세 도해는 `deploy/03_pi_b_sht30_id2/WIRING.html`(SVG 핀맵 + 스키매틱 + 체크리스트)을 브라우저로 여십시오.
|
||||
|
||||
```text
|
||||
SHT30 VDD -> STM32 3.3V
|
||||
SHT30 GND -> STM32 GND
|
||||
SHT30 SCL -> STM32 PB6 (I2C1_SCL, AF4) + 4.7kΩ 풀업 -> 3.3V
|
||||
SHT30 SDA -> STM32 PB7 (I2C1_SDA, AF4) + 4.7kΩ 풀업 -> 3.3V
|
||||
SHT30 VCC -> Raspberry Pi 3.3V (물리 핀 1) ★ Pi 에서는 5V(핀 2·4) 금지 (모듈은 2.4~5.5V OK나, 5V 전원 시 SDA/SCL 5V → 3.3V 전용 Pi GPIO 손상)
|
||||
SHT30 GND -> Raspberry Pi GND (핀 6; 대체 9·14·20·25·30·34·39)
|
||||
SHT30 SDA -> Raspberry Pi GPIO2 / SDA1 (물리 핀 3) + 4.7kΩ 풀업 -> 3.3V
|
||||
SHT30 SCL -> Raspberry Pi GPIO3 / SCL1 (물리 핀 5) + 4.7kΩ 풀업 -> 3.3V
|
||||
SHT30 ADDR -> GND (주소 0x44; VDD면 0x45)
|
||||
```
|
||||
|
||||
- 7-bit 주소 `0x44`(`APP_SHT30_I2C_ADDR`), I2C 100kHz 권장.
|
||||
- 명령 `0x2C06`(high-repeatability) → 약 20ms 대기 → 6바이트 read.
|
||||
- 7-bit 주소 `0x44`(ADDR→GND). `config.py`의 `I2C_ADDR`와 반드시 일치.
|
||||
- I2C 풀업 4.7kΩ ×2 — **SHT30 모듈에 온보드 풀업이 있으면 생략**.
|
||||
- 명령 `0x2C06`(high-repeatability) → 약 20ms 대기 → 6바이트 read (드라이버 `sht30_driver.py`).
|
||||
|
||||
### 2.2 펌웨어 설정·빌드 (폐쇄망)
|
||||
### 2.2 설정값 준비 (`config_local.py`)
|
||||
|
||||
```bash
|
||||
cp firmware/common/secrets.h.example firmware/common/secrets.h
|
||||
# secrets.h 의 APP_API_KEY 를 서버 config.local.php 의 API_KEY 와 동일하게 채운다.
|
||||
cd /home/pi/raspberry_pi4_sht30
|
||||
cp config_local.example.py config_local.py
|
||||
# config_local.py 를 열어 채운다:
|
||||
# API_URL = https://<서버>/raspi_leck_detecter/api/sensor_data.php (1번 모듈과 동일 엔드포인트)
|
||||
# API_KEY = 서버 config.local.php 의 API_KEY 와 바이트 단위로 동일
|
||||
# DEVICE_ID = rpi4-sht30-01
|
||||
# DEVICE_LOCATION = 온습도 측정 위치(예: 서버실)
|
||||
```
|
||||
|
||||
| 위치 | 설정 |
|
||||
|---|---|
|
||||
| `firmware/common/secrets.h` | `APP_API_KEY` = 서버 `API_KEY` |
|
||||
| `firmware/common/app_config.h` | `APP_API_HOST`, `APP_API_PATH`(`/raspi_leck_detecter/api/sensor_data.php`), 네트워크 |
|
||||
| `firmware/common/app_config.h` | `APP_SHT30_REPORT_INTERVAL_SEC`(기본 300초), `APP_SHT30_I2C_ADDR`(0x44) |
|
||||
| `firmware/certs/server_ca.c` | 자리표시자 CA → 실제 Cafe24 루트 CA |
|
||||
`config_local.py`가 없으면 실행 시 **명확한 오류로 즉시 중단**(fail closed)됩니다. `config_local.py`·`API_KEY`는 **절대 커밋하지 마세요**(`.gitignore` 처리됨). `sensor_id`(=2)/`sensor_name`은 `config.py` 기본값을 씁니다.
|
||||
|
||||
벤더링·빌드·플래시 절차는 [firmware/docs/BUILD_OFFLINE.md](../firmware/docs/BUILD_OFFLINE.md)를 따릅니다. `sht30_fw` 타깃을 빌드해 보드에 플래시합니다.
|
||||
> ⚠️ 설정은 **Python `config_local.py`** 로만 합니다. 과거 문서에 있던 `/etc/sht30-sensor.env` 환경파일 방식은 이 라즈베리파이 모듈에서 **사용하지 않습니다**.
|
||||
|
||||
### 2.3 동작 확인
|
||||
### 2.3 설치 (폐쇄망 오프라인 + 온라인 폴백)
|
||||
|
||||
USART3(PD8/PD9, 115200) 콘솔 로그에서 확인합니다.
|
||||
|
||||
- I2C1 초기화 및 SHT30 0x44 응답, 첫 측정값
|
||||
- 네트워크/SNTP/TLS 핸드셰이크 → 서버 200 응답 → `startup` 보고
|
||||
- 이후 5분 주기 `periodic` 측정 보고
|
||||
|
||||
## 3. 대안 구성 — Raspberry Pi I2C (STM32 외 대안)
|
||||
|
||||
STM32 보드를 쓸 수 없는 환경에서는 Raspberry Pi 40핀 헤더 I2C 버스 1을 사용할 수 있습니다.
|
||||
|
||||
```text
|
||||
SHT30 VCC -> Raspberry Pi 3.3V (pin 1)
|
||||
SHT30 GND -> Raspberry Pi GND
|
||||
SHT30 SDA -> Raspberry Pi GPIO2 / SDA1 / pin 3
|
||||
SHT30 SCL -> Raspberry Pi GPIO3 / SCL1 / pin 5
|
||||
SHT30 ADDR -> GND (주소 0x44; 점퍼 변경 시 0x45)
|
||||
```
|
||||
|
||||
I2C를 먼저 활성화합니다.
|
||||
원샷:
|
||||
|
||||
```bash
|
||||
sudo raspi-config # Interface Options -> I2C -> enable
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y python3-venv python3-smbus i2c-tools
|
||||
cd /home/pi/raspberry_pi4_sht30 && bash setup.sh # 설치→서비스 등록→검증→하드닝 (sudo 붙이지 말 것)
|
||||
```
|
||||
|
||||
센서가 보이는지 확인합니다.
|
||||
또는 단계별:
|
||||
|
||||
```bash
|
||||
i2cdetect -y 1 # 44 또는 45 가 보여야 함
|
||||
chmod +x install.sh && ./install.sh # apt(i2c-tools 등) + I2C 자동 활성화 + venv(requests/smbus2) + 로그
|
||||
sudo reboot # I2C 를 새로 켠 경우 1회 (usermod -aG i2c 반영에도 필요)
|
||||
```
|
||||
|
||||
환경 파일 `/etc/sht30-sensor.env`를 생성하고 다음 값을 채웁니다.
|
||||
- 폐쇄망: 인터넷 되는 **동일 aarch64** 머신에서 `./vendor.sh`로 `wheelhouse/`+`debs/` 번들 → 타깃 Pi로 복사 후 `./install.sh`(자동 오프라인).
|
||||
|
||||
```text
|
||||
API_URL=https://your-domain.example/raspi_leck_detecter/api/sensor_data.php
|
||||
API_KEY=서버와 동일한 API_KEY
|
||||
DEVICE_ID=rpi-sht30-01
|
||||
DEVICE_LOCATION=온습도 측정 위치
|
||||
SHT30_SENSOR_ID=2
|
||||
SHT30_I2C_ADDR=0x44
|
||||
### 2.4 systemd 자동 실행
|
||||
|
||||
```bash
|
||||
sudo cp systemd/sht30-sensor.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now sht30-sensor
|
||||
sudo systemctl status sht30-sensor
|
||||
journalctl -u sht30-sensor -f
|
||||
```
|
||||
|
||||
> 대안 구성에서도 `sensor_id=2`, raw-body 서명(`X-Signature = lowercase_hex(HMAC-SHA256(키=API_KEY, 메시지=요청본문 바이트))`), 5분 측정 주기는 동일합니다. 임계 판정과 SMS는 모두 서버에서 수행하므로 측정 송신부만 환경에 맞게 구성하면 됩니다.
|
||||
유닛 특성: `User=pi`, **`SupplementaryGroups=i2c`**(`/dev/i2c-1` 접근), `Restart=always`. `install.sh`는 유닛을 자동 설치하지 않으므로 이 단계 누락 금지.
|
||||
|
||||
### 2.5 동작 확인
|
||||
|
||||
```bash
|
||||
i2cdetect -y 1 # 0x44(또는 0x45)가 보여야 함
|
||||
source venv/bin/activate
|
||||
python3 test_sensor.py # CRC/포맷 자가점검 + 측정 1회
|
||||
python3 test_connection.py # 서명 POST 200(연결/서명), 403=API_KEY 불일치, 400=NTP/타임스탬프
|
||||
```
|
||||
|
||||
> ⚠️ `test_sensor.py`는 하드웨어 없이도 **시뮬레이션으로 통과**합니다. 반드시 `i2cdetect`로 0x44를 먼저 확인하고, 서비스 로그에 시뮬레이션 WARN이 없는지 점검하세요(시뮬레이션 폴백이 배선 오류를 가릴 수 있음).
|
||||
|
||||
- Pi 시각은 **NTP 동기** 필수(서버 timestamp 신선도 ±600초 — Raspberry Pi OS 기본 활성).
|
||||
- 이후 5분 주기 `periodic` 측정 보고.
|
||||
|
||||
## 3. 대안(계획) 구성 — STM32F407VGT6 (`sht30_fw`)
|
||||
|
||||
STM32F407 베어메탈 펌웨어(`firmware/`)는 RPi → STM32 전환을 목표로 한 **별도 마이그레이션 트랙**입니다. `docs/stm32f407_migration_plan.md` 기준 **코드는 완성되었으나 실제 보드 빌드·플래시·HIL 시험은 미검증**(서버 host/CA/API키/SNTP가 모두 placeholder)이며, 현재 필드에는 배포되어 있지 않습니다. 이 경로를 실제로 채택하려면 `firmware/docs/HARDWARE.md`·`firmware/docs/BUILD_OFFLINE.md`를 따라 하드웨어를 확정·검증해야 합니다.
|
||||
|
||||
- I2C1 배선(참고): SHT30 SCL → STM32 **PB6**(I2C1_SCL, AF4), SDA → **PB7**(I2C1_SDA, AF4), 각 4.7kΩ 풀업 → 3.3V, ADDR → GND(0x44). VCC는 **3.3V**(5V 금지).
|
||||
- 보고 식별자: `device_id=stm32-sht30-01`, `app_version=v2606-sht30`, `sensor_id=2`. 서버는 이 문자열을 검증하지 않으므로 Pi/STM32 어느 쪽이든 유효 서명이면 동일하게 수용합니다.
|
||||
|
||||
## 4. 대시보드 결과
|
||||
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@
|
|||
</article>
|
||||
<article class="sensor">
|
||||
<h3>2번 센서 (SHT30 온습도)</h3>
|
||||
<small>서버실 상단 랙 / rpi-sht30-01</small><br>
|
||||
<small>서버실 상단 랙 / rpi4-sht30-01</small><br>
|
||||
<span class="badge">정상</span>
|
||||
<div class="metric"><span>온도 24.3C</span><span>습도 48.1%</span></div>
|
||||
<div class="last">측정: 2026-05-21 09:29:18</div>
|
||||
|
|
|
|||
|
|
@ -336,12 +336,18 @@
|
|||
<a href="#trouble">문제 대처</a>
|
||||
</nav>
|
||||
|
||||
<div style="margin:16px 0;padding:14px 16px;border:2px solid #e03131;border-radius:10px;background:#fff5f5;color:#7a1f1f;">
|
||||
⚠️ <strong>구버전 예제 안내.</strong> 이 문서는 <code>/etc/sht30-sensor.env</code> 환경파일 방식으로 작성된 <em>구식</em> 예제입니다.
|
||||
실제 배포 구성은 라즈베리파이 <code>config_local.py</code>(Python) 방식이며 장비 ID는 <code>rpi4-sht30-01</code>입니다.
|
||||
최신 정확한 절차는 <a href="../SHT30_SENSOR2_SETUP.md">SHT30_SENSOR2_SETUP.md</a> 및 <code>deploy/03_pi_b_sht30_id2/</code>를 따르세요.
|
||||
</div>
|
||||
|
||||
<section id="prepare">
|
||||
<h2>1. 준비물</h2>
|
||||
<div class="grid">
|
||||
<div class="tile">
|
||||
<strong>라즈베리파이 1대</strong>
|
||||
<span>온습도 전용 장비. 장비 ID 예시는 `rpi-sht30-01`.</span>
|
||||
<span>온습도 전용 장비. 장비 ID 예시는 `rpi4-sht30-01`.</span>
|
||||
</div>
|
||||
<div class="tile">
|
||||
<strong>SHT30 P4422-3 센서</strong>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,13 @@
|
|||
# SHT30 온습도 센서 ↔ STM32F407VGT6 I2C 배선도
|
||||
# SHT30 온습도 센서 I2C 배선도 (Raspberry Pi 4 기본 / STM32 변형)
|
||||
|
||||
Sensirion SHT30(한진데이터 P4422-3 모듈)을 STM32F407VGT6의 I2C1 버스에 연결합니다. 단일 보드 `sht30_fw`(`sensor_id=2`, `device_id=stm32-sht30-01`)가 5분 주기로 온습도를 측정해 유선 Ethernet/TLS로 서버에 보고합니다.
|
||||
Sensirion SHT30(한진데이터 P4422-3 모듈) I2C 배선 요약입니다.
|
||||
|
||||
상세 핀맵·전원·클럭원은 [firmware/docs/HARDWARE.md](../firmware/docs/HARDWARE.md) §3을 따릅니다. 본 문서는 SHT30 I2C 결선 요약입니다.
|
||||
> **현재 배포 = Raspberry Pi 4 Model B.** Pi 에서는 SHT30 을 40핀 헤더 I2C 버스 1에 연결합니다:
|
||||
> **VCC→3.3V(핀 1), GND→핀 6, SDA→GPIO2/핀 3, SCL→GPIO3/핀 5, ADDR→GND(0x44)**, SDA/SCL 4.7kΩ 풀업→3.3V(모듈 내장 시 생략).
|
||||
> 상세 도해는 `deploy/03_pi_b_sht30_id2/WIRING.html`(SVG 핀맵) 및 [SHT30_SENSOR2_SETUP.md](./SHT30_SENSOR2_SETUP.md) §2.1 을 보세요.
|
||||
> `sensor_id=2`, `device_id=rpi4-sht30-01`, `raspberry_pi4_sht30/config.py REPORT_INTERVAL=300`(5분).
|
||||
>
|
||||
> **아래 §는 STM32F407VGT6 변형**(마이그레이션 트랙 `firmware/`, 하드웨어 미검증·현재 배포와 무관)의 I2C1(PB6/PB7) 배선입니다. 상세 핀맵·전원·클럭원은 [firmware/docs/HARDWARE.md](../firmware/docs/HARDWARE.md) §3.
|
||||
|
||||
## 센서 동작 개요
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
//
|
||||
// [요청 형식 — 온습도(SHT30, 2번 모듈)] POST application/json
|
||||
// {
|
||||
// "device_id": "stm32-sht30-01",
|
||||
// "device_id": "rpi4-sht30-01", // 배포=Raspberry Pi 4 (STM32 펌웨어면 "stm32-sht30-01")
|
||||
// "device_location": "서버실",
|
||||
// "sensor_id": 2,
|
||||
// "sensor_name": "2번 센서 (SHT30)",
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
// "temperature_c": 24.50,
|
||||
// "humidity_percent": 48.30,
|
||||
// "metric_status": "normal", // 펌웨어 plausibility 판정(참고용; 서버가 재판정)
|
||||
// "app_version": "v2606-sht30"
|
||||
// "app_version": "v2606-sht30-rpi4" // Pi 배포 (STM32 펌웨어면 "v2606-sht30"); 서버는 검증 안 함
|
||||
// }
|
||||
//
|
||||
// [요청 형식 — 누수(1번 모듈)] POST application/json
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ function collect_ops_checks(): array {
|
|||
}
|
||||
|
||||
$default_recipients = count(SMS_RECIPIENTS) === 1 && preg_replace('/\D+/', '', SMS_RECIPIENTS[0]) === '01000000000';
|
||||
$checks[] = ops_check('설정', 'API 키', API_KEY !== 'change-this-api-key', 'API_KEY 운영값 설정 여부', 'config.local.php와 /etc/sht30-sensor.env(또는 펌웨어 secrets.h)의 API 키를 동일하게 설정', 'critical', 'config.local.php 원문 미공개 설정 확인');
|
||||
$checks[] = ops_check('설정', 'API 키', API_KEY !== 'change-this-api-key', 'API_KEY 운영값 설정 여부', 'config.local.php와 라즈베리파이 config_local.py(또는 STM32 펌웨어 secrets.h)의 API 키를 동일하게 설정', 'critical', 'config.local.php 원문 미공개 설정 확인');
|
||||
$checks[] = ops_check('설정', '관리자 비밀번호', ADMIN_PASSWORD_HASH !== '', 'ADMIN_PASSWORD_HASH 설정 여부', 'php setup_hash.php "new-password" 실행 후 config.local.php에 반영', 'critical', '관리자 해시 설정 확인');
|
||||
$checks[] = ops_check('관리자 인증', '관리자 MFA', admin_mfa_configured(), 'ADMIN_TOTP_SECRET 설정 여부', '인증 앱용 Base32 비밀키를 config.local.php에 설정', 'critical', 'MFA 등록 확인표');
|
||||
$checks[] = ops_check('관리자 인증', 'MFA 설정 토큰 정리', MFA_SETUP_TOKEN === '', MFA_SETUP_TOKEN === '' ? '정리됨(비어 있음)' : '설정됨 — 등록 후 제거 필요', 'MFA 등록을 마쳤으면 config.local.php의 MFA_SETUP_TOKEN을 빈 값으로 비우세요. 남아 있으면 토큰 보유자가 setup_mfa.php로 새 TOTP 비밀키를 발급·검증할 수 있습니다.', 'warn', 'config.local.php MFA_SETUP_TOKEN 미설정 확인');
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ $control_rows = [
|
|||
['사업 범위', '서버실 온습도(SHT30) 모니터링 및 임계치 초과 SMS 경보, 장비 오프라인 알림', '보안대책서 사업개요', 'SECURITY_PLAN_PASS_READINESS.md'],
|
||||
['전송구간', 'HTTPS/TLS 사용, API 서명 검증', 'api/sensor_data.php, config.php', 'SOURCE_SECURITY_EVIDENCE.md'],
|
||||
['API 인증', '공유 API 키 기반 요청 서명 검증', 'config.php', '403 테스트 결과'],
|
||||
['비밀값', 'config.local.php와 /etc/sht30-sensor.env로 분리', 'config.php', '설정 파일 권한 화면'],
|
||||
['비밀값', 'config.local.php(서버)와 config_local.py(라즈베리파이)로 분리', 'config.php', '설정 파일 권한 화면'],
|
||||
['관리자 인증', '비밀번호 해시, CSRF, 세션 보호, 실패 제한, 관리자 MFA', 'login.php, admin_security.php', '로그인 화면, MFA 등록 확인표'],
|
||||
['감사로그', '로그인 성공/실패, 로그아웃, 관리자 활동 접속기록 저장', 'admin_security.php, php/var/admin_audit.log', '감사로그 파일'],
|
||||
['로그관리', '센서 측정 이력(leak_sensor_metric)·SMS 발송 이력(leak_sms_log)·관리자 감사로그 저장 및 보관기간 정리', 'MySQL, retention_cleanup.php', '보관기간 정리 dry-run 결과'],
|
||||
|
|
|
|||
Loading…
Reference in a new issue