본문으로 건너뛰기

포인트 검색 (/ui/point) — 시계열 데이터 조회

특정 태그의 수집된 시계열 데이터 를 기간으로 조회하고, 결과를 표 / CSV 로 내려받는 화면입니다. 운영자가 어제 09시 ~ 11시 사이 PLC 값이 정상 범위였는지 같은 점검을 빠르게 수행할 때 사용합니다.

좌측 사이드바 데이터베이스 아이콘(fa-database) → 클릭 또는 직접 http://<게이트웨이>/ui/point.


1. 화면 구조

┌────────────────────────────────────────────────────────────────┐
│ ⊙ 포인트 검색 — 시계열 데이터 조회 · TM_TAG_POINT [←] [↻] │
├────────────────────┬───────────────────────────────────────────┤
│ [검색 조건] │ [포인트 목록 — 최신 순] [CSV 다운로드] │
│ ─ 검색 기간 │ ┌──────────────────────────────────────┐ │
│ ─ OPC ID * │ │ 시각 │ 태그 ID │ 값 │ 타입 │ 품질 │ 에러 │ │
│ ─ 태그 ID * │ └──────────────────────────────────────┘ │
│ [검색] │ … │
└────────────────────┴───────────────────────────────────────────┘

좌측 패널 width 는 표준 col-md-2 보다 +50px 더 넓혀 라벨/콤보박스 잘림을 방지합니다.


2. 상단 바

버튼동작
← (fa-arrow-left)/ui/main 으로 돌아가기
↻ (fa-sync)point.search() 다시 호출 (기존 조건 유지, 새로고침 용도)

3. 검색 조건 (좌측 패널)

3.1 검색 기간 (s_date_range)

  • daterangepicker 기반 — 형식 YYYY-MM-DD HH:mm ~ YYYY-MM-DD HH:mm
  • 화면 진입 시 최근 1시간 으로 자동 채워집니다 (moment().subtract(1, 'hours') ~ moment())
  • 클릭 → 달력 + 시간 선택 팝업

3.2 OPC ID (필수)

  • POST /connect/opc/list 결과로 콤보박스 채움 — opc_id 알파벳 ASC 정렬
  • 라벨 형식: OPC_ID (OPC_NAME) — name 이 비면 OPC_ID 만 표시
  • 선택을 바꾸면 아래 태그 ID 콤보가 그 OPC 소속 태그로 다시 로드됩니다

3.3 태그 ID (필수)

  • OPC 선택 전: disabled + 안내 옵션 — OPC 선택 후 로드 —
  • OPC 선택 후 POST /connect/tag/list { opc_id } 결과로 채움 — tag_id ASC 정렬
  • 라벨 형식: TAG_ID (TAG_NAME) — name 이 비면 TAG_ID
  • 로드 실패 시 — 로드 실패 — 옵션 노출 + 토스트 에러
태그를 안 고르고 검색을 누르면

"OPC 와 태그를 먼저 선택해 주십시오." 모달이 뜹니다 (bootbox alert) — 데이터 부재로 빈 결과 + 시간만 낭비되는 것을 방지하는 가드입니다.


4. 결과 테이블 (6 컬럼)

GET /point/search 응답을 DataTables 가 그립니다. 기본 정렬은 시각 desc (가장 최근부터).

#컬럼정렬표시 / 의미
1시각180pxdesc defaulttimestamp.iso 또는 raw timestamp — 중앙 정렬
2태그 ID180px검색한 태그 ID — 중앙 정렬
3* (가변)타입에 따라 정렬이 달라집니다 — integer/long/float/double우측, boolean/string 등은 중앙 (UI-DESIGN 의 표 값 정렬 규칙) — 굵은 글씨
4타입100pxformatTypeBadge() 로 만든 색 뱃지 (예: STRING / INT / DOUBLE / BOOL)
5품질70pxOPC quality code (예: 192=Good). 비면 빈 칸
6에러70pxerror_code 가 0/null 이면 (회색), 그 외에는 빨강 코드 표시

페이지 길이: 10 / 20 / 50 / 100 / 1000 — 기본 100. 한국어 인터페이스 (Korean.json).


5. CSV 다운로드

우측 상단 CSV 다운로드 버튼 — point.csv() 호출.

  • 로컬 export — 마지막 검색 결과 (point._lastData) 를 클라이언트 측에서 CSV 로 변환 → 즉시 다운로드. 서버 추가 호출 없음
  • 파일명: point_<TAG_ID>_<TIMESTAMP>.csv 형태 (예: point_TAG_LS_XBC_0001_20260510_1530.csv)
  • 컬럼: 시각 / 태그 ID / 값 / 타입 / 품질 / 에러 — UI 표와 동일
검색 결과가 없는데 CSV 누르면

"먼저 검색해 주십시오." 안내 모달 — 빈 CSV 발급 방지.


6. 데이터 출처

화면이 조회하는 백엔드 흐름:

PLC → Collector → PointProcessor → Cassandra: tm_tag_point (TTL = edge.ttl 일)

/point/search?tag_id&from&to
  • TTL 만료된 데이터는 더 이상 조회되지 않습니다. app.propertiesedge.ttl 기본 30 일.
  • tm_tag_point 의 row 는 (tag_id, time_bucket, time) 클러스터링 — 짧은 기간 검색이 빠릅니다. 한 달 이상 한 번에 긁으면 응답이 느려질 수 있어 수십 분 ~ 몇 시간 단위 권장.

7. 운영 팁

  • 이상 값 추적: 알람이 떴던 시각을 검색 기간 안에 두고 그 태그를 조회 — 갑작스런 spike / 0 값 / quality 변화가 보입니다
  • PLC 통신 끊김: 동일 태그의 에러 컬럼이 일정 시간 빨강 코드로 도배되어 있으면 PLC 응답 실패 구간 — /ui/connect/list 에서 수집 상태 와 교차 확인
  • CSV 후 Excel: 다운로드 받은 CSV 를 Excel/LibreOffice 에서 열고 컬럼으로 추세 차트를 그리면 빠른 시각화 — 본격 차트는 실시간 값 보기 또는 태그 값 추이 보기 활용

8. 관련 문서