ORBIT · 실습 매뉴얼

폰 데이터 대시보드 만들기

SensorSpot 앱과 데모 페이지가 보낸 폰 센서 값을 ThingsBoard 대시보드에 띄웁니다. KCFT 테넌트(seihoon61@gmail.com) 기준이며, 이 서버(ThingsBoard 4.3.1.3, 한국어)의 실제 메뉴·위젯·프로파일 이름으로 썼습니다.

서버 준비는 이미 끝나 있고, 지금 데이터가 들어오고 있습니다.

디바이스Myphone · 프로파일 Smartphone MQTT
규칙 체인Smartphone Rule Chain — Filter → Parse Accelerometer → save
확인된 수신accelerometer_x/y/z, gyroscope_x/y/z

SensorSpot 은 정상 동작 중입니다. 규칙 체인의 Parse Accelerometerandroid.sensor.* 페이로드를 축별로 풀어 저장합니다. 그리고 그 스크립트는 그 밖의 페이로드는 손대지 않고 통과시키므로, 데모 페이지가 보내는 특징량도 그대로 저장됩니다 — 둘을 한 화면에서 볼 수 있습니다.

0올라오는 값 두 갈래

SensorSpot 앱 — 원시 3축

앱을 켜면 바로 올라옵니다. 그래프는 잘 보이지만 진단으로는 이어지지 않습니다 — 초당 수십 개의 원시 값일 뿐입니다.

단위
accelerometer_x/y/z가속도 3축m/s²
gyroscope_x/y/z각속도 3축rad/s

데모 페이지 — 특징량 (권장)

데모 페이지의 📱 스마트폰 센서 탭에서 ThingsBoard 로 전송 시작을 누르면 올라갑니다. 실제 설비도 이렇게 보냅니다.

단위위젯 추천
vib_rms_h진동 실효값 — 세기가속도(정규화)시계열 차트 · 게이지
vib_kurtosis_h첨도 — 충격성. 정상은 3 부근시계열 차트
vib_crest_h파고율 — 피크/실효값시계열 차트
vib_p2p_h피크-피크 진폭가속도(정규화)카드
sensor_fs표본율 — 폰 센서는 보통 60Hz카드
sensor_n이번 측정의 표본 수카드
sensor_axis채널(a 가속도 / g 자이로)글자카드

왜 원시 3축이 아니라 특징량인가. 서울교통공사 2,756대를 1분마다 재면 원파형은 하루 95 GB, 특징량은 0.9 GB 입니다(실측). 그리고 RMS·첨도라야 이상탐지·부위 판정으로 이어집니다. 원시 3축은 무엇이 들어오는지 눈으로 보는 용도입니다.

1디바이스 준비와 토큰

이미 있는 PHONE-01 을 써도 되고, 설비에 붙일 것이면 포털에서 새로 만드는 편이 낫습니다.

이미 있는 디바이스를 쓸 때

  1. 왼쪽 메뉴 디바이스Myphone 클릭
  2. 오른쪽 패널에서 자격 증명 관리액세스 토큰 복사

새로 만들 때 (권장)

  1. ORBIT 포털 → 설비 목록 → 역 선택 → 설비 한 대 클릭
  2. 새 센서 등록 + 부착 — 기기가 만들어지고 토큰과 QR 이 그 자리에 뜹니다

2데이터가 올라오는지 먼저 확인

대시보드를 만들기 전에 값이 실제로 도착하는지 봐야 합니다. 여기서 안 보이면 대시보드에서도 안 보입니다.

  1. 폰으로 데모 페이지를 열고 📱 스마트폰 센서 탭 선택
  2. 토큰을 붙여넣고 ThingsBoard 로 전송 시작
  3. ThingsBoard → 디바이스 → 해당 기기 → 최신 텔레메트리
  4. vib_rms_h 등이 보이고 시각이 갱신되면 성공

3대시보드 만들기 — 가져오기 (권장)

단위 설정 대화상자를 열지 마세요. ThingsBoard 4.3 의 그 대화상자는 6.8 MB 짜리 코드 묶음(gzip 1.5 MB)을 끌어옵니다. 4G 보통 속도에서 8초가 걸리고, 받은 뒤에도 압축 전 6.7 MB 를 브라우저가 파싱·실행해야 해서 화면이 무거워집니다.

타이핑이 굼뜬 것도 같은 곳입니다 — 단위 입력창에 디바운스가 없어 한 글자마다 단위 목록 전체를 다시 훑습니다. ThingsBoard 자체 코드라 우리가 고칠 수 없습니다.

그래서 단위를 미리 넣은 대시보드 파일을 만들어 뒀습니다. 가져오기 한 번이면 위젯 5개가 단위까지 붙은 채로 올라옵니다.

  1. 파일 내려받기 — https://thingsboard.codebridge.ai.kr/landing/phone-dashboard-kcft.json
  2. 왼쪽 메뉴 대시보드 → 우측 상단 +대시보드 가져오기
  3. 내려받은 파일을 올리고 가져오기
  4. 열면 끝입니다 — 엔티티 별칭·위젯·단위가 모두 들어 있습니다
위젯보여주는 것출처단위
현재 진동 세기vib_rms_h 최신값데모g
진동 세기 추이vib_rms_h 시계열데모g
측정 조건표본율 · 표본 수 · 채널데모Hz · 개
가속도 3축accelerometer_x/y/zSensorSpotm/s²
충격성첨도 · 파고율데모

