Sparkplug B and unified namespace

Hello there,

I’m trying to learn about Sparkplug B, and unified namespaces. I want to test this out for my home brewery, which consists of 3 PLCs.

So in order to make this unified namespace, how should I name the Group ID, Edge Node ID and Device ID etc? I want to make it the same way it would have been done profesionally/ for industry.

I assume that Group ID should be “Brewery” for all PLCs? And device ID should be i.e “Wago PLC”, “Siemens PLC” etc? What about edge node id?

I get to publish data fra the PLC, but how should I do about i.e temperature setpoint? This value is published from the PLC. But obviously it also needs to be changed from ignition. Should ignition publish back to the same tag, or publish to a sperate tag, that the PLC should subscribe to?

As you understand, I’m a little confused here. So any advice is very appreciated :slight_smile:

The original idea behind Sparkplug IDs was something like this:

  • Group ID: A meaningful group of Edge Nodes - in your case that could be ‘ACME Brewery’ to allow for future breweries
  • Edge Node ID: An aggregation of devices - in your case that could be ‘Ignition 1’ to allow for additional Ignition instances at the brewery in the future
  • Device ID: a physical or logical device - in your case ‘Wago PLC’ could make sense.

For how to arrange this - see this doc: MQTT Transmission Transmitters and Tag Trees - MQTT Modules for Ignition 8.x - Confluence

For basic end to end connection setup - see this doc: Getting Started: Two Ignition Architecture - MQTT Modules for Ignition 8.x - Confluence

Thank you so much, that makes sense. I will read through your links and test it out. Regarding writing setpoint, on/off etc from ignition to PLC. Whats the most common way of doing that using MQTT-sparkplugB?

A: Write to the same tag that the PLC publishes.

B: Write to a seperate tag, that PLC subscribes to

C: Something else?

Writing to takes is automatic via MQTT Engine and Transmission. The flow is like this:

  • Write to a tag in MQTT Engine
  • This results in a Sparkplug CMD to the Edge (Transmission)
  • Transmission receives the write - which results in a write via the Ignition driver as if the write was performed locally
  • If the write was successful, the write will ultimately be reflected in the Edge side tag
  • This results in a DATA message sent back to MQTT Engine where the value gets updated.

There are some caveats in that this feature can be disabled at either Transmission or Engine or both. Also security can be used as well. These docs should explain a lot of the caveats:
https://docs.chariot.io/display/CLD80/Enable+Device+Writes+from+Ignition
https://docs.chariot.io/display/CLD80/Ignition+MQTT+Security+Context