MMCL/SOURCE/docs/api_protocol_spec.md
2026-09-04 11:27:31 +09:00

60 lines
2.2 KiB
Markdown

# MMCL 프로젝트 API 연동 명세서
웹 프론트엔드 파트와 파이썬 백엔드 서버 간의 REST API 통신 규약입니다.
## 기본 정보
- **Base URL**: `http://<서버IP>:8000/api`
- **Content-Type**: `application/json`
- **CORS 설정**: 허용되어 있음
---
## 1. 장비 목록 및 상태 조회 (GET)
대시보드에 표출할 전체 기계(장비)의 전력량, 경광등 상태 정보를 실시간으로 가져옵니다. 프론트엔드에서 주기적으로(예: 1~2초 간격) Polling 해야 합니다.
- **URL**: `/machines`
- **Method**: `GET`
- **Request Body**: 없음
- **Response**: Array of Objects
```json
[
{
"id": "D_CNC_01",
"machine_name": "CNC 선반 1호기",
"location": "A동 1구역",
"latest_power": 450.5,
"light_status": "YELLOW",
"target_light_status": "YELLOW"
}
]
```
- **데이터 설명**:
- `latest_power`: 해당 기계에 매핑된 NILM 센서의 가장 최근 채널1 전력(W). (센서 값이 없을 경우 null)
- `light_status`: 에이전트가 실제 장비에 적용 완료한 경광등의 **현재 상태**. (RED / YELLOW / GREEN / OFF)
- `target_light_status`: 파이썬 서버(또는 LLM)가 변경을 지시하여 아직 반영되지 않았거나 반영 중인 **목표 상태**.
---
## 2. 자연어 제어 명령 전송 (POST)
사용자의 자연어 메시지를 전송하여 LLM 분석을 의뢰하고, 분석 결과에 따른 경광등 제어 처리가 "하드웨어단까지 적용 완료" 될 때까지 서버에서 비동기 대기 후 응답을 줍니다. 대기 시간이 있으므로 프론트엔드에서는 로딩(Spinner) 처리가 필수적입니다.
- **URL**: `/chat_control`
- **Method**: `POST`
- **Request Body**:
```json
{
"message": "에러가 발생했으니 1번 장비 불빛 빨간색으로 바꿔줘",
"machine_id": "D_CNC_01"
}
```
- **Response (성공, 200 OK)**:
```json
{
"reply": "[LLM 응답] 정상적으로 장비를 RED 상태로 변경 완료했습니다."
}
```
- **Response (실패/에러)**:
- `400 Bad Request` : 필수 파라미터 누락
- `500 Internal Server Error` : LLM 분석 실패 또는 DB 통신 에러
- `504 Gateway Timeout` : Agent가 제어 명령을 하드웨어에 적용하는데 지정된 시간(약 10~15초)을 초과함.