설치 목표

## SHT30 온도와 습도를 5분마다 서버로 보내고 대시보드에 최신값을 표시한다.

두 장비 모두 SHT30 센서를 I2C로 읽어 `sensor_metric`에 온습도 이력을 남기며, 임계 초과 시 서버에서 경보 SMS를 발송한다.

## 1. 준비물

라즈베리파이 1대 온습도 전용 장비. 장비 ID 예시는 `rpi-sht30-01`.
SHT30 P4422-3 센서 I2C 방식 온습도 센서. 기본 주소는 보통 `0x44`.
서버 반영 파일 API, DB migration, dashboard 수정 파일이 서버에 올라가 있어야 한다.
센서 번호는 `SHT30_SENSOR_ID=2`로 고정한다. 기존 1번 SHT30 온습도 센서와 sensor_id로 분리해서 운영한다.

## 2. SHT30 배선

이미지 안의 라벨은 한글 폰트 깨짐을 피하기 위해 영문으로 표기했다.

SHT30 | Raspberry Pi | 설명
--- | --- | ---
VCC | 3.3V | 5V가 아니라 3.3V 사용을 기본으로 한다.
GND | GND | 공통 접지.
SDA | GPIO2 / SDA1 / pin 3 | I2C 데이터 라인.
SCL | GPIO3 / SCL1 / pin 5 | I2C 클럭 라인.

## 3. 서버 DB와 PHP 반영

운영 DB에 온습도 이력 테이블을 추가한다.

수정된 PHP 파일을 서버의 `public_html/raspi_leck_detecter/` 경로에 반영한다.

대시보드 진단 영역에서 `SHT30 metric table` 경고가 사라지는지 확인한다.

    SOURCE sql/migration_sensor_metric.sql;

파일 | 역할
--- | ---
php/api/sensor_data.php | SHT30 온도/습도 필드 수신 및 저장.
php/dashboard.php | 센서 카드에 최신 온도/습도 표시.
sql/migration_sensor_metric.sql | 온습도 이력 테이블 생성.
sql/schema_v2605.sql | 신규 설치용 통합 스키마.

## 4. 라즈베리파이 설정

### I2C 활성화

    sudo raspi-config

`Interface Options`에서 `I2C`를 활성화한 뒤 재부팅한다.

### 패키지 설치

    sudo apt-get update
    sudo apt-get install -y python3-venv python3-smbus i2c-tools
    cd /home/pi/leak_sensor
    python3 -m venv --system-site-packages venv
    source venv/bin/activate
    pip install -r requirements.txt

### SHT30 주소 확인

    i2cdetect -y 1

표에서 `44`가 보이면 기본값 그대로 사용한다. `45`가 보이면 환경설정의 `SHT30_I2C_ADDR`를 `0x45`로 바꾼다.

### 환경설정 생성

    sudo cp sht30-sensor.env.example /etc/sht30-sensor.env
    sudo nano /etc/sht30-sensor.env

    LEAK_API_URL=https://your-domain.example/raspi_leck_detecter/api/sensor_data.php
    LEAK_API_KEY=서버_config와_동일한_API_KEY
    LEAK_DEVICE_ID=rpi-sht30-01
    LEAK_DEVICE_LOCATION=온습도 측정 위치

    SHT30_SENSOR_ID=2
    SHT30_SENSOR_NAME=2번 센서 (SHT30 온습도)
    SHT30_I2C_BUS=1
    SHT30_I2C_ADDR=0x44
    SHT30_REPORT_INTERVAL=300
    SHT30_SIMULATION=false

## 5. 자동 실행 등록

    sudo cp systemd/sht30-sensor.service /etc/systemd/system/
    sudo systemctl daemon-reload
    sudo systemctl enable sht30-sensor
    sudo systemctl start sht30-sensor
    sudo systemctl status sht30-sensor

상태가 `active (running)`이면 부팅 후 자동으로 SHT30 값을 서버에 전송한다.

## 6. 동작 확인

센서 읽기 `python3 sht30_monitor.py --read-once`가 온도/습도 JSON을 출력해야 한다.
서버 전송 `python3 sht30_monitor.py --once` 실행 후 응답에 `metric_saved`가 `true`인지 확인한다.
대시보드 2번 센서 카드에 온도와 습도 칩이 표시되어야 한다.

    source /home/pi/leak_sensor/venv/bin/activate
    python3 sht30_monitor.py --read-once
    python3 sht30_monitor.py --once
    journalctl -u sht30-sensor -f

대시보드에서는 센서2 상태와 최신 온습도 값이 같은 센서 카드 안에 표시된다.

## 7. 문제 대처표

증상 | 판단 | 조치
--- | --- | ---
주소 없음 `i2cdetect -y 1`에 `44` 또는 `45`가 없음 | 배선, I2C 비활성화, 전원 문제 가능성. | SDA/SCL 반대 연결 여부 확인, `raspi-config` I2C 활성화, 3.3V/GND 재확인.
403 API 인증 실패 | 라즈베리파이 `LEAK_API_KEY`와 서버 `API_KEY`가 다름. | `/etc/sht30-sensor.env`와 서버 `config.local.php`의 키를 동일하게 맞춘다.
metric_saved false | 서버는 받았지만 `sensor_metric` 테이블이 없음. | `sql/migration_sensor_metric.sql` 실행 후 다시 `--once` 테스트.
오프라인 대시보드에서 센서2 오프라인 | 서비스 중단 또는 네트워크/API 장애. | `systemctl status sht30-sensor`, `journalctl -u sht30-sensor -n 80` 확인.
CRC 오류 측정 실패 반복 | I2C 신호 불안정 또는 케이블 문제. | 케이블 길이를 줄이고 접지를 재확인한다. 필요하면 센서 주소와 보드를 교차 점검한다.