55 lines
3.8 KiB
Markdown
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. 백엔드 및 에이전트 파이썬 코드가 변경된 스키마(명칭 및 관계)를 기반으로 정상적으로 데이터의 읽기/쓰기를 수행하는지 코드 점검.
|