Wat is MQTT Sparkplug B?

MQTT Sparkplug B is een open specificatie van de Eclipse Foundation die bovenop MQTT een vaste topicstructuur, een binair payloadformaat op basis van Google Protocol Buffers en regels voor de online- en offlinestatus van edge nodes en apparaten vastlegt, zodat industriële systemen van verschillende leveranciers zonder maatwerk data uitwisselen. MQTT regelt alleen het transport en laat vrij hoe topics en berichten eruitzien. Sparkplug B vult dat gat met afspraken die passen bij industriële automatisering en het Industrial Internet of Things. Versie 3.0 is sinds 2023 ook internationale norm ISO/IEC 20237.


🧠 Welk probleem lost Sparkplug B op?

Standaard MQTT biedt publish/subscribe, een lichte broker-gebaseerde architectuur en goede schaalbaarheid. Maar MQTT zegt niets over de inhoud. Elk project bedenkt daardoor eigen topicnamen, eigen JSON-formaten en eigen manieren om te zien of een apparaat nog leeft. Dat werkt in een pilot, maar niet bij tientallen leveranciers en duizenden datapunten.

Probleem met platte MQTT Gevolg Antwoord van Sparkplug B
Vrije, leverancierseigen payloads Geen interoperabiliteit Vast Protobuf-payloadformaat met datatypes
Willekeurige topicstructuur Elke koppeling is maatwerk Vaste namespace spBv1.0/...
Geen statusinformatie Onduidelijk of data actueel is Birth- en death-berichten, waarden worden STALE
Geen beschrijving van datapunten Handmatig configureren van tags Volledige metriclijst in het birth-bericht (auto-discovery)
Periodiek pollen of publiceren Onnodige netwerkbelasting Report by Exception: alleen wijzigingen versturen

Zo krijgt een SCADA-, MES- of historian-systeem dat zich op de broker abonneert direct een betrouwbaar beeld van welke apparaten er zijn, welke datapunten ze hebben en of hun waarden nog kloppen.


🕰️ Hoe is Sparkplug ontstaan?

Sparkplug werd ontwikkeld door Cirrus Link Solutions, een bedrijf dat MQTT-modules voor het SCADA-platform Ignition levert. Een eerste payloaddefinitie (Sparkplug A) was gebaseerd op het Protobuf-model van Eclipse Kura. Sparkplug B verving die al snel; Sparkplug A is in versie 3.0 uit de specificatie verwijderd.

Jaar Mijlpaal
2016 Versie 1.0 (mei) en 2.1 (december) door Cirrus Link
2019 Versie 2.2; Cirrus Link draagt Sparkplug over aan de Eclipse Foundation
2020 Eclipse Sparkplug Working Group opgericht (3 februari) met onder meer Chevron, Canary Labs, Cirrus Link, HiveMQ, Inductive Automation en ORing
2022 Sparkplug 3.0.0 (16 november) met normatieve eisen en een Technology Compatibility Kit (TCK)
2023 Publicatie als ISO/IEC 20237:2023 via de PAS-procedure van ISO/IEC JTC 1

De Eclipse Foundation blijft beheerder van de specificatie. Eclipse Tahu is de bijbehorende open-source implementatie, met bibliotheken voor onder meer Java, C, C#, Python en JavaScript. Producten die de gratis TCK doorstaan, mogen zich Sparkplug Compatible noemen.


🔧 Uit welke onderdelen bestaat een Sparkplug-architectuur?

Veldapparaten (PLC, sensor, meter)
        │
        ▼
Edge Node (gateway)  ── spBv1.0/... ──►  MQTT-server (broker)
                                              │
                         ┌────────────────────┼──────────────┐
                         ▼                    ▼              ▼
              Primary Host (SCADA)       Historian          MES
Rol Functie
Edge Node MQTT-client die data van apparaten verzamelt en publiceert, vaak een edge device of gateway
Device Fysiek of logisch apparaat achter een edge node, zoals een PLC of meter
MQTT-server De broker; MQTT 3.1.1 of 5.0, eventueel Sparkplug Aware
Host Application Consument van data, zoals een historian of dashboard
Primary Host Application De belangrijkste consument (meestal SCADA) die commando’s mag geven; per edge node is er hoogstens één

Een Sparkplug Compliant broker hoeft alleen QoS 0 en 1, retained messages en Will-berichten te ondersteunen. Een Sparkplug Aware broker bewaart daarnaast het laatste NBIRTH- en DBIRTH-bericht van elke node en biedt die retained aan op een $sparkplug-topic, zodat late abonnees direct de metriclijst kennen. Mosquitto, HiveMQ en EMQX zijn veelgebruikte brokers.


🧩 Hoe ziet de Sparkplug-topicstructuur eruit?

Elke Sparkplug-client gebruikt dezelfde opbouw:

spBv1.0/group_id/message_type/edge_node_id/[device_id]

Een voorbeeld is spBv1.0/Fabriek1/DDATA/Lijn1/PLC01. Het laatste deel ontbreekt bij berichten op nodeniveau. De specificatie adviseert korte namen, omdat het topic met elk bericht meegaat.

