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.properties의mqtt.server.user/mqtt.server.password— 양산 박스는 install.sh 가 박스마다 random 생성 (/etc/kopens/credentials.txt에서 확인). HiveMQauth.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 ID | Plant1 |
| Edge Node ID | EDGE_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. 다음 단계
- IIoT 예제 — Sparkplug B 송신
- 게이트웨이 자체 Sparkplug 컴포넌트: Sparkplug B (고급)