MMCL/SOURCE/docs/NILM Agent UI 구성 및 라이브러리 연동 계획 (V5)_implementation_plan.md
2026-09-04 11:27:31 +09:00

33 lines
2.7 KiB
Markdown

# NILM Agent UI 구성 및 라이브러리 연동 계획 (V5)
사용자께서 추가해주신 NILM 라이브러리 파일(`UMQTTClient.pas` 등)을 활용하여, 이전에 작성된 콘솔 기반의 에이전트를 **UI가 있는 VCL 폼 애플리케이션**으로 전면 재구축합니다.
## User Review Required
> [!IMPORTANT]
> 추가해주신 파일 중 `uNILMManager.pas`는 PostgreSQL 문법(`SERIAL`, `JSONB`)과 독자적인 테이블(`nilm_device`, `nilm_data` 등)을 생성하도록 되어 있습니다.
> 반면, 고객님께서 **"설계서에 있는 내용을 진행해줘"**라고 하셨으므로, 데이터베이스는 기존에 합의된 **MMCL 7개 테이블(MariaDB - `dev_info`, `sensor_info`, `sensor_history_log`)**을 유지하겠습니다.
> 즉, 통신은 올려주신 `UMQTTClient.pas`와 타입(`uNILMTypes.pas`)을 일부 활용하되, **DB 저장 로직은 마스터 설계서의 테이블(MariaDB)에 맞게 커스텀 적용**하려고 합니다. 이 방향이 맞는지 승인해 주시면 개발을 진행하겠습니다.
## Proposed Changes
### 1. VCL UI 구성 (`uMain.pas` 및 `uMain.dfm` 재작성)
#### [MODIFY] `agents/delphi_nilm_agent/uMain.pas`
#### [MODIFY] `agents/delphi_nilm_agent/uMain.dfm`
- 화면에 MQTT 연결 상태를 제어할 **Start / Stop 버튼** 배치.
- 수신되는 센서 데이터(CH1, CH2, CH3 전력/전압 등) 및 DB 처리 결과를 실시간으로 모니터링할 수 있는 **Log Memo** 컨트롤 추가.
- UI 스레드가 멈추지 않도록 MQTT 콜백 시 `TThread.Queue` 또는 `Synchronize`를 통한 로그 출력 구현.
### 2. MQTT 통신 및 JSON 파싱 다중 채널 적용
#### [MODIFY] `agents/delphi_nilm_agent/uMain.pas` 내 수신 로직
- 추가해주신 `UMQTTClient.pas` (또는 내장 JSON 파서 `System.JSON`)를 활용하여 센서 장비에서 들어오는 페이로드를 파싱.
- 기존 단일 채널(CH1)만 처리하던 로직을 확장하여 **CH1, CH2, CH3의 전력(W), 전류(A), 전압(V)** 값을 모두 추출.
### 3. 설계서 기반 DB 동기화
#### [MODIFY] DB Insert/Update 로직
- 추출된 다중 채널 데이터를 마스터 설계서의 `sensor_info` (현재 상태) 테이블과 `sensor_history_log` (시계열 이력) 테이블의 각 컬럼(`value_ch1_pwr`, `value_ch2_pwr` 등)에 매핑하여 Insert/Update 하는 FireDAC 로직 구현.
## Verification Plan
1. `uMain.dfm`이 유효한 텍스트 폼 형식으로 작성되어 RAD Studio에서 즉시 폼 디자인 모드로 열리는지 검증.
2. MQTT 수신 이벤트에서 `System.JSON`을 통해 3개 채널의 데이터가 파싱되는지 확인.
3. 파싱된 3개 채널 데이터가 설계서에 명시된 MariaDB 테이블 구조에 정확하게 `UPDATE``INSERT` 되는 SQL문이 작성되었는지 확인.