ISA-95 and UNS topic designer
Lay out an ISA-95 equipment hierarchy (enterprise, site, area, line, cell, assets), turn the names into MQTT topic levels with your naming rules, generate the Unified Namespace topics from tag templates, test wildcard subscriptions, and map the tree to Sparkplug B group, edge node and device IDs. Export JSON, CSV or a plain topic list. It does not connect to any broker.
Topic designer only: nothing here connects to an MQTT broker or publishes anything. The ISA-95 level names are recalled from ISA-95 / IEC 62264-1 and ISA-88 (unverified: the standards were not read here); the Sparkplug B rules follow the Eclipse Sparkplug Specification 3.0.0.
Hierarchy
Keyboard
- ↑ ↓ select, → open or go in, ← close or go out, Home End first and last
- Enter or F2 edit the name; in a field Enter or Esc returns to the tree
- Insert add a sibling, Ctrl+Enter or Shift+Insert add a child, Delete delete with its branch
- Alt+↑ ↓ move among siblings, Ctrl+D duplicate the branch, Ctrl+Z undo, Ctrl+Y redo
Runs in this browser. Data is not uploaded or stored.
Selected node
Example Electronics
example-electronics · 1 topic: _meta
No problems: every level is a valid MQTT topic level and no topic repeats.
Types after the ISA-95 role-based equipment hierarchy (IEC 62264-1): Enterprise → Site → Area → work centers (Production line, Process cell, Production unit, Storage zone) → work units (Work cell, Unit, Storage unit); ISA-88 equipment and control modules and free assets below. unverified names recalled, not read in the standards.
Import a hierarchy
Paste, open a CSV, TSV, TXT or XLSX file (up to 20 MB), or drop it on the field. Files are read in this browser only.
Enterprise, Site, Area, Line, Cell, Asset Example Electronics, Nordwerk, SMT, SMT Line 1, Printer, Example Electronics, Nordwerk, SMT, SMT Line 1, Placement, Chip shooter
1 row = 1 leaf path
Enterprise: Example Electronics
Site: Nordwerk
Area: SMT
Production line: SMT Line 1
Work cell: Printer
Work cell: AOI2 spaces or a tab per level
What will be imported
Paste rows (Enterprise, Site, Area, Line, Cell, Asset) or indented text, or open a file.
- Columns: a header row names the levels (Enterprise, Site, Area, Line, Cell, Asset; also Plant, Process cell, Production unit, Storage zone, Work cell, Unit, Storage unit, Equipment module, Control module, Machine, Asset 2 …). Without a header the columns are read in that order. Tab, “;” or “,” between cells; quotes as in CSV. An empty cell in the middle skips that level.
- Indented text: two spaces (or a tab) per level, an optional bullet (“-”, “*”, “•”), and an optional type before a colon (“Process cell: Brewhouse”); without one a node gets its parent's usual child type.
- Nodes are matched by name under the same parent: repeated paths add nothing, and “Add to the hierarchy” extends what is there. Excel files open on their first sheet; choose the sheet and columns above.
Naming rules
Order: Unicode NFC and outer spaces removed, then lower case, then ASCII (letters spelled without accents; anything but A–Z, 0–9, “-” and “_” becomes a space), then spaces → the separator, repeated separators collapsed and trimmed. Without “ASCII only” the name keeps every character, so “/”, “+”, “#” or a leading “$” are reported instead of replaced.
Type a name to see its topic level.
Names and topic levels
| Node | Type | Topic level | Check |
|---|---|---|---|
| Example Electronics | Enterprise | example-electronics | OK |
| Example Electronics / Nordwerk | Site | nordwerk | OK |
| Example Electronics / Nordwerk / SMT | Area | smt | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 1 | Production line | smt-line-1 | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 1 / Printer | Work cell | printer | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 1 / SPI | Work cell | spi | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 1 / Placement | Work cell | placement | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 1 / Placement / Chip shooter | Asset / equipment | chip-shooter | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 1 / Placement / Multi-function placer | Asset / equipment | multi-function-placer | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 1 / Reflow | Work cell | reflow | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 1 / AOI | Work cell | aoi | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 2 | Production line | smt-line-2 | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 2 / Printer | Work cell | printer | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 2 / SPI | Work cell | spi | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 2 / Placement | Work cell | placement | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 2 / Reflow | Work cell | reflow | OK |
| Example Electronics / Nordwerk / SMT / SMT Line 2 / AOI | Work cell | aoi | OK |
| Example Electronics / Nordwerk / Warehouse | Area | warehouse | OK |
| Example Electronics / Nordwerk / Warehouse / Component store | Storage zone | component-store | OK |
| Example Electronics / Nordwerk / Warehouse / Component store / Dry cabinet 1 | Storage unit | dry-cabinet-1 | OK |
| Example Electronics / Nordwerk / Warehouse / Component store / Reel tower | Storage unit | reel-tower | OK |
| Example Electronics / Südwerk | Site | sudwerk | OK |
| Example Electronics / Südwerk / SMT | Area | smt | OK |
| Example Electronics / Südwerk / SMT / SMT Line 1 | Production line | smt-line-1 | OK |
| Example Electronics / Südwerk / SMT / SMT Line 1 / Printer | Work cell | printer | OK |
| Example Electronics / Südwerk / SMT / SMT Line 1 / SPI | Work cell | spi | OK |
| Example Electronics / Südwerk / SMT / SMT Line 1 / Placement | Work cell | placement | OK |
| Example Electronics / Südwerk / SMT / SMT Line 1 / Reflow | Work cell | reflow | OK |
| Example Electronics / Südwerk / SMT / SMT Line 1 / AOI | Work cell | aoi | OK |
MQTT topic levels may hold any UTF-8 character except the null character; “/” separates levels, “+” and “#” are wildcards and cannot appear in a topic, a topic starting with “$” is the broker’s, and a topic is at most 65535 bytes. Two children of one parent with the same level would share their topics: an error.
Namespaces and tag templates
Every node gets the tags of its type’s section, of its class (Template class in the Hierarchy part) and its own tags: topic = node path / namespace / tag. A line with only a namespace (“_meta”) gives the node’s own topic in that namespace.
Unified Namespace topics
example-electronics/+/smt/+/+/telemetry/# receives 24 of 90 topics.
+ matches exactly one level (a/+/c receives a/b/c, not a/b/x/c); # matches any number of levels, including none, and must be last (a/# receives a, a/b and a/b/c). Neither matches a first level starting with “$” ($SYS/… needs a subscription that names it).
| Subscription | Receives | Topics |
|---|---|---|
| everything under Example Electronics | 90 | |
| everything of a production line “smt-line-1” in any area of Nordwerk (“+” stands for one level) | 29 | |
| the “state” topics of every child of SMT Line 1, one level down | 5 | |
| “state/mode” of every node at the depth of SMT Line 1 (each “+” is one level) | 3 | |
| every topic, except those starting with “$” | 90 | |
| the broker’s own statistics: “#” alone never matches topics starting with “$” | 0 |
| Topic | Node type | Namespace | Tag | Bytes |
|---|---|---|---|---|
| example-electronics/nordwerk/smt/smt-line-1/printer/telemetry/cycle-time | Work cell | telemetry | cycle-time | 72 |
| example-electronics/nordwerk/smt/smt-line-1/printer/telemetry/squeegee-pressure | Work cell | telemetry | squeegee-pressure | 79 |
| example-electronics/nordwerk/smt/smt-line-1/spi/telemetry/cycle-time | Work cell | telemetry | cycle-time | 68 |
| example-electronics/nordwerk/smt/smt-line-1/placement/telemetry/cycle-time | Work cell | telemetry | cycle-time | 74 |
| example-electronics/nordwerk/smt/smt-line-1/reflow/telemetry/cycle-time | Work cell | telemetry | cycle-time | 71 |
| example-electronics/nordwerk/smt/smt-line-1/reflow/telemetry/zone-temperature | Work cell | telemetry | zone-temperature | 77 |
| example-electronics/nordwerk/smt/smt-line-1/reflow/telemetry/conveyor-speed | Work cell | telemetry | conveyor-speed | 75 |
| example-electronics/nordwerk/smt/smt-line-1/aoi/telemetry/cycle-time | Work cell | telemetry | cycle-time | 68 |
| example-electronics/nordwerk/smt/smt-line-2/printer/telemetry/cycle-time | Work cell | telemetry | cycle-time | 72 |
| example-electronics/nordwerk/smt/smt-line-2/printer/telemetry/squeegee-pressure | Work cell | telemetry | squeegee-pressure | 79 |
| example-electronics/nordwerk/smt/smt-line-2/spi/telemetry/cycle-time | Work cell | telemetry | cycle-time | 68 |
| example-electronics/nordwerk/smt/smt-line-2/placement/telemetry/cycle-time | Work cell | telemetry | cycle-time | 74 |
| example-electronics/nordwerk/smt/smt-line-2/reflow/telemetry/cycle-time | Work cell | telemetry | cycle-time | 71 |
| example-electronics/nordwerk/smt/smt-line-2/reflow/telemetry/zone-temperature | Work cell | telemetry | zone-temperature | 77 |
| example-electronics/nordwerk/smt/smt-line-2/reflow/telemetry/conveyor-speed | Work cell | telemetry | conveyor-speed | 75 |
| example-electronics/nordwerk/smt/smt-line-2/aoi/telemetry/cycle-time | Work cell | telemetry | cycle-time | 68 |
| example-electronics/sudwerk/smt/smt-line-1/printer/telemetry/cycle-time | Work cell | telemetry | cycle-time | 71 |
| example-electronics/sudwerk/smt/smt-line-1/printer/telemetry/squeegee-pressure | Work cell | telemetry | squeegee-pressure | 78 |
| example-electronics/sudwerk/smt/smt-line-1/spi/telemetry/cycle-time | Work cell | telemetry | cycle-time | 67 |
| example-electronics/sudwerk/smt/smt-line-1/placement/telemetry/cycle-time | Work cell | telemetry | cycle-time | 73 |
| example-electronics/sudwerk/smt/smt-line-1/reflow/telemetry/cycle-time | Work cell | telemetry | cycle-time | 70 |
| example-electronics/sudwerk/smt/smt-line-1/reflow/telemetry/zone-temperature | Work cell | telemetry | zone-temperature | 76 |
| example-electronics/sudwerk/smt/smt-line-1/reflow/telemetry/conveyor-speed | Work cell | telemetry | conveyor-speed | 74 |
| example-electronics/sudwerk/smt/smt-line-1/aoi/telemetry/cycle-time | Work cell | telemetry | cycle-time | 67 |
Sparkplug B mapping
Topic form: spBv1.0/group_id/message_type/edge_node_id[/device_id]; STATE: spBv1.0/STATE/host_id. IDs are UTF-8 without “+”, “/” and “#”; group + edge node must be unique, a device unique under its edge node. Levels below the device (or below the edge node without devices) become folders of the metric name (“placer-1/state/status”). The mapping itself is FactoKit’s; the topic rules are the specification’s.
Sparkplug B topics
| Level | This mapping | Preset 1 | Preset 2 | Preset 3 | Preset 4 |
|---|---|---|---|---|---|
| Enterprise | dropped (not in the topic) | dropped (not in the topic) | folded into the group ID | dropped (not in the topic) | group_id |
| Site | group_id | group_id | folded into the group ID | group_id | edge_node_id |
| Area | folded into the edge node ID | folded into the edge node ID | group_id | edge_node_id | folded into the device ID |
| Work center | edge_node_id | edge_node_id | edge_node_id | device_id | device_id |
| Work unit | device_id | device_id | device_id | metric name folder | metric name folder |
| Equipment | metric name folder | metric name folder | metric name folder | metric name folder | metric name folder |
- Group = site, edge node = line, device = cell
- Group = area (enterprise and site folded in), edge node = line, device = cell
- Group = site, edge node = area, device = line (cells become metric folders)
- Group = enterprise, edge node = site, device = line (area folded into the device ID)
| Topic | Message | QoS | Retain | Node |
|---|---|---|---|---|
| spBv1.0/STATE/mes | STATE | 1 | true | Host application |
| spBv1.0/nordwerk/NBIRTH/smt_smt-line-1 | NBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 |
| spBv1.0/nordwerk/NDEATH/smt_smt-line-1 | NDEATH | 1 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 |
| spBv1.0/nordwerk/NDATA/smt_smt-line-1 | NDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 |
| spBv1.0/nordwerk/NCMD/smt_smt-line-1 | NCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-1/printer | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Printer |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-1/printer | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Printer |
| spBv1.0/nordwerk/DDATA/smt_smt-line-1/printer | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Printer |
| spBv1.0/nordwerk/DCMD/smt_smt-line-1/printer | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Printer |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-1/spi | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / SPI |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-1/spi | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / SPI |
| spBv1.0/nordwerk/DDATA/smt_smt-line-1/spi | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / SPI |
| spBv1.0/nordwerk/DCMD/smt_smt-line-1/spi | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / SPI |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-1/placement | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Placement |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-1/placement | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Placement |
| spBv1.0/nordwerk/DDATA/smt_smt-line-1/placement | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Placement |
| spBv1.0/nordwerk/DCMD/smt_smt-line-1/placement | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Placement |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-1/reflow | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Reflow |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-1/reflow | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Reflow |
| spBv1.0/nordwerk/DDATA/smt_smt-line-1/reflow | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Reflow |
| spBv1.0/nordwerk/DCMD/smt_smt-line-1/reflow | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / Reflow |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-1/aoi | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / AOI |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-1/aoi | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / AOI |
| spBv1.0/nordwerk/DDATA/smt_smt-line-1/aoi | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / AOI |
| spBv1.0/nordwerk/DCMD/smt_smt-line-1/aoi | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 1 / AOI |
| spBv1.0/nordwerk/NBIRTH/smt_smt-line-2 | NBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 |
| spBv1.0/nordwerk/NDEATH/smt_smt-line-2 | NDEATH | 1 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 |
| spBv1.0/nordwerk/NDATA/smt_smt-line-2 | NDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 |
| spBv1.0/nordwerk/NCMD/smt_smt-line-2 | NCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-2/printer | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Printer |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-2/printer | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Printer |
| spBv1.0/nordwerk/DDATA/smt_smt-line-2/printer | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Printer |
| spBv1.0/nordwerk/DCMD/smt_smt-line-2/printer | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Printer |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-2/spi | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / SPI |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-2/spi | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / SPI |
| spBv1.0/nordwerk/DDATA/smt_smt-line-2/spi | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / SPI |
| spBv1.0/nordwerk/DCMD/smt_smt-line-2/spi | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / SPI |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-2/placement | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Placement |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-2/placement | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Placement |
| spBv1.0/nordwerk/DDATA/smt_smt-line-2/placement | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Placement |
| spBv1.0/nordwerk/DCMD/smt_smt-line-2/placement | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Placement |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-2/reflow | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Reflow |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-2/reflow | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Reflow |
| spBv1.0/nordwerk/DDATA/smt_smt-line-2/reflow | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Reflow |
| spBv1.0/nordwerk/DCMD/smt_smt-line-2/reflow | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / Reflow |
| spBv1.0/nordwerk/DBIRTH/smt_smt-line-2/aoi | DBIRTH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / AOI |
| spBv1.0/nordwerk/DDEATH/smt_smt-line-2/aoi | DDEATH | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / AOI |
| spBv1.0/nordwerk/DDATA/smt_smt-line-2/aoi | DDATA | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / AOI |
| spBv1.0/nordwerk/DCMD/smt_smt-line-2/aoi | DCMD | 0 | false | Example Electronics / Nordwerk / SMT / SMT Line 2 / AOI |
| spBv1.0/nordwerk/NBIRTH/warehouse_component-store | NBIRTH | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store |
| spBv1.0/nordwerk/NDEATH/warehouse_component-store | NDEATH | 1 | false | Example Electronics / Nordwerk / Warehouse / Component store |
| spBv1.0/nordwerk/NDATA/warehouse_component-store | NDATA | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store |
| spBv1.0/nordwerk/NCMD/warehouse_component-store | NCMD | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store |
| spBv1.0/nordwerk/DBIRTH/warehouse_component-store/dry-cabinet-1 | DBIRTH | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store / Dry cabinet 1 |
| spBv1.0/nordwerk/DDEATH/warehouse_component-store/dry-cabinet-1 | DDEATH | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store / Dry cabinet 1 |
| spBv1.0/nordwerk/DDATA/warehouse_component-store/dry-cabinet-1 | DDATA | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store / Dry cabinet 1 |
| spBv1.0/nordwerk/DCMD/warehouse_component-store/dry-cabinet-1 | DCMD | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store / Dry cabinet 1 |
| spBv1.0/nordwerk/DBIRTH/warehouse_component-store/reel-tower | DBIRTH | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store / Reel tower |
| spBv1.0/nordwerk/DDEATH/warehouse_component-store/reel-tower | DDEATH | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store / Reel tower |
| spBv1.0/nordwerk/DDATA/warehouse_component-store/reel-tower | DDATA | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store / Reel tower |
| spBv1.0/nordwerk/DCMD/warehouse_component-store/reel-tower | DCMD | 0 | false | Example Electronics / Nordwerk / Warehouse / Component store / Reel tower |
| spBv1.0/sudwerk/NBIRTH/smt_smt-line-1 | NBIRTH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 |
| spBv1.0/sudwerk/NDEATH/smt_smt-line-1 | NDEATH | 1 | false | Example Electronics / Südwerk / SMT / SMT Line 1 |
| spBv1.0/sudwerk/NDATA/smt_smt-line-1 | NDATA | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 |
| spBv1.0/sudwerk/NCMD/smt_smt-line-1 | NCMD | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 |
| spBv1.0/sudwerk/DBIRTH/smt_smt-line-1/printer | DBIRTH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Printer |
| spBv1.0/sudwerk/DDEATH/smt_smt-line-1/printer | DDEATH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Printer |
| spBv1.0/sudwerk/DDATA/smt_smt-line-1/printer | DDATA | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Printer |
| spBv1.0/sudwerk/DCMD/smt_smt-line-1/printer | DCMD | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Printer |
| spBv1.0/sudwerk/DBIRTH/smt_smt-line-1/spi | DBIRTH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / SPI |
| spBv1.0/sudwerk/DDEATH/smt_smt-line-1/spi | DDEATH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / SPI |
| spBv1.0/sudwerk/DDATA/smt_smt-line-1/spi | DDATA | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / SPI |
| spBv1.0/sudwerk/DCMD/smt_smt-line-1/spi | DCMD | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / SPI |
| spBv1.0/sudwerk/DBIRTH/smt_smt-line-1/placement | DBIRTH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Placement |
| spBv1.0/sudwerk/DDEATH/smt_smt-line-1/placement | DDEATH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Placement |
| spBv1.0/sudwerk/DDATA/smt_smt-line-1/placement | DDATA | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Placement |
| spBv1.0/sudwerk/DCMD/smt_smt-line-1/placement | DCMD | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Placement |
| spBv1.0/sudwerk/DBIRTH/smt_smt-line-1/reflow | DBIRTH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Reflow |
| spBv1.0/sudwerk/DDEATH/smt_smt-line-1/reflow | DDEATH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Reflow |
| spBv1.0/sudwerk/DDATA/smt_smt-line-1/reflow | DDATA | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Reflow |
| spBv1.0/sudwerk/DCMD/smt_smt-line-1/reflow | DCMD | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / Reflow |
| spBv1.0/sudwerk/DBIRTH/smt_smt-line-1/aoi | DBIRTH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / AOI |
| spBv1.0/sudwerk/DDEATH/smt_smt-line-1/aoi | DDEATH | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / AOI |
| spBv1.0/sudwerk/DDATA/smt_smt-line-1/aoi | DDATA | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / AOI |
| spBv1.0/sudwerk/DCMD/smt_smt-line-1/aoi | DCMD | 0 | false | Example Electronics / Südwerk / SMT / SMT Line 1 / AOI |
| Metric name | Group / edge node / device | Sent in | From UNS topic |
|---|---|---|---|
| _meta | nordwerk / smt_smt-line-1 | NDATA | example-electronics/nordwerk/smt/smt-line-1/_meta |
| state/mode | nordwerk / smt_smt-line-1 | NDATA | example-electronics/nordwerk/smt/smt-line-1/state/mode |
| telemetry/oee | nordwerk / smt_smt-line-1 | NDATA | example-electronics/nordwerk/smt/smt-line-1/telemetry/oee |
| telemetry/count/good | nordwerk / smt_smt-line-1 | NDATA | example-electronics/nordwerk/smt/smt-line-1/telemetry/count/good |
| telemetry/count/total | nordwerk / smt_smt-line-1 | NDATA | example-electronics/nordwerk/smt/smt-line-1/telemetry/count/total |
| commands/start | nordwerk / smt_smt-line-1 | NDATA, NCMD | example-electronics/nordwerk/smt/smt-line-1/commands/start |
| commands/stop | nordwerk / smt_smt-line-1 | NDATA, NCMD | example-electronics/nordwerk/smt/smt-line-1/commands/stop |
| state/status | nordwerk / smt_smt-line-1 / printer | DDATA | example-electronics/nordwerk/smt/smt-line-1/printer/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-1 / printer | DDATA | example-electronics/nordwerk/smt/smt-line-1/printer/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-1 / printer | DDATA | example-electronics/nordwerk/smt/smt-line-1/printer/events/alarm |
| telemetry/squeegee-pressure | nordwerk / smt_smt-line-1 / printer | DDATA | example-electronics/nordwerk/smt/smt-line-1/printer/telemetry/squeegee-pressure |
| state/status | nordwerk / smt_smt-line-1 / spi | DDATA | example-electronics/nordwerk/smt/smt-line-1/spi/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-1 / spi | DDATA | example-electronics/nordwerk/smt/smt-line-1/spi/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-1 / spi | DDATA | example-electronics/nordwerk/smt/smt-line-1/spi/events/alarm |
| state/status | nordwerk / smt_smt-line-1 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-1/placement/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-1 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-1/placement/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-1 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-1/placement/events/alarm |
| chip-shooter/state/status | nordwerk / smt_smt-line-1 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-1/placement/chip-shooter/state/status |
| chip-shooter/telemetry/runtime | nordwerk / smt_smt-line-1 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-1/placement/chip-shooter/telemetry/runtime |
| multi-function-placer/state/status | nordwerk / smt_smt-line-1 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-1/placement/multi-function-placer/state/status |
| multi-function-placer/telemetry/runtime | nordwerk / smt_smt-line-1 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-1/placement/multi-function-placer/telemetry/runtime |
| state/status | nordwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-1/reflow/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-1/reflow/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-1/reflow/events/alarm |
| telemetry/zone-temperature | nordwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-1/reflow/telemetry/zone-temperature |
| telemetry/conveyor-speed | nordwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-1/reflow/telemetry/conveyor-speed |
| state/status | nordwerk / smt_smt-line-1 / aoi | DDATA | example-electronics/nordwerk/smt/smt-line-1/aoi/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-1 / aoi | DDATA | example-electronics/nordwerk/smt/smt-line-1/aoi/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-1 / aoi | DDATA | example-electronics/nordwerk/smt/smt-line-1/aoi/events/alarm |
| _meta | nordwerk / smt_smt-line-2 | NDATA | example-electronics/nordwerk/smt/smt-line-2/_meta |
| state/mode | nordwerk / smt_smt-line-2 | NDATA | example-electronics/nordwerk/smt/smt-line-2/state/mode |
| telemetry/oee | nordwerk / smt_smt-line-2 | NDATA | example-electronics/nordwerk/smt/smt-line-2/telemetry/oee |
| telemetry/count/good | nordwerk / smt_smt-line-2 | NDATA | example-electronics/nordwerk/smt/smt-line-2/telemetry/count/good |
| telemetry/count/total | nordwerk / smt_smt-line-2 | NDATA | example-electronics/nordwerk/smt/smt-line-2/telemetry/count/total |
| commands/start | nordwerk / smt_smt-line-2 | NDATA, NCMD | example-electronics/nordwerk/smt/smt-line-2/commands/start |
| commands/stop | nordwerk / smt_smt-line-2 | NDATA, NCMD | example-electronics/nordwerk/smt/smt-line-2/commands/stop |
| state/status | nordwerk / smt_smt-line-2 / printer | DDATA | example-electronics/nordwerk/smt/smt-line-2/printer/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-2 / printer | DDATA | example-electronics/nordwerk/smt/smt-line-2/printer/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-2 / printer | DDATA | example-electronics/nordwerk/smt/smt-line-2/printer/events/alarm |
| telemetry/squeegee-pressure | nordwerk / smt_smt-line-2 / printer | DDATA | example-electronics/nordwerk/smt/smt-line-2/printer/telemetry/squeegee-pressure |
| state/status | nordwerk / smt_smt-line-2 / spi | DDATA | example-electronics/nordwerk/smt/smt-line-2/spi/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-2 / spi | DDATA | example-electronics/nordwerk/smt/smt-line-2/spi/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-2 / spi | DDATA | example-electronics/nordwerk/smt/smt-line-2/spi/events/alarm |
| state/status | nordwerk / smt_smt-line-2 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-2/placement/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-2 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-2/placement/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-2 / placement | DDATA | example-electronics/nordwerk/smt/smt-line-2/placement/events/alarm |
| state/status | nordwerk / smt_smt-line-2 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-2/reflow/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-2 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-2/reflow/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-2 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-2/reflow/events/alarm |
| telemetry/zone-temperature | nordwerk / smt_smt-line-2 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-2/reflow/telemetry/zone-temperature |
| telemetry/conveyor-speed | nordwerk / smt_smt-line-2 / reflow | DDATA | example-electronics/nordwerk/smt/smt-line-2/reflow/telemetry/conveyor-speed |
| state/status | nordwerk / smt_smt-line-2 / aoi | DDATA | example-electronics/nordwerk/smt/smt-line-2/aoi/state/status |
| telemetry/cycle-time | nordwerk / smt_smt-line-2 / aoi | DDATA | example-electronics/nordwerk/smt/smt-line-2/aoi/telemetry/cycle-time |
| events/alarm | nordwerk / smt_smt-line-2 / aoi | DDATA | example-electronics/nordwerk/smt/smt-line-2/aoi/events/alarm |
| _meta | nordwerk / warehouse_component-store | NDATA | example-electronics/nordwerk/warehouse/component-store/_meta |
| telemetry/occupancy | nordwerk / warehouse_component-store | NDATA | example-electronics/nordwerk/warehouse/component-store/telemetry/occupancy |
| telemetry/humidity | nordwerk / warehouse_component-store / dry-cabinet-1 | DDATA | example-electronics/nordwerk/warehouse/component-store/dry-cabinet-1/telemetry/humidity |
| telemetry/humidity | nordwerk / warehouse_component-store / reel-tower | DDATA | example-electronics/nordwerk/warehouse/component-store/reel-tower/telemetry/humidity |
| telemetry/free-slots | nordwerk / warehouse_component-store / reel-tower | DDATA | example-electronics/nordwerk/warehouse/component-store/reel-tower/telemetry/free-slots |
| _meta | sudwerk / smt_smt-line-1 | NDATA | example-electronics/sudwerk/smt/smt-line-1/_meta |
| state/mode | sudwerk / smt_smt-line-1 | NDATA | example-electronics/sudwerk/smt/smt-line-1/state/mode |
| telemetry/oee | sudwerk / smt_smt-line-1 | NDATA | example-electronics/sudwerk/smt/smt-line-1/telemetry/oee |
| telemetry/count/good | sudwerk / smt_smt-line-1 | NDATA | example-electronics/sudwerk/smt/smt-line-1/telemetry/count/good |
| telemetry/count/total | sudwerk / smt_smt-line-1 | NDATA | example-electronics/sudwerk/smt/smt-line-1/telemetry/count/total |
| commands/start | sudwerk / smt_smt-line-1 | NDATA, NCMD | example-electronics/sudwerk/smt/smt-line-1/commands/start |
| commands/stop | sudwerk / smt_smt-line-1 | NDATA, NCMD | example-electronics/sudwerk/smt/smt-line-1/commands/stop |
| state/status | sudwerk / smt_smt-line-1 / printer | DDATA | example-electronics/sudwerk/smt/smt-line-1/printer/state/status |
| telemetry/cycle-time | sudwerk / smt_smt-line-1 / printer | DDATA | example-electronics/sudwerk/smt/smt-line-1/printer/telemetry/cycle-time |
| events/alarm | sudwerk / smt_smt-line-1 / printer | DDATA | example-electronics/sudwerk/smt/smt-line-1/printer/events/alarm |
| telemetry/squeegee-pressure | sudwerk / smt_smt-line-1 / printer | DDATA | example-electronics/sudwerk/smt/smt-line-1/printer/telemetry/squeegee-pressure |
| state/status | sudwerk / smt_smt-line-1 / spi | DDATA | example-electronics/sudwerk/smt/smt-line-1/spi/state/status |
| telemetry/cycle-time | sudwerk / smt_smt-line-1 / spi | DDATA | example-electronics/sudwerk/smt/smt-line-1/spi/telemetry/cycle-time |
| events/alarm | sudwerk / smt_smt-line-1 / spi | DDATA | example-electronics/sudwerk/smt/smt-line-1/spi/events/alarm |
| state/status | sudwerk / smt_smt-line-1 / placement | DDATA | example-electronics/sudwerk/smt/smt-line-1/placement/state/status |
| telemetry/cycle-time | sudwerk / smt_smt-line-1 / placement | DDATA | example-electronics/sudwerk/smt/smt-line-1/placement/telemetry/cycle-time |
| events/alarm | sudwerk / smt_smt-line-1 / placement | DDATA | example-electronics/sudwerk/smt/smt-line-1/placement/events/alarm |
| state/status | sudwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/sudwerk/smt/smt-line-1/reflow/state/status |
| telemetry/cycle-time | sudwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/sudwerk/smt/smt-line-1/reflow/telemetry/cycle-time |
| events/alarm | sudwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/sudwerk/smt/smt-line-1/reflow/events/alarm |
| telemetry/zone-temperature | sudwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/sudwerk/smt/smt-line-1/reflow/telemetry/zone-temperature |
| telemetry/conveyor-speed | sudwerk / smt_smt-line-1 / reflow | DDATA | example-electronics/sudwerk/smt/smt-line-1/reflow/telemetry/conveyor-speed |
| state/status | sudwerk / smt_smt-line-1 / aoi | DDATA | example-electronics/sudwerk/smt/smt-line-1/aoi/state/status |
| telemetry/cycle-time | sudwerk / smt_smt-line-1 / aoi | DDATA | example-electronics/sudwerk/smt/smt-line-1/aoi/telemetry/cycle-time |
| events/alarm | sudwerk / smt_smt-line-1 / aoi | DDATA | example-electronics/sudwerk/smt/smt-line-1/aoi/events/alarm |
| UNS topic | Why |
|---|---|
| example-electronics/_meta | above the edge node level (Work center): Sparkplug carries data only from edge nodes and devices |
| example-electronics/nordwerk/_meta | above the edge node level (Work center): Sparkplug carries data only from edge nodes and devices |
| example-electronics/nordwerk/smt/_meta | above the edge node level (Work center): Sparkplug carries data only from edge nodes and devices |
| example-electronics/nordwerk/warehouse/_meta | above the edge node level (Work center): Sparkplug carries data only from edge nodes and devices |
| example-electronics/sudwerk/_meta | above the edge node level (Work center): Sparkplug carries data only from edge nodes and devices |
| example-electronics/sudwerk/smt/_meta | above the edge node level (Work center): Sparkplug carries data only from edge nodes and devices |
QoS and retain from the specification: NBIRTH, NDATA, NCMD, DBIRTH, DDATA, DDEATH, DCMD QoS 0 without retain; NDEATH is the edge node’s MQTT Will (QoS 1, not retained); STATE QoS 1, retained. NBIRTH also carries bdSeq and Node Control/Rebirth.
Download offline versionSingle HTML file · v1.5 · 627 KB · works without internet
How the topics are made
The tool turns an equipment hierarchy into MQTT topic names for a Unified Namespace and into Sparkplug B group, edge node and device IDs. It only designs names: nothing connects to a broker, and the files you export are the only output.
The hierarchy (ISA-95)
- Levels after the role-based equipment hierarchy of ISA-95 / IEC 62264-1: Enterprise → Site → Area → work centers (Production line, Process cell, Production unit, Storage zone) → work units (Work cell, Unit, Storage unit). Below a work unit: the ISA-88 equipment and control modules, and “Asset / equipment”, a free type of this tool for machines and devices. Equipment levels may nest.
- Checks: a node must be below its parent’s level (a Site under a Production line is an error); a skipped level (a line straight under a site) is a warning, because that branch’s topics are one level shorter and wildcards by position (“+”) then miss it; a hierarchy that does not start at an Enterprise is a warning.
- unverified The level names were recalled from ISA-95 Part 1 and ISA-88, not read in the standards (which pair Production line with Work cell, Process cell with Unit and Storage zone with Storage unit, as recalled). The tool does not check those pairs.
Names → topic levels
- Unicode NFC; spaces at both ends removed.
- Lower case (when chosen; MQTT topics are case-sensitive, so “Line1” and “line1” would be two topics).
- ASCII only (when chosen): letters decomposed (NFKD) and their accents dropped (Š → S, é → e), a few letters spelled out (ß → ss, Ø → O, Ł → L, Æ → AE, Þ → Th), every other character except A–Z, a–z, 0–9, “-” and “_” becomes a space.
- Each run of spaces becomes the separator (“-”, “_”, or one space); repeated separators collapse to one and are removed at both ends.
A level typed under “Topic level” is used as typed (and checked). Errors: an empty level, “/” (it would split the level), “+” or “#”, a first level starting with “$”, the null character, a lone surrogate, a non-ASCII level when ASCII only is chosen, two children of one parent with the same level, a topic generated twice, a topic over 65535 bytes. Warnings: control characters and Unicode noncharacters (MQTT says they should not be used), spaces or capitals against the rules, a level longer than the limit, a topic longer than the warning size, a node whose level is also a namespace.
UNS topics
- Topic = prefix (optional) / enterprise / site / area / … / node / namespace / tag. Namespaces are your list (the example: _meta, state, telemetry, events, commands); a tag line must start with one of them.
- Templates: a section [Production line] gives every production line its tags; [class: reflow-oven] gives them to the nodes whose Template class is reflow-oven; a node’s own tags come last. A tag already given by an earlier section is not repeated.
- Subscriptions (MQTT topic filters): “+” matches exactly one level, “#” any number of levels including none and must be the last level; a filter whose first level is “+” or “#” does not match a topic starting with “$”. The tester checks the filter (a “#” not last or not alone, a “+” sharing a level) and counts the topics it receives.
Sparkplug B
- From the Eclipse Sparkplug Specification 3.0.0 (read in its source, github.com/eclipse-sparkplug/sparkplug, commit e45b610): topics spBv1.0/group_id/message_type/edge_node_id[/device_id] with NBIRTH, NDEATH, NDATA, NCMD (edge node), DBIRTH, DDEATH, DDATA, DCMD (device), and spBv1.0/STATE/sparkplug_host_id for the host application. group_id, edge_node_id and device_id are UTF-8 without “+”, “/” and “#”; group_id + edge_node_id must be unique, a device_id unique under its edge node. Metric names may use “/” as folders; . , \ @ # $ % ^ & * ( ) [ ] { } | ! ` ~ : ; ' " < > ? are discouraged in them. The specification gives no character rule for the host ID; the tool applies the same reserved characters, since it is a topic level.
- The mapping is FactoKit’s: one ISA-95 level gives the group_id, one the edge nodes and (optionally) one the devices; levels above the group are dropped or folded into the group ID, levels in between are folded into the next ID or dropped, levels below the device (or below the edge node without devices) become metric name folders. Topics of nodes above the edge node level (an area’s _meta, for example) have no place in Sparkplug B and are listed as not mapped. Tags of the command namespace are also written with NCMD / DCMD.
- The table under the mapping shows what every level becomes, for your choice and for the four presets side by side: which levels are kept as IDs, which are folded into an ID and which are lost.
Worked example (the tool’s example)
- The illustrative “Example Electronics” has 29 nodes: two sites (Nordwerk and Südwerk), SMT areas with three SMT lines of five cells (Printer, SPI, Placement, Reflow, AOI), two placers under one Placement cell, and a Warehouse area with a component store (storage zone) holding a dry cabinet and a reel tower (storage units). With the default rules (lower case, “-”, ASCII only) Südwerk becomes sudwerk and SMT Line 1 smt-line-1; no errors, no warnings.
- The templates give 90 topics, for example example-electronics/nordwerk/smt/smt-line-1/telemetry/oee and example-electronics/nordwerk/smt/smt-line-1/reflow/telemetry/zone-temperature (class reflow-oven); the longest is 93 bytes.
- Subscriptions: example-electronics/+/smt/+/+/telemetry/# receives 24 topics (telemetry of every SMT cell and placer); example-electronics/nordwerk/+/smt-line-1/# receives 29; # receives all 90 and $SYS/# none.
- Sparkplug B with preset 1 (group = site, edge node = line, device = cell, area folded with “_”): 4 edge nodes (nordwerk / smt_smt-line-1 …), 17 devices, 84 metrics and 85 topics including spBv1.0/STATE/mes; the 6 _meta topics of the enterprise, sites and areas are not mapped, and the enterprise level is lost.
Common mistakes
- Using names as typed: “SMT Line 1”, “SMT line 1” and “smt-line-1” become three topics for one line.
- Wildcards in a published topic, or “#” in the middle of a subscription (“site/#/state”): brokers refuse both.
- Topics that start with “/” or end with “/”: an empty first or last level, which subscriptions must then match too.
- Branches of different depth: “+/+/+/+/state” then misses the lines that have no area above them.
- Sparkplug IDs taken from long paths: they travel in every message; keep them short and unique.
Files
- Settings JSON (format factokit-uns-designer, version 1: the tree, the naming rules, the templates and the Sparkplug mapping), re-importable; the hierarchy as CSV in the import columns (other work center and work unit types are written as Line / Cell there) or as indented text with every type; the names CSV; the topics CSV (one row per topic: the levels, namespace, tag, Sparkplug B topic and metric, problems); a plain topic list; a topic map JSON; the Sparkplug B topics and metrics CSV and topic list. Nothing is stored in the browser.
- Files: CSV, TSV and TXT are read as if pasted (UTF-8, UTF-16, otherwise Windows-1257). XLSX: choose the sheet and the columns or a cell range; formula cells use the value Excel last saved, dates are kept as text. Files up to 20 MB are read in this browser only and never uploaded.
- XLSX files are read with SheetJS Community Edition 0.20.3, Apache License 2.0 (license), loaded only when an Excel file is opened or created.
Not verified
- The ISA-95 / IEC 62264-1 and ISA-88 level names and their pairs were recalled, not read in the standards.
- The MQTT rules (MQTT 3.1.1 and 5.0, section 4.7: lengths, forbidden characters, wildcards, “$” topics) were recalled; the specification could not be opened here. The topic matching agrees with Eclipse Paho’s topic_matches_sub on 633 cases.
- Sparkplug B: the rules above were read in the specification’s source (version 3.0.0); how brokers and host applications treat IDs the specification does not forbid (spaces, non-ASCII letters) was not tested.
Questions
- What is a Unified Namespace (UNS)?
- A Unified Namespace is one place, usually an MQTT broker, where every system of a plant publishes its current data under topics that follow the plant’s structure: enterprise/site/area/line/cell/… Instead of point-to-point connections between machines, MES, ERP and dashboards, each one publishes its own data once and subscribes to what it needs. The structure most often follows the ISA-95 equipment hierarchy, so the topic itself tells where a value comes from.
- What do “+” and “#” mean in an MQTT subscription?
- “+” stands for exactly one topic level: site/+/line1/# receives line1 of every area of the site. “#” stands for any number of levels, including none, and must be the last level: site/# receives site itself and everything below it. Both may appear only in subscriptions, never in the topic a message is published to, and neither matches a first level starting with “$”, which brokers use for their own topics such as $SYS.
- Should topic levels be lower case and without spaces?
- MQTT allows any UTF-8 text except the null character, and topics are case-sensitive, so “Line1” and “line1” are two different topics. A fixed rule, such as lower case with hyphens and ASCII letters only, avoids near-duplicates and problems in tools that handle spaces, accents or special characters badly. Whatever rule you choose, apply it to every name; this tool turns names into levels by such a rule and reports what it could not fix.
- How does the ISA-95 hierarchy map to Sparkplug B?
- A Sparkplug B topic has only three places for names: spBv1.0/group_id/message_type/edge_node_id/device_id. A common mapping takes the site as the group, a line as the edge node and a cell as the device; the enterprise is then left out (or folded into the group ID), an area between site and line is folded into the edge node ID, and assets below the cell become folders of the metric names, such as placer-1/state/status. The tool shows what each level becomes for any choice and checks the IDs: no “+”, “/” or “#”, group and edge node unique together, a device unique under its edge node.
- Does this tool connect to my broker?
- No. It designs topic names only: the hierarchy, the naming rules, the generated UNS and Sparkplug B topics and the subscriptions are computed in your browser, and the results leave it only as the files you export (JSON, CSV or a plain topic list). Use them to configure your broker, gateways or edge devices.
Related tools
- IPC-CFX message workbench: the messages an SMT line publishes, and how they are routed.
- Modbus tools: read the registers that end up as UNS tags.
- PLC data converter: turn the registers into the values you publish.