Berichttype Betekenis MQTT QoS / retain
NBIRTH Edge node online, met volledige metriclijst QoS 0, niet retained
NDEATH Edge node offline; vooraf geregistreerd als Last Will Will QoS 1, niet retained
DBIRTH Apparaat online, met metriclijst QoS 0, niet retained
DDEATH Apparaat offline QoS 0, niet retained
NDATA / DDATA Gewijzigde waarden van node of apparaat QoS 0, niet retained
NCMD / DCMD Commando naar node of apparaat QoS 0, niet retained
STATE Status van een host application op spBv1.0/STATE/host_id QoS 1, retained

Deze vaste structuur is technisch van aard. Voor een Unified Namespace combineren veel organisaties Sparkplug daarom met een leesbare, op ISA-95 gebaseerde hiërarchie van site, gebied en lijn.


🔄 Hoe werken birth, death en state awareness?

De kracht van Sparkplug zit in het toestandsbeheer:

  • Birth certificate - bij het opstarten publiceert een edge node een NBIRTH met al zijn metrics, datatypes en actuele waarden. Een host hoeft niets handmatig te configureren.
  • Death certificate - de edge node registreert bij het verbinden een NDEATH als MQTT Last Will. Valt de verbinding weg, dan publiceert de broker dat bericht en zet de host alle waarden van die node op STALE.
  • bdSeq en seq - een birth/death-volgnummer koppelt elk NDEATH aan het juiste NBIRTH. De overige berichten van een edge node krijgen bovendien een volgnummer (seq) van 0 tot en met 255 dat daarna weer bij 0 begint, zodat een host gemiste berichten opmerkt.
  • Rebirth - mist een host berichten, dan stuurt hij een NCMD met de metric Node Control/Rebirth. De edge node publiceert dan opnieuw al zijn birth-berichten. Dat is een vorm van automatische recovery.
  • Primary host STATE - de primaire host publiceert een JSON-bericht met online en een tijdstempel. Een edge node kan data lokaal bufferen zolang de host offline is (store-and-forward) en die later als historische waarden versturen.

Na het birth-bericht werkt Sparkplug volgens Report by Exception: alleen gewijzigde waarden worden verstuurd. Dat vermindert bandbreedte en belasting ten opzichte van periodiek uitvragen met Modbus of SNMP, en houdt de latency laag. Voor industriële processen betekent het dat een operator altijd ziet of een waarde actueel is.


📦 Hoe is een Sparkplug B-payload opgebouwd?

Een payload is een Protobuf-bericht met een tijdstempel, een volgnummer en een lijst metrics. Elke metric heeft een naam, optioneel een numerieke alias, een tijdstempel, een datatype en een waarde. Na het birth-bericht mag een node de alias gebruiken in plaats van de volledige naam, wat de berichten verder verkleint.

Categorie Datatypes in Sparkplug 3.0
Gehele getallen Int8, Int16, Int32, Int64, UInt8 tot en met UInt64
Overige basistypes Float, Double, Boolean, String, Text, DateTime
Complexe types UUID, Bytes, File, DataSet (tabel), Template (eigen objecttype)
Arrays Arrays van de getal-, Boolean-, String- en DateTime-types

Daarnaast kent een metric de vlaggen is_historical (gebufferde waarde) en is_null, en optionele properties zoals eenheden. De property Quality heeft drie waarden: 0 (BAD), 192 (GOOD) en 500 (STALE). Met templates definieert u een type, bijvoorbeeld “Pomp”, één keer en gebruikt u het voor elke pomp.


🔄 Hoe verhoudt Sparkplug B zich tot OPC UA?

Sparkplug en OPC UA worden vaak vergeleken, maar vullen elkaar in de praktijk aan.

Eigenschap MQTT Sparkplug B OPC UA
Communicatiemodel Publish/subscribe via broker Client/server, plus OPC UA PubSub
Datamodel Metrics, datasets en templates Uitgebreid objectgeoriënteerd informatiemodel
Ontdekken van data Birth-berichten Browsen van de adresruimte
Statusbewaking Ingebouwd (birth/death, STALE) Via sessies en statuscodes
Verbindingen Uitgaand van edge naar broker Meestal inkomend op de server
Norm ISO/IEC 20237:2023 IEC 62541

Een gangbaar patroon: de edge gateway leest PLC’s via OPC UA, Modbus TCP, S7 Comm of BACnet en publiceert de data als Sparkplug naar de broker. Omdat edge nodes alleen uitgaande verbindingen opzetten, is er geen inkomende poort in het OT-netwerk nodig.


🏭 Waar wordt Sparkplug B toegepast?

Systeem Rol in een Sparkplug-architectuur
PLC en edge device Databron en protocolvertaling
SCADA Primary host met commandobevoegdheid
Historian Opslag van tijdreeksen, ook gebufferde historische waarden
MES en ERP Productie- en bedrijfsdata via de broker
Unified Namespace Centrale real-time databus voor de hele organisatie

