설치 목표
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 신호 불안정 또는 케이블 문제. | 케이블 길이를 줄이고 접지를 재확인한다. 필요하면 센서 주소와 보드를 교차 점검한다. |