# 외부 DB 연동 및 커넥션 분리 완료 보고서 ## 변경 사항 요약 요청하신 옵션 A(사전 정의된 외부 스키마)를 기반으로, 내부 NILM 데이터 저장과 외부 타겟 DB로의 데이터 전송을 완벽하게 분리하여 구현했습니다. ### 1. 커넥션 스위칭 완료 - **메인 DB (NILM)**: 이제 첫 번째 설정 탭(DB(NILM))을 통해 연결되는 `fdConnNilm`이 프로그램의 심장 역할을 합니다. 모든 내부 장비 데이터, 수집 이력, 센서 설정 등이 이 커넥션으로 작동합니다. - **외부 DB (ETC)**: 두 번째 설정 탭(DB(ETC))을 통해 연결되는 `fdConnEtc`는 오직 타 시스템(외부 DB)으로 데이터를 밀어넣는(Push) 용도로만 사용됩니다. - **UI 동기화**: 메인 연결이 성공했을 때만 테이블 초기화 버튼이 활성화되도록 UI 종속성을 바로잡았습니다. ### 2. 실시간 상태 변경 감지 연동 (`inf_operation_active`, `inf_operation_history_tb`) - **변경 로직**: MQTT 데이터가 1초 단위로 수신될 때마다 `SaveNILMData` 함수가 내부 DB의 이전 상태값을 조회합니다. - **전송 조건**: 상태(opStatus)가 이전에 접수된 값과 다를 경우(예: 대기 -> 가동)에만 외부 DB 연동 함수(`SaveExternalOpStatus`)가 호출됩니다. - **실행 쿼리 (fdConnEtc)**: 1. `inf_operation_active` 테이블 업데이트 (없으면 신규 삽입). 2. `inf_operation_history_tb` 테이블 이력 삽입. ### 3. 일일 전력량 자정 전송 연동 (`inf_electricity_daily`) - **타이머 로직 추가**: 메인 폼의 시계 타이머(`tmrTimeTimer`)에 자정을 감지하는 스케줄러를 탑재했습니다. - **작동 방식**: 프로그램이 켜져 있는 상태에서 매일 자정(00시 00분)이 되면, 전날 누적된 설비별 전력량을 `inf_electricity_daily` 테이블에 일괄 삽입합니다. - 삽입 시 `interface_dt`는 전날(Date - 1) 자정 기준 날짜로 기록되며, 전송 후 당일 누적 변수는 0으로 초기화되어 새롭게 집계를 시작합니다. ## 확인(테스트) 방법 1. 프로그램을 켜고 `DB(NILM)`에는 내부용 DB 접속 정보를, `DB(ETC)`에는 외부 DB 접속 정보를 입력 후 각각 연결합니다. 2. 장비를 가동/중지 시켜보면서 외부 DB의 `inf_operation_active` 테이블이 즉각 업데이트 되는지 확인합니다. 3. 내일 아침에 외부 DB의 `inf_electricity_daily` 테이블을 조회하여, 오늘 하루 동안 누적된 전력량이 어제 날짜 기준으로 잘 들어왔는지 확인합니다.