Typische toepassingen zijn OEE-monitoring en machinestatus in de productie, voorspellend onderhoud en condition monitoring, telemetrie van verspreide pompstations en tanks in de watersector, energiemeting in de energievoorziening, en HVAC in gebouwautomatisering. Binnen edge computing voert de edge node vaak ook filtering en buffering uit. Sparkplug past zo in OT-convergentie: OT-data komt zonder punt-tot-puntkoppelingen beschikbaar voor IT-toepassingen.


🔐 Hoe beveiligt u een Sparkplug-omgeving?

De Sparkplug-specificatie stelt zelf geen normatieve securityeisen en verwijst naar MQTT en TCP/IP. Cybersecurity hangt dus volledig af van hoe u broker en clients inricht.

Risico Impact
Onbeveiligde broker zonder authenticatie Meelezen en manipuleren van procesdata
Gestolen clientcredentials Ongeautoriseerde toegang
Rogue publisher die een andere node nabootst Valse OT-data in SCADA en historian
Misbruik van NCMD/DCMD Ongewenste schrijfacties naar besturingen
Uitval of compromittering van de broker Centrale storing in de dataketen

Mitigerende maatregelen:

Voor organisaties onder de Cyberbeveiligingswet valt een broker die OT-data verdeelt binnen de risicobeheersmaatregelen die de wet vraagt.


🧭 Hoe pakt u een Sparkplug-implementatie aan?

  1. Kies een afgebakende use case - bijvoorbeeld OEE van één lijn of bewaking van tien pompstations.
  2. Ontwerp de namespace - kies korte, stabiele group_id- en edge_node_id-namen, afgestemd op uw Purdue- of ISA-95-indeling.
  3. Kies broker en redundantie - zorg voor hoge beschikbaarheid met een broker-cluster of failover; de specificatie beschrijft ook edge nodes die naar de volgende broker overstappen.
  4. Definieer metrics en templates - één template per apparaattype voorkomt inconsistentie.
  5. Stel QoS en buffering in - houd de Sparkplug-QoS-regels aan en configureer store-and-forward op de edge.
  6. Test op compatibiliteit - kies componenten die de Sparkplug TCK doorstaan.
  7. Regel lifecyclebeheer - leg vast wie topics, certificaten en templates wijzigt.

Let in productie op de bekende knelpunten: de broker is zonder cluster een single point of failure, een ongecontroleerde groei van topics en metrics (topic explosion) belast broker en hosts, en elke rebirth van een grote edge node stuurt de volledige metriclijst opnieuw over het netwerk. Bewaak daarom het aantal verbindingen, berichten per seconde en rebirths per node.


❓ Veelgestelde vragen

Wat is het verschil tussen Sparkplug A en Sparkplug B?

Sparkplug A was de eerste payloaddefinitie, gebaseerd op het Protobuf-model van Eclipse Kura. Sparkplug B kwam kort daarna met een rijker datamodel met datasets, templates en properties. Sparkplug A is verouderd en staat sinds versie 3.0 niet meer in de specificatie.

Is MQTT Sparkplug B een officiële norm?

MQTT Sparkplug B versie 3.0 is in oktober 2023 gepubliceerd als internationale norm ISO/IEC 20237:2023. De ISO-norm is inhoudelijk gelijk aan Sparkplug 3.0, en de Eclipse Foundation blijft de specificatie beheren. Toekomstige versies wil zij via dezelfde PAS-procedure bij ISO/IEC indienen.

Welke MQTT-versie gebruikt Sparkplug B?

Sparkplug 3.0 werkt met MQTT 3.1.1 en MQTT 5.0. De broker hoeft alleen QoS 0 en 1, retained messages en Will-berichten te ondersteunen. Een Sparkplug Aware broker bewaart daarnaast de laatste birth-berichten van elke edge node.

Wat betekent STALE in Sparkplug B?

STALE betekent dat een waarde niet meer actueel is omdat de edge node of het apparaat offline is gegaan. Een Sparkplug host zet alle metrics op STALE zodra hij een NDEATH of DDEATH ontvangt. Zo ziet een operator direct dat hij naar oude data kijkt.

Is Sparkplug B nodig voor een Unified Namespace?

Sparkplug B is niet verplicht voor een Unified Namespace, maar levert wel vaste afspraken over topics, payloads en apparaatstatus. Omdat Sparkplug-topics technisch zijn opgebouwd, combineren veel organisaties Sparkplug voor connectiviteit met een ISA-95-topicstructuur voor gecontextualiseerde data.

Is MQTT Sparkplug B veilig?

MQTT Sparkplug B bevat zelf geen beveiligingsmechanismen en leunt op MQTT en TLS. Veilig gebruik vraagt om TLS met clientcertificaten, topic-ACL’s per edge node, beperking van commando’s tot de primary host en segmentatie van de broker in een IDMZ.


📌 Samengevat

MQTT Sparkplug B maakt van MQTT een industriële standaard door topics, Protobuf-payloads en de status van edge nodes en apparaten vast te leggen. Met birth- en death-berichten, Report by Exception en ISO/IEC 20237-status levert Sparkplug B interoperabele, zuinige en betrouwbare OT-data voor SCADA, historians en een Unified Namespace, mits u broker en clients zelf goed beveiligt.