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

55 lines
3.8 KiB
Markdown

# MMCL 기존 스키마 반영 및 마이그레이션 계획 (V3)
제공해주신 기존 데이터베이스 테이블 구조(`dev_info`, `sensor_info` 등)를 바탕으로, 이전에 논의된 MMCL 프로젝트의 핵심 로직(NILM 데이터 모니터링, 경광등 핸드쉐이크 제어)을 기존 스키마에 녹여내는 마이그레이션 계획입니다.
## User Review Required
> [!IMPORTANT]
> 아래 명시된 **기존 스키마와 MMCL 로직의 매핑 방안** 및 **추가 제안 필드/테이블**을 확인해 주세요. 특히 경광등 제어를 위해 `sensor_info` 테이블에 `target_status` 관련 필드를 추가하고, 이력 보관용 로그 테이블을 새로 추가하는 방안에 대해 확인이 필요합니다.
> 승인해 주시면 DB 스키마(`schema.sql`) 및 Python 코드들을 새 구조에 맞게 전면 수정하겠습니다.
## Proposed Changes
### 1. Database 스키마 재구성 (`database/schema.sql`)
제공해주신 DDL을 기본으로 하되, MMCL 요구사항(핸드쉐이크 및 이력 관리) 충족을 위해 다음 내용이 추가/변경됩니다.
#### [MODIFY] `sensor_info` 테이블 수정
기존에는 현재 상태(`value_chX_statusID`)만 존재합니다. 백엔드 서버(LLM)와 LED Agent 간의 **비동기 핸드쉐이크 로직**을 구현하기 위해 목표 상태(Target) 필드를 추가합니다.
- `target_ch1_statusID` INT (Green LED 목표 상태)
- `target_ch2_statusID` INT (Yellow LED 목표 상태)
- `target_ch3_statusID` INT (Red LED 목표 상태)
- `last_updated_by` VARCHAR(50) (명령 주체, 예: 'LLM', 'SYSTEM')
#### [NEW] `sensor_history_log` 테이블 신설
기존 `sensor_info`는 센서의 **최신 상태(Current Value)**만 유지하는 마스터 성격의 테이블로 보입니다(UNIQUE INDEX 등). 실시간 전력 사용량의 시계열 차트나 과거 내역 분석을 위해 로그를 쌓는 테이블을 추가로 생성합니다.
- `log_no` INT (PK, Auto Increment)
- `sensor_no` INT (FK)
- `log_time` DATETIME
- `value_ch1_current`, `value_ch1_volt`, `value_ch1_pwr` 등 (센서의 실시간 측정값 이력)
#### 기존 테이블 그대로 사용
- `dev_info` (기계/설비 및 센서 매핑 정보 유지)
- `nilm_init_value`, `pos_info`, `status_info`, `type_info`
---
### 2. 코드 마이그레이션 (Python Agents & Backend)
#### [MODIFY] `agents/nilm_agent_mock.py`
- 기존 `nilm_devices` 대신 `dev_info``sensor_info`(type=1)를 조인하여 대상 센서를 찾습니다.
- 생성된 가상 전력 데이터를 `sensor_info``value_chX...` 필드에 UPDATE(최신화) 하고, 동시에 `sensor_history_log`에 INSERT(이력 저장) 하도록 쿼리를 변경합니다.
#### [MODIFY] `agents/warning_light_agent.py`
- 기존 `warning_light_control` 테이블 대신 `sensor_info` (type=2)를 Polling 합니다.
- `target_chX_statusID``value_chX_statusID`(current) 값이 서로 다른 Row를 찾습니다.
- 물리적 제어 시뮬레이션 후 `value_chX_statusID` 값을 `target_chX_statusID` 값과 동일하게 UPDATE 하여 동기화를 완료합니다.
#### [MODIFY] `backend/main.py`
- LLM 제어 명령 접수 시, `sensor_info``target_chX_statusID`를 업데이트합니다. (예: 빨간색 지시 시 target_ch3_statusID를 켜짐(ON) 상태의 sts_id로 변경)
- 이후 `value_chX_statusID`가 목표 상태와 같아지는지 Polling으로 대기한 후 자연어 응답을 리턴합니다.
- 대시보드 데이터 조회 시 `dev_info`를 중심으로 `pos_info``sensor_info`를 조인하여 프론트엔드로 전달합니다.
## Verification Plan
1. 새롭게 정의된 통합 `schema.sql`이 기존 구조를 훼손하지 않고 정상적으로 MariaDB에 생성되는지 구문 검증.
2. 백엔드 및 에이전트 파이썬 코드가 변경된 스키마(명칭 및 관계)를 기반으로 정상적으로 데이터의 읽기/쓰기를 수행하는지 코드 점검.