7. 데이터·인터페이스 요구사항
노드는 짧은 고정 필드 패킷을 LoRa로 보내고, 게이트웨이가 이를 JSON으로 바꿔 서버 REST API에 올린다. 대시보드는 같은 서버의 조회 API만 사용한다.
7.1 LoRa 패킷 필드
| 필드 |
형식 |
설명 |
node_id |
정수 |
노드 고유 번호 |
seq |
정수 |
송신 순번 (유실 확인용) |
type |
문자 |
정기 송신 P / 이벤트 송신 E |
rain |
실수 |
강우량 또는 강우 여부 |
soil |
실수 |
토양 수분 (%) |
tilt |
실수 |
기준 대비 기울기 변화 (°) |
temp |
실수 |
기온 (°C) |
hum |
실수 |
상대습도 (%) |
smoke |
정수 |
연기 센서값 |
co |
정수 |
CO 센서값 |
batt |
실수 |
배터리 전압 (V) |
crc |
정수 |
오류 검출용 체크섬 |
게이트웨이가 서버로 보내는 JSON 예시:
{
"node_id": 1,
"seq": 1024,
"type": "P",
"rain": 0.0,
"soil": 31.5,
"tilt": 0.4,
"temp": 22.8,
"hum": 48.0,
"smoke": 120,
"co": 35,
"batt": 3.92,
"rssi": -71
}
7.2 서버 API
| 메서드 |
경로 |
사용처 |
설명 |
POST |
/api/readings |
게이트웨이 |
측정값 1건 등록 (API 키 필요) |
GET |
/api/nodes |
대시보드 |
노드 목록, 위치, 최신 위험 등급 |
GET |
/api/nodes/{id}/readings |
대시보드 |
기간별 센서 이력 |
GET |
/api/alerts |
대시보드 |
경보 목록 |
PATCH |
/api/alerts/{id} |
대시보드 |
경보 확인 처리 |
7.3 데이터 모델
| 테이블 |
주요 컬럼 |
node |
node_id, 이름, 위도, 경도, 지역, 설치일, 기준 기울기 |
reading |
node_id, 수신 시각, seq, 센서값 7종, 배터리 전압, RSSI |
risk |
node_id, 산출 시각, 산불 지수, 산사태 지수, 등급 |
alert |
alert_id, node_id, 종류(산불·산사태·화재 감지·통신 두절), 등급, 발생 시각, 확인 여부 |