OFFLINE TOOL / UNS DESIGNER V1.5
INTEGRATION / 030OFFLINE

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.

Part

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

Example dataAn illustrative factory: replace with your own 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

    —Nodes
    —UNS topics
    —Errors
    —Warnings

    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
    Columns
    1 row = 1 leaf path
    Enterprise: Example Electronics
      Site: Nordwerk
        Area: SMT
          Production line: SMT Line 1
            Work cell: Printer
            Work cell: AOI
    Indented text
    2 spaces or a tab per level

    What will be imported

      • 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.

      Names and topic levels

      —Names changed by the rules
      —Errors
      —Warnings
      —Longest level

      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

        —Topics
        —Nodes with topics
        —Longest topic
        —Most levels

        + 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).

        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

        —Edge nodes
        —Devices
        —Metrics
        —UNS topics not mapped
          1. Group = site, edge node = line, device = cell
          2. Group = area (enterprise and site folded in), edge node = line, device = cell
          3. Group = site, edge node = area, device = line (cells become metric folders)
          4. Group = enterprise, edge node = site, device = line (area folded into the device ID)

          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.

          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)

          Names → topic levels

          1. Unicode NFC; spaces at both ends removed.
          2. Lower case (when chosen; MQTT topics are case-sensitive, so “Line1” and “line1” would be two topics).
          3. 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.
          4. 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

          Sparkplug B

          Worked example (the tool’s example)

          1. 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.
          2. 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.
          3. 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.
          4. 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

          Files

          Not verified

          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.