HANWHA ENERGY

HEIS Tool

GEP Operations · HEIS TAG, InfluxDB 데이터 관리

ver1.5.2  ·  2026-04-10

🏠 HEIS Tool — 통합 데이터 관리 플랫폼

HEIS Tool은 태양광 발전소 데이터를 수집·변환·검증하는 3개의 핵심 도구와 실시간 서버 모니터로 구성된 통합 플랫폼입니다.

☁️
Backfill Tool
데이터 이관 · 추출 · 적재

서버(InfluxDB) 데이터를 추출하거나 로컬 파일을 서버에 적재하는 전체 파이프라인을 제공합니다.

  • CSV 전처리 및 기간 필터링 (Trim)
  • Line Protocol 형식 변환 + Fuzzy 매칭 (Convert)
  • 서버 부하 자동 감지 · 속도 조절 (Extract)
  • 대용량 파일 일괄 적재 (Load)
🏷️
Tag Generator
태그 자동 생성 · DB 반영

ISL(설비 사양서)을 분석하여 HEIS 태그·알람 정보를 자동 생성하고 DB에 반영하는 전문 도구입니다.

  • 설비 기준 정보 자동 추출 (Step 2)
  • 파라미터·단위·스케일 자동 매핑 (Step 3)
  • 알람 등급 자동 분류 (Step 4~5)
  • SQL 자동 생성 & 원격 DB 전송 (Step 6)
🔍
QC Tool
데이터 검증 · 시각화 리포트

현장 데이터(SCADA)와 서버 데이터(InfluxDB)를 정밀 비교하여 오차를 시각화 리포트로 제공합니다.

  • K8s 로그 분석 · 누락 태그 감지
  • 캐시 즉시 갱신 (Cache Refresh)
  • SCADA ↔ InfluxDB 오차 비교 (QC Compare)
  • HTML 시각화 보고서 자동 생성

🔄 시스템 데이터 흐름 (Data Flow)

현장에서 발생한 데이터가 최종 화면(HEIS 2.0)까지 전달되는 전체 경로입니다.

DEV 환경
🏭
SCADA
현장 설비
OPC UA
🔌
ISL OPC UA
Agent
프로토콜 변환
🖥️
ISL Server
데이터 수집
⚙️
Parser
K8s Pod
📨
Kafka
메시지 버스
📡
Telegraf
수집 에이전트
🗄️
InfluxDB
시계열 DB
🌐
UEP
Spring API
💻
HEIS 2.0
Vue.js 화면
PRD 환경
🏭
SCADA
현장 설비
OPC UA
🔌
ISL OPC UA
Agent
프로토콜 변환
🖥️
ISL Server
데이터 수집
⚙️
Parser
K8s Pod
📨
Kafka
메시지 버스
📡
Telegraf
수집 에이전트
🗄️
InfluxDB
시계열 DB
🌐
UEP
Spring API
💻
HEIS 2.0
Vue.js 화면
🛠️ HEIS Tool 개입 위치 Tag Generator → ISL 분석 → DB 태그 등록 Backfill → InfluxDB 데이터 추출 / 적재 QC Tool → Parser 로그 분석 · SCADA ↔ InfluxDB 비교

🧱 기술 스택 (Tech Stack)

v1.5.2 기준 — 각 레이어의 핵심 기술만 명시합니다.

🖥️ Runtime Python 3.14+  ·  PySide6 / Qt6 (데스크톱 UI)  ·  QML (설정 페이지)
🗄️ Database MySQL/MariaDB (homdb, 매핑·태그 기준정보)  ·  InfluxDB 1.x (시계열 센서 데이터)
SSH → mysql -N -B TSV 스트림  ·  MappingRepository 세션 캐시  ·  Excel fallback
🔒 Security keyring (Win Credential Manager / macOS Keychain) → fallback AES-256-GCM + PBKDF2 (320k iter)
패스프레이즈: MAC+hostname SHA-256 머신 파생  ·  MySQL full-escape (백슬래시·NUL·CR·LF 포함)  ·  InfluxQL tag_filter 화이트리스트  ·  DEV/PRD 크레덴셜 분리
📡 SSH OpenSSH (System32 > shutil.which, Win/Mac/Linux 자동 탐지)  ·  ProxyJump 3-hop 터널
재시도 + 지수 백오프 (최대 2회)  ·  PEM chmod 400 / icacls  ·  config chmod 600  ·  atexit 자동 정리
⚙️ 설정·빌드 단일 버전 소스: heis_main.py __version__ → pyproject.toml / __init__.py / HEIS_guide.html 자동 동기화
OS별 기본 경로 자동 선택 (Win/macOS/XDG)  ·  backfill_config 상수 — IP·User 하드코딩 전면 제거  ·  Briefcase 빌드
🗺️ 매핑 DB-first: TB_TAG_STDR_INFO ⋈ TB_SCADA_TAG_INFO  ·  tb_scale_info FORML 수식 eval  ·  SP_GET_HEIS_TAG_INFO 저장 프로시저
SSH 불가 시 _mapping.xlsx 자동 fallback  ·  gzip 압축 업로드로 Excel → MySQL 일괄 임포트
💡
시작하기 전에
  • 상단 탭을 클릭하여 각 도구의 상세 가이드로 이동하세요.
  • 처음 사용자라면 Backfill → QC Tool 순서로 탭을 확인하세요.
  • 서버 상태는 우측 사이드바 서버 모니터에서 실시간 확인 가능합니다.

