본문으로 건너뛰기

Sparkplug B 노드 자세히 사용하기

node-red-contrib-sparkplug-b 또는 node-red-contrib-mqtt-sparkplug-plus 같은 노드 셋이 있습니다. 같은 MQTT 브로커 위에 동작하지만 Sparkplug B 스펙 (spBv1.0/... 토픽 + protobuf payload + birth/death 시퀀스) 을 자동 처리해줍니다.

게이트웨이는 Sparkplug B 송신 을 자체 컴포넌트로 이미 구현하고 있지만 (advanced/sparkplug 참고), Node-RED 에서 수신/관제 또는 외부 디바이스 흉내 를 만들 때 사용합니다.

2026.05+ 박스의 broker 연결 정보
  • Broker: 127.0.0.1:1883 (HiveMQ, 같은 컨테이너 안)
  • Username / Password: app.propertiesmqtt.server.user / mqtt.server.password — 양산 박스는 install.sh 가 박스마다 random 생성 (/etc/kopens/credentials.txt 에서 확인). HiveMQ auth.properties 는 entrypoint 가 매 부팅 시 app.properties 와 자동 sync.
  • Group ID / Edge Node ID: 비우면 edge.site_id / edge.id 자동 사용 (예: SITE_00001 / EDGE_00303)
  • Sparkplug 3.0.0 spec 호환 (NBIRTH seq=0, DDEATH/NDEATH bdSeq, Properties, alias 옵션)

1. 핵심 개념

용어의미
Group ID묶음 (예: Plant1)
Edge Node ID한 게이트웨이/디바이스의 식별자
Device ID그 아래의 개별 장비 — 선택
Metric태그 한 개에 해당 (Sparkplug 의 메트릭)
Birth (NBIRTH/DBIRTH)노드/디바이스가 자기 메트릭 “전체 정의” 를 한 번에 publish — 구독자가 즉시 동기화
Data (NDATA/DDATA)평소의 값 변경 — 변경된 메트릭만 (delta)
Death (NDEATH/DDEATH)자기가 살아있다고 LWT 로 등록한 메시지 — 끊기면 자동 발행

2. 기본 발행 플로우 (Edge → Cloud)

inject (5s) ─▶ 태그값 읽기 ─▶ function (Sparkplug 메트릭 변환) ─▶ sparkplug device out

function:

return {
payload: {
metrics: [{
name: msg.payload.tag_id, // "TAG_TEST_00042"
type: 'Int32',
value: parseInt(msg.payload.value, 10),
timestamp: Date.now()
}]
}
};

sparkplug device out (또는 mqtt-sparkplug device) 설정:

항목값 (예)
Group IDPlant1
Edge Node IDEDGE_00303
Device ID(생략 가능 — Edge 레벨로 직접 publish)
Broker(위 MQTT 에서 만든 broker 그대로 재사용)

Birth/Death 는 노드가 알아서 처리합니다 — Deploy 시점에 NBIRTH 발행, 노드가 stop/crash 되면 NDEATH 가 LWT 로 발행.


3. 수신 플로우 (Cloud / 관제 → Edge 들 모니터)

sparkplug client in (Group=Plant1) ─▶ switch (msg.topic 으로 분기) ─▶ ...

sparkplug client in 한 노드가 spBv1.0/Plant1/... 토픽 전체를 구독하고, 메시지 종류(NBIRTH/NDATA/NDEATH/DBIRTH/...) 를 자동 파싱해서 msg.command / msg.payload.metrics 로 정리해 줍니다.

분기 예 (switch):

조건처리
msg.command === 'NBIRTH'디바이스 메타 DB 동기화 — 메트릭 카탈로그 업데이트
msg.command === 'NDATA'InfluxDB / Cassandra 등에 시계열 저장
msg.command === 'NDEATH'알림 — “EDGE_00303 끊김”

4. Sparkplug 사용 시 주의

  • 메트릭 이름은 BIRTH 와 DATA 가 일치 해야 합니다 (이름 바뀌면 다음 BIRTH 부터 시작).
  • 같은 Group/Edge Node ID 로 동시에 여러 클라이언트가 발행하면 seq number 가 충돌해 Stale 처리됩니다 — Edge ID 는 게이트웨이별로 고유하게.
  • Cloud 측에서 Rebirth Request 를 보내면 NBIRTH 를 다시 발행해야 합니다 — 라이브러리가 자동 처리하지만, 직접 만들 경우 구현 필요.

5. 다음 단계