34 lines
2.6 KiB
Plaintext
34 lines
2.6 KiB
Plaintext
# [완료 보고] 타업체 외부 DB (ETC) 연동 검증 및 NILM Name (장비명) 매핑 적용
|
|
|
|
## 1. 외부 DB 테이블 연동 검증 결과
|
|
|
|
외부 DB(`DB(ETC)` 커넥션)로 전송되는 3개 테이블의 데이터 정합성 및 계산 로직을 모두 검증하였습니다:
|
|
|
|
| 외부 테이블명 | 전송 시점 | 전송 컬럼 및 매핑 내용 | 상태 |
|
|
| :--- | :--- | :--- | :---: |
|
|
| **`inf_operation_active`** | 가동 상태(0/1/2) 변경 시 | `nilm`: **장비명(`DeviceName`)**<br>`operation_status`: 가동 상태 코드 (`0`: 꺼짐, `1`: 대기, `2`: 가동)<br>`interface_dt`: 현재 일시 (`NOW()`) | **정상 적용** |
|
|
| **`inf_operation_history`** | 가동 상태(0/1/2) 변경 시 | `nilm`: **장비명(`DeviceName`)**<br>`operation_status`: 가동 상태 코드 (`0`/`1`/`2`)<br>`interface_dt`: 상태 변경 일시 (`NOW()`) | **정상 적용** |
|
|
| **`inf_electricity_daily`** | 매일 자정 (00:00) | `nilm`: **장비명(`DeviceName`)**<br>`electricity_value`: 전일 24시간 누적 유효전력량 ($Wh$)<br>`interface_dt`: 전일 자정 일자 (`Date - 1`) | **정상 적용** |
|
|
|
|
---
|
|
|
|
## 2. 세부 수정 사항
|
|
|
|
### 2.1 식별자 매핑 수정 (`DeviceID` $\rightarrow$ `DeviceName`)
|
|
- 기존: `IntToStr(ADeviceID)` (예: `"2"`)로 전송되던 식별자를 **우리 NILM 셋팅의 장비명인 `DeviceName` (예: `"NILM_002"`)**으로 일괄 변경.
|
|
- 장비명이 설정되지 않은 경우에만 `IntToStr(DeviceID)`로 안전하게 대체(Fallback).
|
|
|
|
### 2.2 실시간 당일 전력량(Wh) 적분 로직 보강
|
|
- `uMain.pas`의 `NILM_SaveMQTTData`에서 실시간 유효전력($Total\_W$)과 수신 주기($\Delta t$)를 기반으로 당일 누적 전력량($Wh$)을 지속적으로 수치 적분하여 메모리에 누적.
|
|
- 매일 자정(00시 00분) 타이머(`tmrTimeTimer`)가 동작할 때, 각 장비별로 누적된 전일 하루 전력량을 장비명(`DeviceName`)과 함께 `inf_electricity_daily` 테이블에 전송 후 다음 날을 위해 0으로 자동 리셋.
|
|
|
|
---
|
|
|
|
## 3. 수정된 주요 파일
|
|
- [`uNILMManager.pas`](file:///c:/Users/MyName/Desktop/antigravity/AgentNILM_MQTTClient(Delphi13%20VCL)/uNILMManager.pas):
|
|
- `SaveMeasurementData`, `SaveNILMData`에 `ADeviceName` 매핑 추가.
|
|
- `SaveExternalOpStatus`, `SaveExternalDailyEnergy`의 SQL 파라미터 `:nilmname` 매핑.
|
|
- [`uMain.pas`](file:///c:/Users/MyName/Desktop/antigravity/AgentNILM_MQTTClient(Delphi13%20VCL)/uMain.pas):
|
|
- 실시간 MQTT 수신 시 `TargetDevice.DeviceName` 전달 및 당일 전력량($Wh$) 적분 계산.
|
|
- 자정 일일 전력량 전송 시 `D.DeviceName`으로 전송.
|