⚙️ 설치 및 초기 설정

단계를 클릭해 상세 내용을 확인하세요. 완료한 항목은 체크리스트에서 클릭하면 진행률이 표시됩니다.

1
📁 PEM 키 파일 배치 필수 6 + 선택 2
SIT_DEV_DP_KEY_Bastion_Virginia.pem
🌐 Public Bastion
인터넷 → VPC 최초 진입
공인 IP · Public Subnet
ec2-user 필수
SIT_DEV_DP_KEY_APSUB_Virginia.pem
🔗 App Subnet Bastion
VPC 내부 사설망 중계
10.157.xx.xx · App Subnet
ubuntu 필수
SIT_DEV_DP_KEY_EKSSUB_Virginia.pem
☸️ EKS Subnet Bastion
K8s 워커노드 직접 디버깅용
10.157.xx.xx · EKS Subnet
ec2-user 선택
SIT_DEV_DP_KEY_DBSUB_Virginia.pem
🗄️ DB Subnet Server
InfluxDB / MySQL 최종 대상
10.157.xx.xx · DB Subnet
ec2-user 필수

저장 경로: %USERPROFILE%\Documents\_tunnel\pem\  ·  자동 감지 키워드: Bastion / APSUB / EKSSUB / DBSUB

2
📡 SSH 3-hop ProxyJump 구조 자동 구성
🖥️ 내 PC Local
🌐 Public Bastion Bastion.pem 공인 IP
🔗 App Subnet APSUB.pem 10.157.xx.xx
☸️ EKS Subnet EKSSUB.pem 10.157.xx.xx
🗄️ DB Subnet DBSUB.pem 10.157.xx.xx

HEIS Tool이 SSH config 파일을 자동 생성 → OpenSSH ProxyJump로 4단계 터널을 투명하게 연결합니다. 키 파일 권한(icacls / chmod 400)도 자동 적용됩니다.

3
🛡️ PEM 파일 권한 설정 앱 실행 시 자동

HEIS Tool 실행 시 자동 적용됩니다. 수동 실행이 필요한 경우에만 아래 명령을 사용하세요.

🪟 Windows PowerShell

$pem = "$env:USERPROFILE\Documents\_tunnel\pem"
Get-ChildItem "$pem\*.pem" | ForEach-Object {
    icacls $_.FullName /inheritance:r /grant:r "${env:USERNAME}:R"
    Write-Host "✅ $($_.Name)"
}

🐧 Linux / macOS