엔티티 별칭은 프로파일이 Smartphone MQTT 인 기기 전부를 가리킵니다. 폰을 여러 대 붙여도 그대로 나옵니다.

위젯을 일부러 5개로 줄였습니다. 이 화면이 느린 이유가 렌더 비용이라, 위젯을 늘리면 그만큼 더 느려집니다. 자이로(gyroscope_x/y/z)를 보시려면 가속도 위젯을 복사해 키만 바꾸는 편이 낫습니다.

4직접 만들 때

구조를 익히려면 손으로 만들어 보는 것도 좋습니다. 다만 단위 칸은 건드리지 말고 위젯 제목에 단위를 적는 편이 빠릅니다.

  1. 왼쪽 메뉴 대시보드 → 우측 상단 +새 대시보드 생성
  2. 제목에 폰 센서 실습 입력 → 추가
  3. 만들어진 대시보드를 열고 우측 하단 연필(편집) 클릭

엔티티 별칭 만들기 — 이걸 먼저 해야 합니다

위젯은 "어느 기기의 값인가"를 별칭으로 가리킵니다. 이 단계를 건너뛰면 위젯이 빈 채로 남습니다.

  1. 편집 상태에서 상단 엔티티 별칭 아이콘 클릭
  2. 별칭 추가 → 이름
  3. 필터 타입 단일 엔티티 → 타입 디바이스 → 기기 선택 → 추가저장

위젯 세 개 얹기

① 시계열 차트 — 값이 어떻게 변했나

  1. 위젯 추가 → 번들 ChartsTime series chart
  2. 데이터 탭 → 엔티티 별칭 선택
  3. 키 추가: vib_rms_h, vib_kurtosis_h, vib_crest_h
  4. 추가

단위가 다른 값을 한 그래프에 겹치지 마세요. 첨도(3 부근)와 RMS(0.02 부근)를 같이 그리면 한쪽이 바닥에 깔려 안 보입니다. 축이 다르면 차트를 나누는 편이 낫습니다.

② 게이지 — 지금 세기가 얼마인가

  1. 위젯 추가 → 번들 Analogue gaugesRadial gauge
  2. 데이터 탭 → 별칭 → 키 vib_rms_h
  3. 설정 탭에서 최솟값 0, 최댓값은 기준선의 3~4배로 잡습니다

ISO 10816 구간(2.3 / 4.5 / 7.1)을 그대로 쓰지 마세요. 그 값은 속도 RMS(mm/s) 기준인데, 폰이 보내는 값은 정규화된 가속도라 단위가 다릅니다. 폰 실습에서는 "정상일 때 얼마였나"를 기준으로 잡는 게 맞습니다.

단위 칸은 비워 두세요. 그 입력창이 느린 이유는 위에 적었습니다. 단위를 꼭 보이려면 위젯 제목에 진동 세기 (g) 처럼 적는 편이 빠릅니다.

③ 카드 — 측정 조건 확인용

  1. 위젯 추가 → 번들 CardsEntities table 또는 Value card
  2. 키: sensor_fs, sensor_n, sensor_axis

표본율이 60 Hz 근처인지 보세요. 폰 기종·브라우저에 따라 30 Hz 까지 떨어지고, 그러면 같은 시간을 재도 표본이 절반입니다.

  1. 편집 상태에서 체크(저장) 클릭
  2. 우측 상단 시간 범위를 최근 15분 정도로 좁히면 실시간으로 흐르는 게 보입니다

5안 보일 때 — 실제로 겪은 것들

MQTT 앱(SensorSpot 등)이 자꾸 끊긴다

ThingsBoard 는 JSON 이 아닌 페이로드를 받으면 무시하지 않고 연결을 끊습니다. 서버 로그에 이렇게 남습니다.

Closing current session due to invalid publish msg [v1/devices/me/telemetry][1]

재현해 확인한 결과입니다.

보낸 것결과
{"vib_rms_h":1.1}✓ 저장됨
{"type":"accelerometer","values":[0.1,0.2,9.8]}✓ 저장됨 — 규칙 체인이 x/y/z 로 풀어 줍니다
0.1,0.2,9.8 (CSV)✗ 세션 종료
1.23 (숫자만)✗ 세션 종료
hello (평문)✗ 세션 종료
빈 메시지✗ 세션 종료

앱에서 페이로드 형식을 JSON 으로 바꾸고, 토픽은 정확히 v1/devices/me/telemetry 여야 합니다(뒤에 아무것도 붙이지 않습니다). 지금 KCFT 의 SensorSpot 은 이 조건을 만족해 정상 동작 중입니다accelerometer_* 가 계속 들어오고 있습니다.

위젯이 비어 있다 — 대개 엔티티 별칭을 안 만들었거나, 대시보드 시간 범위가 데이터보다 과거입니다. 시간 범위를 최근 15분으로 좁혀 보세요.

값이 한 번만 찍히고 멈춘다 — 데모의 주기를 측정할 때마다로 두면 한 번만 갑니다. 10초마다 자동으로 바꾸면 계속 재서 보냅니다.

진단 결과(이상탐지)까지 보고 싶다면 ThingsBoard 대시보드가 아니라 ORBIT 포털의 센서 상세 화면을 보세요. 기기가 쌓은 이력의 앞 20점을 기준선으로 삼아 8종 알고리즘 교차 검증을 그 자리에서 돌립니다. 규칙 체인을 손댈 필요가 없습니다.