chmod 400 ~/Documents/_tunnel/pem/*.pem
4
🔐 DB 계정 설정 필수

✅ 방법 A — Settings UI (권장)

Windows Credential Manager에 암호화 저장. 파일로 남지 않음.

  1. 상단 ⚙️ 설정 탭 클릭
  2. DB Credentials 입력
  3. Save → keyring 자동 저장

📄 방법 B — db_credentials.json

⚠️ 평문 저장 — OneDrive 동기화 폴더 제외

{
  "db_user": "root",
  "db_pass": "your_password",
  "db_user_prd": "root",
  "db_pass_prd": "your_prd_pw"
}
5
⚙️ Settings UI 경로 설정 필수
📂
PEM Key Dir
Documents\_tunnel\pem
📊
Mapping File
_backfill.xlsx 경로
🔑
DB Credentials
user / pass 입력

설정 저장 위치: %USERPROFILE%\.hanwha\global_config.json (비밀번호는 Windows Credential Manager에 별도 보관)

6
🚀 연결 테스트 완료 확인

각 탭에서 연결 상태를 확인하세요.

☁️ Backfill — DEV/PRD 연결 버튼
🏷️ Tag Generator — SQL Preview 확인
🖥️ 서버 모니터 — 사이드바 로드 표시

📋 신규 PC 셋업 체크리스트

항목을 클릭하면 체크됩니다. 완료 시 자동으로 저장됩니다.

진행률 0 / 7
1
PEM 키를 지정 폴더에 복사 필수 6개 📁 %USERPROFILE%\Documents\_tunnel\pem\ · DEV/PRD 각 Bastion+APSUB+DBSUB (EKSSUB는 선택)
2
PEM 키 권한 설정 (icacls / chmod 400) 앱 자동 적용 🔒 Windows: 앱 실행 시 자동 · 수동: PowerShell 스크립트 실행 (Step 3)
3
HEIS Tool 실행 → ⚙️ 설정 탭 이동 필수 🖥️ 상단 네비게이션 우측 끝 ⚙️ 클릭
4
PEM Key Dir 경로 입력 후 Save 필수 📂 pem 폴더 경로 입력 → SSH 터널 자동 감지
5
Mapping File (_backfill.xlsx) 경로 입력 후 Save 필수 📊 DEV/PRD 매핑 엑셀 파일 경로 지정
6
DB Credentials 입력 (DEV · PRD 각각) 필수 🔑 입력 즉시 Windows Credential Manager(keyring)에 암호화 저장
7
각 탭에서 연결 테스트 완료 확인 권장 ☁️ Backfill 연결버튼 · 🏷️ Tag SQL Preview · 🖥️ 사이드바 서버 상태
🎉 모든 설정 완료! HEIS Tool을 사용할 준비가 됐습니다.

☁️ Backfill Tool — InfluxDB 데이터 이관

SCADA CSV 전처리부터 InfluxDB 추출·적재·상태 확인까지 처리하는 통합 도구입니다. 사이드바에서 작업 목적에 맞는 메뉴를 선택하세요.

01
🛠️
Trim
02
🚀
Convert
03
📡
Extract
04
🚚
Load
05
📊
Data Status
06
⏱️
Unix Time

🌍 Global Configuration — 공통 설정

📅 날짜 범위
Start / End 날짜·시간 직접 입력
캘린더 팝업 또는 키보드 조작 지원
최근 사용 기간 히스토리 드롭다운
오늘·어제·최근 7일 프리셋 제공
🏭 Plant (사이트)
드롭다운에서 사이트 선택
Load 버튼으로 매핑 파일 갱신
사이트별 태그 필터 자동 적용
🖥️ 환경 (DEV / PRD)
DEV — 개발 서버, 검증용
PRD — 운영 서버, 실데이터
PRD 선택 시 노드 선택 옵션 표시
Auto / Host 1 (140) / Host 2 (170)

📋 메뉴별 기능 상세

01

🛠️ Trim — CSV 전처리

대용량 원본 CSV 파일에서 설정한 날짜 범위만 잘라내어 trim/ 하위 폴더에 저장합니다. 또는 여러 CSV를 하나로 병합합니다.

주요 기능
  • 날짜 범위 필터링 — 수백만 행도 빠르게 처리
  • UTC ↔ KST 시간대 자동 보정
  • Merge — 복수 CSV를 단일 파일로 합치기
  • 작업 디렉토리 / 병합 디렉토리 개별 지정
입력 / 출력
📥 원본 CSV 파일 (날짜 컬럼 포함)
📤 trim/ 폴더 내 정제된 CSV
02

🚀 Convert — Line Protocol 변환

SCADA CSV를 InfluxDB 전용 Line Protocol(.lp) 형식으로 변환합니다. 엑셀 매핑 파일로 컬럼명·스케일을 자동 처리합니다.

주요 옵션
  • 최대 파일 크기 제한 (MB 단위 분할)
  • Host 태그 모드: default / custom / no_host
  • 파일명 유효성 검증 (Fuzzy Matching 포함)
  • 기간 필터링, 단일 LP 병합 옵션
입력 / 출력
📥 정제된 CSV + 엑셀 매핑 파일
📤 .lp 파일 (InfluxDB 적재용)
태그명 불일치도 Fuzzy 자동 매칭
03

📡 Extract — 서버 → 로컬

DEV 또는 PRD InfluxDB에서 데이터를 추출해 로컬 .lp 파일로 저장합니다. 서버 부하를 실시간 감지해 자동 스로틀링합니다.

주요 옵션
  • 추출 환경 선택 (DEV / PRD)
  • 날짜 범위 + 추출 간격 (1h / 1d 등) 설정
  • 포함/제외 태그 필터, Measurement 선택
  • gzip 압축 여부, 태그 제외 패턴
스로틀링
서버 iowait > 15% 시 자동 일시 중지
로그에서 [THROTTLE] 메시지 확인
중지 후 자동 재개
04

🚚 Load — 로컬 → 서버 적재

로컬의 .lp 파일을 원격 InfluxDB 서버에 업로드·적재합니다. 다수 파일 일괄 전송과 스마트 스로틀링을 지원합니다.

주요 옵션
  • 로컬/원격 작업 디렉토리 개별 설정
  • 동기화 지연(초) — 파일 간 전송 간격 조절
  • 로컬 정리 / 원격 정리 자동 삭제 옵션
  • gzip 압축 전송, 자동 스로틀 옵션
PRD 노드 자동 선택
Auto — 활성 쓰기 노드 자동 감지
Host 1 — Node 140 고정
Host 2 — Node 170 고정
Telegraf HTTP 204 응답으로 활성 노드 판별
05

📊 Data Status — 서버 데이터 현황 조회

지정한 환경(DEV/PRD)·Plant·기간으로 InfluxDB 서버의 데이터 적재 현황을 조회합니다. 적재 완료 여부 확인 및 누락 구간 검출에 활용합니다.

조회 설정
  • 환경 선택: DEV / PRD
  • Plant ID (사이트) 입력
  • 조회 기간 (Global 날짜 범위 적용)
  • Check InfluxDB 버튼으로 즉시 실행
조회 결과
데이터 행 수 (Row Count)
실제 데이터 시간 범위
누락 구간 또는 적재 공백 확인
Load 완료 후 검증 용도로 활용
06

⏱️ Unix Time — 타임스탬프 변환기

Unix 타임스탬프(ms)와 UTC 날짜·시간을 양방향 실시간 변환합니다. LP 파일 디버깅 및 시간 범위 계산에 유용합니다.

기능
  • 13자리 Unix ms 입력 → UTC 자동 변환
  • UTC 날짜 입력 → Unix ms 자동 변환
  • 타임존 오프셋 (±12~14시) 조정
  • ↑↓ 화살표 키로 1초 / 1분 단위 이동
💡 활용 예시
LP 파일의 타임스탬프 값 확인
InfluxDB 쿼리 시간 범위 계산
KST ↔ UTC 빠른 변환
데이터 누락 구간 시간 특정

🤖 스마트 PRD 노드 자동 선택

PRD 작업 시 툴이 자동으로 Node 140 또는 Node 170 중 활성 쓰기 노드를 선택합니다.

📡 작업 시작
Extract / Load
🔎 활성 노드 감지
Telegraf HTTP 204 확인
✅ Node 140
유휴 or 낮은 Load
or
✅ Node 170
유휴 or 낮은 Load
⚠️
PRD 운영 환경 작업 시 주의
  • 날짜 범위와 Plant 필터를 반드시 재확인하세요 — 실 운영 데이터입니다.
  • 서버 I/O 대기(iowait)가 15%를 초과하면 작업이 자동으로 일시 중지됩니다.
  • 로그에서 [THROTTLE] 메시지를 확인하세요.
  • Load 완료 후 Data Status 탭에서 적재 현황을 반드시 검증하세요.

🏷️ Tag Generator — 설비 태그 관리

ISL 파일을 입력받아 설비 기준 정보·태그·알람을 자동 생성하고 원격 DB에 등록하는 종합 태그 관리 도구입니다. Step 2 → 6 순서대로 진행합니다.

S2
🏗️
설비기준
S3-1
🏷️
태그수집
S3-2
⚖️
스케일변환
S4-1
🚨
알람수집
S4-2
알람확장
S5
🎯
알람대상
S6
🚀
SQL 실행

📁 작업 전 파일 준비

📄 ISL 파일 (Source)

파일명이 ISL_ 로 시작해야 합니다.

  • 설비 리스트 시트 포함
  • 알람(alarm) 시트 포함
  • 파일명으로 사이트 자동 감지 (예: ISL_IA002.xlsx)
📊 HEIS 파일 (Target)

파일명이 HEIS_ 로 시작해야 합니다.

  • 각 Step 결과가 시트별로 기록됨
  • 실행 시 버전이 자동 증가하여 새 파일 생성 (예: HEIS_v2.xlsx)
  • tag 시트 — 영문명·단위 매핑 기준표
📂
Set Dir — ISL 파일과 HEIS 파일이 모두 위치한 폴더를 지정합니다. 출력 파일도 동일 폴더에 생성됩니다.
STEP 2

🏗️ 설비 기준 정보 생성

ISL 파일의 설비 시트에서 모든 설비를 추출하여 HEIS 파일의 「2. 설비 기준 정보」 시트를 구성합니다.

처리 내용
  • 부모설비 ID / 자식설비 ID 계층 자동 추출
  • 설비 유형별 정렬 및 그룹 코드 매핑 (HEIS tag 시트 기반)
  • 한글명·영문명 자동 생성, 대표설비 여부 설정
  • 단선도 사용 여부(Y/N) 자동 판별
입력 / 출력
📥 ISL 설비 시트 + HEIS tag 시트
📤 HEIS 「2. 설비 기준 정보」 시트 업데이트
💾 HEIS_v{n+1}.xlsx 새 파일 생성
STEP 3-1

🏷️ 설비 태그 정보 수집

ISL의 SCADA TAG·파라미터·단위·데이터 타입을 수집하여 HEIS 「3. 설비 태그 정보」 시트를 구성합니다.

처리 내용
  • ISL에서 SCADA TAG 전체 수집
  • 설비 유형별 정렬 후 그룹 구분선 자동 삽입
  • 영문명은 HEIS tag 시트에서 매핑하여 덮어쓰기
  • 단위(UNIT), 데이터 타입(A/D) 자동 할당
입력 / 출력
📥 ISL 태그 시트 + HEIS tag 매핑 시트
📤 HEIS 「3. 설비 태그 정보」 시트
💾 HEIS_v{n+1}.xlsx 새 파일 생성
STEP 3-2

⚖️ 단위 및 스케일 변환

Step 3-1에서 수집된 태그의 단위를 표준화하고 스케일 번호를 자동 적용합니다. 변환된 셀은 노란색 강조로 표시됩니다.

☑ Unit & Scale Conversion PV 기본 ON
  • 단위가 MW 인 태그 → kW 로 변환
  • 스케일 번호 20 자동 부여 (×1,000 변환)
  • 음수 보정 태그는 스케일 39 (÷−1,000)
  • ⚡ BESS 사이트는 단위 변환 불필요 — 체크 해제 후 실행
☐ Duplicate TAP to ORGTAP 기본 OFF
  • 파라미터명이 TAP 인 행 발견 시
  • 해당 행 위에 ORGTAP 행 자동 삽입
  • 스케일 구분을 위한 원본 보존 처리 — 필요 시만 ON

⚖️ 스케일 번호 참고표

Scale No.변환 공식단위 예시적용 상황
20TAG × 1,000MW → kW표준 kW 단위 변환 (가장 일반적)
39TAG ÷ −1,000MW → kW (음수)부호 반전이 필요한 특수 보정값
19TAG × 100ratio → %백분율 계열 (0~1 → 0~100)
42TAG × 10소수점 1자리 보정
0TAG (변환 없음)kW, %, A, V …이미 표준 단위인 경우
STEP 4-1

🚨 알람 태그 정보 수집

ISL의 alarm 시트를 파싱하여 HEIS 「4. 알람 설비 태그」 시트를 구성합니다. 파라미터 유형·태그 속성·데이터 타입을 자동 분류합니다.

PARMTY (파라미터 유형)
PARMTY02 — 디지털 알람
PARMTY04 — 아날로그 알람
PARAMETER 컬럼 값으로 자동 판별
태그 속성 (TAG ATTR)
R — 읽기 전용 (Read)
A — 알람 (Alarm)
H — 히스토리 (History)
데이터 타입
A — Analog (아날로그)
D — Digital (디지털)
설비별 정렬 후 구분행 삽입
STEP 4-2

➕ 알람 확장

사이트별 설비 수·파라미터 구성을 기반으로 알람 파라미터(ALRM1, ALRM2 …)를 대량으로 자동 생성합니다.

처리 내용
  • 사이트 자동 감지 — ISL 파일명에서 사이트 ID 추출 (예: IA002)
  • site_configs.py 에서 해당 사이트의 설비 수·파라미터 매트릭스 로드
  • ISL alarm 시트에서 영문명·한글명 자동 매핑 후 행 생성
  • 수백~수천 행의 알람 파라미터를 수초 내 완성
⚙️ Edit Config — 사이트 설정 편집

Step 4-2 화면 우측의 Edit Config 버튼을 클릭하면 site_configs.py 편집 창이 열립니다.

  • 사이트별 설비 종류·개수 추가/수정
  • 파라미터 확장 패턴 커스터마이징
  • 저장 즉시 옵션 목록에 반영됨
STEP 5

🎯 알람 대상 정보 생성

Step 4 에서 생성된 알람 태그를 읽어, 알람명 키워드 분석으로 등급(ALVL)을 자동 분류하여 「5. 알람 설비 대상 정보」 시트를 생성합니다.

ALVL01
정보
Status·Info 계열
ALVL02
주의
Caution·Limit 계열
ALVL03
경보
Warning·Alarm 계열
ALVL04
최고 위험
Trip·Emergency·Fault 계열
💡 IVT / IVS 파라미터는 별도 기준으로 등급 분류됩니다. 공백 구분행도 그대로 유지되어 시트 구조가 보존됩니다.
STEP 6

🚀 SQL 추출 및 원격 업로드

완성된 HEIS 파일의 SQL 컬럼 데이터를 추출하여 로컬에 저장하고, SSH 터널을 통해 원격 DB 서버에서 직접 실행합니다.

📤 Extract SQL (SQL 추출)
  • HEIS 파일의 SQL·SQL2 컬럼에서 쿼리 수집
  • INSERTREPLACE 자동 변환
  • query.sql / re_query.sql 로컬 저장
🛰️ Upload & Execute (원격 실행)
  • SSH Bastion → DB 서버 2단 터널 접속
  • gzip 압축 전송 후 리모트에서 압축 해제
  • MySQL 자동 실행 후 임시 파일 정리 (Clean 옵션)
DEV 개발 환경 — 검증용. 실제 서비스 영향 없음.
PRD 운영 환경 — DEV 검증 완료 후 실행.
🔑 DB 계정(db_user, db_pass)은 PEM 폴더 내 db_credentials.json 에 별도 저장됩니다. 소스 코드에 하드코딩하지 마세요.
⚠️
작업 전 필수 확인
  • 각 Step 실행 전 🚫 Kill Excel 버튼으로 열려 있는 엑셀을 모두 종료하세요 — 파일 잠금으로 인한 쓰기 오류 방지.
  • Source 파일명에 isl, Target 파일명에 heis 가 포함되어야 자동 인식됩니다.
  • Step 6 Upload 전 반드시 DEV 환경에서 먼저 검증한 뒤 PRD 로 전환하세요.
  • 새 사이트 추가 시 Step 4-2 의 Edit Config에서 site_configs.py 를 먼저 업데이트하세요.

🔍 QC Tool — 데이터 검증

데이터 정합성 확인, 캐시 갱신, 시스템 진단을 위한 통합 검증 도구입니다.

1
🔄 Cache Refresh

Tag / Scale 캐시 정보를 즉시 갱신합니다. PV ID나 Tag ID를 입력하면 해당 항목의 캐시를 바로 업데이트합니다.

캐시 갱신
2
🔎 Missing Tags

K8s 파서 포드의 로그를 분석하여 누락된 태그(Not Registered)나 시스템 오류를 빠르게 찾아냅니다.

로그 분석
3
📡 Parser Data

수집기(Parser) 데이터와 HEIS DB 데이터의 일치 여부를 실시간 API로 대조합니다. 주기적 자동 로깅도 지원합니다.

실시간 대조
4
📊 QC Compare

현장 원본 데이터(SCADA) ↔ InfluxDB 서버 데이터를 정밀 비교합니다. 오차가 큰 태그를 HTML 시각화 리포트로 생성합니다.

비교 리포트

📊 QC Compare — 단계별 흐름

SCADA(현장) 데이터와 InfluxDB(서버) 데이터가 어떻게 비교되어 리포트로 나오는지, 7단계로 설명합니다.

📂
STEP 1
LP 파일 준비 — Backfill Tool 사용
QC Compare를 실행하려면 두 종류의 Line Protocol(.lp) 파일이 필요합니다.
두 파일 모두 Backfill Tool에서 만들어집니다.
SCADA LP Backfill → Convert
현장에서 받은 SCADA CSV 파일을 준비
Backfill Convert 탭에서 CSV → LP 변환
매핑 엑셀 기반으로 컬럼명·스케일 자동 처리
scada_사이트명.lp 생성 완료
InfluxDB LP Backfill → Extract
Backfill Extract 탭에서 사이트·기간 선택
서버에서 데이터 추출 — LP 파일 자동 생성
별도 변환 작업 없이 추출 즉시 .lp 형식으로 저장
influx_사이트명.lp 생성 완료
SCADA.lp — Convert로 직접 변환 InfluxDB.lp — Extract 시 자동 생성
🔬
STEP 2
LP 파일 파싱
각 .lp 파일을 한 줄씩 읽어 태그별로 데이터를 분류합니다.
결과: 태그명 → { 타임스탬프(ms): 값 } 형태의 내부 구조
LP 한 줄 예시
measurement,pdevice=PV01,cdevice=INV01,parameter=ACPower value=1234.5 1700000000000
측정명 태그(장비/파라미터) 타임스탬프(ms)
⚖️
STEP 3
스케일 보정 (SCADA 측)
현장 SCADA는 원시 전기 신호 값을 전송하므로 HEIS Scale 번호에 따라 단위를 변환해야 합니다.
변환 후 값이 InfluxDB에 저장된 값과 동일한 단위가 됩니다.
Scale No.변환 공식예시
20값 × 1,0005 → 500
18값 ÷ 1,0001000 → 1.0
42값 × 1012.3 → 123
39값 ÷ −1,000반전 보정
🕐
STEP 4
타임스탬프 매칭
SCADA와 InfluxDB의 같은 시간대 데이터를 짝지읍니다.
Tolerance(허용 오차) 설정 시 정확히 일치하지 않아도 가장 가까운 값을 자동으로 찾습니다.
SCADA
13:00:00 13:05:00 13:10:00
InfluxDB
13:00:00 13:05:00 13:10:08 ±허용
🎯
STEP 5
오차 판정 (Pass / Fail)
짝지어진 두 값의 차이를 계산하여 오차율이 기준(기본 15%) 이상이면 Fail, 미만이면 Pass로 기록합니다.
오차율 = |SCADA값 − InfluxDB값| ÷ |SCADA값|
✅ Pass   오차율 ≤ 15% ❌ Fail   오차율 > 15% ⚪ N/A   한쪽만 데이터 존재
📄
STEP 6
CSV 결과 파일 생성
태그별·시간별 비교 결과를 CSV 파일로 출력합니다. 이 파일이 최종 HTML 보고서의 데이터 원천입니다.
timestamplp_tagscada_valueinflux_valueTest ResultScale_N
2024-01-15 13:00:00PV01/INV01/ACPower500.0499.2Pass20
2024-01-15 13:05:00PV01/INV01/DCPower320.0185.1Fail20
📊
STEP 7
HTML 시각화 리포트 생성
CSV 데이터를 바탕으로 Fail 태그를 중심으로 차트와 표가 포함된 HTML 보고서를 자동 생성합니다.
브라우저에서 바로 열어 누구나 쉽게 결과를 확인할 수 있습니다.
📊 QC Compare Report Pass: 372 Fail: 16
SCADA
InfluxDB
태그별 값 비교 (차트 예시)
태그SCADAInflux결과
ACPower500.0499.2Pass
DCPower320.0185.1Fail
💡
사용 팁
  • 분석 결과는 Copy 버튼으로 클립보드에 즉시 복사할 수 있습니다.
  • Clear files로 작업 중 생성된 임시 CSV/HTML 파일을 일괄 삭제하세요.

🖥️ 서버 모니터 — 실시간 부하 현황

앱 우측 사이드바에 항상 표시되는 실시간 서버 모니터입니다. DEV · PRD · PRD2 세 환경을 동시에 확인하고 작업 시점을 판단하는 데 활용합니다.

● live — cpu load average (예시 수치)

DEV
1.3 정상
PRD
4.2 주의
PRD2 NEW
1.8 정상
DEV — 개발 서버
PRD — 운영 Node 1 (140)
PRD2 — 운영 Node 2 (170)
Load 5 경고선

📋 모니터 표시 항목

⚡ CPU Load

서버가 처리 중인 작업량. 숫자가 높을수록 서버가 바쁜 상태입니다.

기준: Load < 3 정상 · 3~5 주의 · >5 위험
🧠 InfluxDB CPU/MEM

InfluxDB 프로세스의 CPU 사용률과 메모리 점유량을 개별 표시합니다.

INFLUX 탭에서 상세 확인 가능
💾 디스크 사용률

서버 디스크 여유 공간 현황. Load 이후 디스크가 가득 찰 경우 오류 발생 가능.

BASTION 탭에서 서버별 확인

🛡️ 서버 부하 감소를 위한 자동 보호 장치

대용량 데이터 작업 중 서버에 과도한 부하가 걸리지 않도록 툴이 자동으로 여러 안전장치를 작동합니다. 별도 설정 없이 항상 활성화되어 있습니다.

🐢 자동 스로틀링 항상 활성

Extract / Load 작업 중 서버의 I/O 대기(iowait)가 15%를 초과하면 데이터 전송 속도를 자동으로 줄입니다. 서버가 안정되면 자동으로 재개합니다.

💬 로그에 [THROTTLE] iowait=XX% — pausing 메시지가 표시됩니다.
🔀 스마트 노드 자동 선택 PRD 전용

PRD 환경 작업 시 Node 140(PRD)과 Node 170(PRD2) 중 현재 쓰기 요청을 처리 중인 활성 노드를 자동으로 감지하여 접속합니다. 덜 바쁜 서버로 자동 분산됩니다.

💬 Telegraf가 HTTP 204 응답을 반환하는 노드가 활성 노드로 판별됩니다.
🔁 SSH 터널 자동 갱신 5분 주기

서버 접속은 SSH 보안 터널을 통해 이루어집니다. 장시간 실행 시 터널이 끊길 수 있어 5분마다 자동으로 갱신합니다. 작업 중 연결이 끊기는 상황을 방지합니다.

💬 별도 조작 없이 백그라운드에서 자동 처리됩니다.
🔄 자동 재연결 지수 백오프

네트워크 불안정 등으로 연결이 끊기면 모니터에 [OFFLINE]이 표시되고 5초 → 10초 → 30초 간격으로 자동 재연결을 시도합니다. 자동 복구되므로 별도 조작이 필요 없습니다.

💬 연결 복구 시 모니터 수치가 자동으로 업데이트됩니다.

🖱️ 모니터 UI 사용 방법

탭 전환 (INFLUX / BASTION)

사이드바 상단의 탭을 클릭하면 InfluxDB 상세 정보 또는 Bastion 서버 정보로 전환됩니다.

🔍 상세 보기 다이얼로그

각 환경 항목 옆 🔍 버튼을 클릭하면 CPU·메모리·디스크·InfluxDB 버전 등 상세 정보 팝업이 열립니다.

ℹ️
Load 5 경고선 안내

가로 바 그래프의 분홍색 점선이 Load 5 기준선입니다. PRD 서버가 이 수준을 초과하면 작업 속도가 자동으로 줄어들며, 가능하면 작업을 잠시 대기하거나 서버 부하가 낮은 시간대에 진행하세요.

📋 릴리즈 노트

오래된 버전이 위 · 최신 버전이 아래에 표시됩니다. 탭을 열면 자동으로 최신 버전으로 스크롤됩니다.

ver1.0.0 2025-11-20

초기 릴리즈 — 핵심 Backfill Tool 기능 출시 by Juns

ver1.4.2 2026-03-20

모듈식 UI 구현 — 사이드바 레이아웃 및 통합 다크 테마 적용

SSH 멀티플렉싱 지원 추가 (실험적)

CPU Load / 메모리 기반 기본 자동 속도 조절(Auto-Throttle) 구현

ver1.4.3 2026-03-25
📊
모니터링 PRD2 추가
DEV·PRD·PRD2 3개 환경 동시 모니터링 및 사이드바 3선 그래프.
🤖
스마트 노드 자동 선택
CPU Load 기반 Node 140/170 자동 라우팅. Telegraf 쓰기 회피.
🛡️
iowait 자동 중지
PRD I/O 대기 15% 초과 시 백필 자동 일시 중지.
🔄
SSH 자동 재연결
KeepAlive 15s + 지수 백오프(5→10→30s) 백그라운드 복구.
📝
로그 형식 통일
청크 진행률 [현재/전체] 포맷, 집계 간격 반영 Row 수 추정.
ver1.4.5 2026-03-31
🎯
QC Tool — 유연한 시간 매칭
±10분 허용 오차로 가장 가까운 타임스탬프 자동 매칭.
📊
Backfill 메뉴명 변경
QC Verify → Data Status(데이터 확인)로 명칭 변경.
ver1.4.6 2026-04-03
QC Tool — 대용량 비교 안정화
GC 최적화 + 차트 다운샘플링(Max 1000pt)으로 멈춤 현상 해결.
📡
Backfill — hbeat 추출 누락 수정
제외 목록에서 hbeat 제거, 모든 항목 누락 없이 추출.
🛡️
Graceful Abort
Stop 클릭 시 즉시·안전한 리소스 해제. 비정상 종료 방지.
ver1.4.7 2026-04-08
🚀
신규 사이트 지원 강화
Settings 우측 상단 사이트 추가 기능으로 HEIS 확장성 강화.
🔍
TAG 감지 우선순위 개선
파일명 사이트명 → 시트 내용보다 우선 매칭하여 오탐 방지.
⚙️
사이트 관리 전용 다이얼로그
전용 편집 창에서 사이트 ID-Name 매칭 추가·삭제·저장.
📂
사용자 사이트 JSON 로컬 저장
site_registry.json에 영구 보관 및 앱 시작 시 자동 로드.
ver1.4.8 2026-04-09
📖
도움말 통합 HTML 페이지
NavBar ❓ HELP 단일 버튼으로 통합. HEIS_guide.html 탭 구조 전환.
📋
도움말 내용 대폭 보강
Tag Generator Step 2~6, Backfill 메뉴, 서버 모니터 보호 장치 비개발자 설명 추가.
🏗️
빌드 버전 자동 동기화
heis_main.py __version__ 단일 소스 → 빌드 시 HTML changelog 자동 갱신.
HELP 열기 UI 블로킹 수정
daemon 스레드 분리로 클릭 시 5초 멈춤 현상 해결.
ver1.5.1 2026-04-10
🗄️
MappingRepository — DB-first 매핑
SSH → mysql -N -B TSV 조회·세션 캐시. Excel 파일 의존성 제거, SSH 불가 시 자동 fallback.
🔗
homdb 스키마 정합성 수정
6개 테이블 DDL 검증 — 컬럼명 정오표 적용, 복합 PK JOIN 보정.
⚖️
스케일 처리 DB 연동
tb_scale_info.FORML 수식 우선 eval. 수식 없으면 하드코딩 fallback 유지.
🔒
DB 크레덴셜 AES-256-GCM 업그레이드
keyring 우선, fallback AES-256-GCM+PBKDF2(320k). DEV/PRD 분리. 레거시 enc:/fenc: 자동 마이그레이션.
📋
매핑 소스 로그 강화
DB 성공·실패·파일·소스 없음 각 경로별 로그. QC Tool 동일 추적.
ver1.5.2 2026-04-10 LATEST
🔒
보안 전면 강화
MySQL full-escape (백슬래시·NUL·CR·LF) 적용. InfluxQL tag_filter 화이트리스트. traceback UI 노출 제거. 하드코딩 IP 전면 제거.
🔑
크리덴셜 패스프레이즈 머신 파생으로 교체
고정 문자열 제거 → MAC+hostname SHA-256 자동 유도. 소스 노출 시에도 크리덴셜 안전.
📡
SSH 크로스플랫폼 + 재시도 로직
System32 → shutil.which 자동 탐지 (Win/Mac/Linux). 지수 백오프 재시도 2회. PEM/config 권한 자동 설정.