Skip to content

Instantly share code, notes, and snippets.

@clemensv
Created April 17, 2025 12:00
Show Gist options
  • Save clemensv/25909b9022d7ca135309c1ea66714309 to your computer and use it in GitHub Desktop.
Save clemensv/25909b9022d7ca135309c1ea66714309 to your computer and use it in GitHub Desktop.

Unified Namespace and xRegistry at Contoso Autowerks

This article describes how Contoso Autowerks uses a Unified Namespace (UNS), captured formally in an CNCF xRegistry, to integrate its manufacturing systems.

Mind that this is a fictional example tro illustrate the concepts of a Unified Namespace and how CNCF xRegistry can be used to capture the metadata of the namespace.

Contoso Autowerks Factory Layout & Work Cells

At Contoso Autowerks East Plant, one continuous assembly line – Line 1 – carries the vehicle body from raw steel coil all the way through final tests. It’s organized into dedicated work cells, each performing a single phase of production:

  1. Stamping Cell

    • coilUnwinder (unwinds steel coil)
    • press (stamps panels)
    • transferRobot (moves blanks downstream)
    • scanner (measures panel geometry)
  2. Laser Cell

    • laserCutter (precision cutting and welding of stamped panels)
  3. Welding Cell

    • weldRobot (spot‑ and seam‑welding)
    • qualityCam (automated inspection of welds)
  4. Painting Cell

    • paintRobot (applies primer, base‑coat, clear‑coat)
  5. Oven Curing Cell

    • curingOven (bakes on paint layers)
  6. Paint Inspection Cell

    • inspectionScanner (checks paint film thickness)
  7. Axle Assembly Cell

    • axlePress (presses in axles)
    • torqueTool (applies specified torque)
  8. Bolt‑Tightening Cell

    • torqueStation (tightens structural bolts)
  9. Windshield Installation Cell

    • glueApplicator (applies adhesive)
    • windshieldRobot (sets and seals the windshield)
  10. Wheel Assembly Cell

    • wheelMountTool (mounts and torques wheels)
  11. CAN‑Bus Test Cell

    • canTester (runs ECU network diagnostics)
  12. Roller Test Cell

    • rollerRig (performs dynamometer runs)
  13. Water Leak Test Cell

    • leakRig (detects body leaks under water spray)

One Common Data Highway: The Unified Namespace

All machines, the MES and ERP publish and subscribe to a single MQTT broker namespace. Topics follow the plant hierarchy:

contoso/EastPlant/BodyShop/Line1/{cellName}/{assetID}/{messageID}
  • Publishers (assets, MES, ERP) send events here.
  • Subscribers (cell gateways, analytics, traceability) listen to relevant branches.
  • Cell Gateway isolates each cell’s devices, subscribing to its assets and “part boundary” events (ingress/egress), then republishes them unchanged up to the line level.

This structure lets new machines or software simply “plug in” by using the agreed topic paths—no custom interfaces required.

Message Groups & Concrete Topic Examples

Below, each cell’s message group, the events it emits, and real MQTT topic examples using our equipment names.

1. Stamping Cell (contoso.body.stamping)

Message Topic Path When
coilFeedStatus contoso/EastPlant/BodyShop/Line1/stampingCell/coilUnwinder/coilFeedStatus every 1 s: reports speed (m/min), tension (kN)
pressCycle …/stampingCell/press/pressCycle end of each press stroke (force kN, energy kJ, duration s)
blankTransfer …/stampingCell/transferRobot/blankTransfer when robot picks up blank (state, XYZ position)
panelMeasurement …/stampingCell/scanner/panelMeasurement after each geometric scan (mm dimensions, deviation)

2. Laser Cell (contoso.body.laser)

Message Topic Path When
laserProcess contoso/EastPlant/BodyShop/Line1/laserCell/laserCutter/laserProcess at start/end of each cut/weld segment (mode, power, speed, result)

3. Welding Cell (contoso.body.welding)

Message Topic Path When
robotState contoso/EastPlant/BodyShop/Line1/weldingCell/weldRobot/robotState on any state or mode change (AUTO, MANUAL, ERROR)
weldProcess …/weldingCell/weldRobot/weldProcess each spot weld (current kA, force kN, duration ms)
weldQuality …/weldingCell/qualityCam/weldQuality post‑inspection (qualityOK boolean, method)

4. Painting Cell (contoso.paint.painting)

Message Topic Path When
paintRobotState contoso/EastPlant/PaintShop/Line1/paintingCell/paintRobot/paintRobotState on robot status change (SPRAYING, CLEANING)
paintProcess …/paintingCell/paintRobot/paintProcess after each coat (coat type, flowRate, thickness)

5. Oven Curing Cell (contoso.paint.oven)

Message Topic Path When
ovenStatus contoso/EastPlant/PaintShop/Line1/ovenCell/curingOven/ovenStatus every 5 s (zone temperatures °C, humidity, conveyor speed)

6. Paint Inspection Cell (contoso.paint.inspection)

Message Topic Path When
filmMeasurement contoso/EastPlant/PaintShop/Line1/inspectionCell/inspectionScanner/filmMeasurement after spot checks (thickness µm)

7. Axle Assembly Cell (contoso.assembly.axle)

Message Topic Path When
stationState contoso/EastPlant/FinalAssembly/Line1/axleCell/axlePress/stationState on cell state transitions (IDLE→ASSEMBLING→COMPLETE)
pressProcess …/axleCell/torqueTool/pressProcess each press/torque action (action, torque Nm)

8. Bolt‑Tightening Cell (contoso.assembly.bolttightening)

Message Topic Path When
boltTightening contoso/EastPlant/FinalAssembly/Line1/boltTighteningCell/torqueStation/boltTightening after each batch of bolts (IDs, torques, angles)

9. Windshield Installation Cell (contoso.assembly.windshield)

Message Topic Path When
stationState contoso/EastPlant/FinalAssembly/Line1/windshieldCell/glueApplicator/stationState on glue start/end or error
glueProcess …/windshieldCell/glueApplicator/glueProcess after bead application (length m, continuity %)

10. Wheel Assembly Cell (contoso.assembly.wheels)

Message Topic Path When
wheelAssembly contoso/EastPlant/FinalAssembly/Line1/wheelCell/wheelMountTool/wheelAssembly post‑mount (positions[], torques[])

11. CAN‑Bus Test Cell (contoso.eol.can-test)

Message Topic Path When
diagnosticReport contoso/EastPlant/EOL/Line1/canBusTestCell/canTester/diagnosticReport after ECU network diagnostics

12. Roller Test Cell (contoso.eol.roller)

Message Topic Path When
rollerTest contoso/EastPlant/EOL/Line1/rollerTestCell/rollerRig/rollerTest post‑dynamometer run (maxSpeed km/h)

13. Water Leak Test Cell (contoso.eol.water-test)

Message Topic Path When
leakTest contoso/EastPlant/EOL/Line1/waterLeakTestCell/leakRig/leakTest after water spray (pressure bar, leakDetected)

Orchestration & Traceability

  • Cell Assignment

    • Topic:
      contoso/EastPlant/BodyShop/Line1/stampingCell/assignment
    • Event: MES → “Start workpiece WP‑1234 under order WO‑1005.”
  • Work Order Lifecycle

    • Create (ERP):
      contoso/EastPlant/BodyShop/WorkOrders/WO-1005/create
    • Status (MES):
      …/WorkOrders/WO-1005/status = "InProgress"
  • Workpiece Progress

    • Topic:
      contoso/EastPlant/BodyShop/Line1/weldingCell/workpiece/WP-1234/progress
    • Event: Welding Cell → { "stage":"SpotWeld","timestamp":"…" }
  • Part Boundaries

    • Ingress:
      …/stampingCell/transferRobot/partIngress
    • Egress:
      …/laserCell/laserCutter/partEgress

By naming each cell by function (not sequence) and using unique asset IDs only where needed, Contoso’s UNS delivers crystal‑clear, real‑time visibility and full traceability—from raw coil to finished car—without unnecessary complexity.

Managing the Unified Namespace with xRegistry

To ensure consistency, discoverability and automated validation of every MQTT topic and payload, Contoso Autowerks captures its entire Unified Namespace in an xRegistry catalog. The example registry is a single JSON document - aligned to the CNCF xRegistry specification - that formally declares:

  • Message Groups: each logical group of topics (e.g. contoso.body.stamping) with descriptions, protocol (MQTT/5.0) and references to the individual messages it contains.
  • Schemas: a JSON‑Schema draft‑07 definition for every payload (e.g. PressCycleSchema, WeldProcessSchema), grouped under schemagroups so developers and integrators know exactly which fields, types and units to expect.
  • Endpoints: abstract definitions for each cell gateway, asset device and enterprise system (MES, ERP, analytics), including usage (producer or consumer), protocol options and the message groups they publish or subscribe to.

How Contoso Uses xRegistry

  1. Machine‑Readable Contract

    • Every new robot, PLC gateway or software module imports the xRegistry document at startup. A small code library auto‑generates stub clients: MQTT topics, QoS settings and JSON serializers/deserializers. This eliminates manual ICDs and dramatically speeds up on‑boarding of new assets.
  2. Central Governance & Versioning

    • The registry lives in Git alongside PLC code and MES configurations. Schema changes (e.g. adding a new property to paintProcess) trigger a Git pull-request review, ensuring all stakeholders agree on topic, payload and version. Rollout of a new schema version is coordinated with broker configuration, preserving backwards compatibility.
  3. Automated Validation

    • At runtime, cell gateways validate every outgoing and incoming message against its declared JSON schema. Invalid payloads are rejected or flagged, preventing silent data corruption on the line. This enforces contract‑first design, reducing debugging time.
  4. Self‑Documenting API

    • The xRegistry file doubles as up‑to‑date documentation. Operations, maintenance and quality teams use a simple web UI to browse message groups, view examples of every topic path (e.g. /stampingCell/press/pressCycle) and inspect payload schemas. New engineers ramp up faster because there’s one source of truth.
  5. Interoperability & Tooling

    • Because xRegistry follows the CNCF spec, third‑party tools—such as HiveMQ’s registry explorer or custom validation scripts—integrate seamlessly. Contoso can also generate Postman collections or OpenAPI‑style docs from the same registry, providing standardized interfaces for ERP and analytics vendors.

Business Advantages

  • Reduced Integration Effort: New machines, analytics platforms or MES modules need only point to the registry—no bespoke interface contracts.
  • Higher Data Quality: Automatic schema checks catch typos, missing fields or incorrect units (e.g. mistaking kW for W) before data ever reaches the historian or dashboards.
  • Rapid Change Management: Versioned schemas in Git allow safe evolution of topics and payloads; rollbacks are trivial if a consumer breaks.
  • Enterprise‑Wide Consistency: All teams—IT, OT, quality, maintenance—work from the same curated catalog, eliminating mismatch between documentation and reality.

By combining an ISA‑95‑aligned MQTT namespace with an xRegistry catalog, Contoso Autowerks achieves a truly governed, extensible and self‑documenting integration fabric. The result is faster deployments, fewer runtime errors and complete end‑to‑end visibility from raw material to finished vehicle.

{
"messagegroups": {
"contoso.body.stamping": {
"messagegroupid": "contoso.body.stamping",
"description": "Body Shop – Stamping and panel preparation",
"protocol": "MQTT/5.0",
"messages": {
"coilFeedStatus": {
"messageid": "coilFeedStatus",
"description": "Status of coil feed (speed, tension)",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/coilFeedStatus",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.body.stamping.schemas/schemas/CoilFeedStatusSchema"
},
"pressCycle": {
"messageid": "pressCycle",
"description": "Data for a press cycle (stroke, force, energy)",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/pressCycle",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.body.stamping.schemas/schemas/PressCycleSchema"
},
"blankTransfer": {
"messageid": "blankTransfer",
"description": "Transfer of a stamped blank to the next station",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/blankTransfer",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.body.stamping.schemas/schemas/BlankTransferSchema"
},
"panelMeasurement": {
"messageid": "panelMeasurement",
"description": "Geometric measurement and tolerance check of panels",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/panelMeasurement",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.body.stamping.schemas/schemas/PanelMeasurementSchema"
}
}
},
"contoso.body.welding": {
"messagegroupid": "contoso.body.welding",
"description": "Body Shop – Welding robot cell",
"protocol": "MQTT/5.0",
"messages": {
"robotState": {
"messageid": "robotState",
"description": "State of the welding robot (auto/manual/run/error)",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/robotState",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.body.welding.schemas/schemas/RobotStateSchema"
},
"weldProcess": {
"messageid": "weldProcess",
"description": "Data for individual spot welds",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/weldProcess",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.body.welding.schemas/schemas/WeldProcessSchema"
},
"weldQuality": {
"messageid": "weldQuality",
"description": "Result of spot weld inspection",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/weldQuality",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.body.welding.schemas/schemas/WeldQualitySchema"
}
}
},
"contoso.body.laser": {
"messagegroupid": "contoso.body.laser",
"description": "Body Shop – Laser processing cell",
"protocol": "MQTT/5.0",
"messages": {
"laserProcess": {
"messageid": "laserProcess",
"description": "Laser process parameters and status",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/laserProcess",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.body.laser.schemas/schemas/LaserProcessSchema"
}
}
},
"contoso.paint.painting": {
"messagegroupid": "contoso.paint.painting",
"description": "Paint Shop – Painting robot cell",
"protocol": "MQTT/5.0",
"messages": {
"paintRobotState": {
"messageid": "paintRobotState",
"description": "State of the painting robot",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/paintRobotState",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.paint.painting.schemas/schemas/PaintRobotStateSchema"
},
"paintProcess": {
"messageid": "paintProcess",
"description": "Painting process data",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/paintProcess",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.paint.painting.schemas/schemas/PaintProcessSchema"
}
}
},
"contoso.paint.oven": {
"messagegroupid": "contoso.paint.oven",
"description": "Paint Shop – Curing oven cell",
"protocol": "MQTT/5.0",
"messages": {
"ovenStatus": {
"messageid": "ovenStatus",
"description": "Real-time oven parameters",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/ovenStatus",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.paint.oven.schemas/schemas/OvenStatusSchema"
}
}
},
"contoso.assembly.axle": {
"messagegroupid": "contoso.assembly.axle",
"description": "Final Assembly – Axle assembly cell",
"protocol": "MQTT/5.0",
"messages": {
"stationState": {
"messageid": "stationState",
"description": "State of the axle assembly cell",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/stationState",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.assembly.axle.schemas/schemas/StationStateSchema"
},
"pressProcess": {
"messageid": "pressProcess",
"description": "Press or torque process data",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/pressProcess",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.assembly.axle.schemas/schemas/PressProcessSchema"
}
}
},
"contoso.assembly.wedding": {
"messagegroupid": "contoso.assembly.wedding",
"description": "Final Assembly – Welding/tightening station",
"protocol": "MQTT/5.0",
"messages": {
"boltTightening": {
"messageid": "boltTightening",
"description": "Result of bolt tightening process",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/boltTightening",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.assembly.wedding.schemas/schemas/BoltTighteningSchema"
}
}
},
"contoso.assembly.windshield": {
"messagegroupid": "contoso.assembly.windshield",
"description": "Interior Fit‑Out – Windshield installation cell",
"protocol": "MQTT/5.0",
"messages": {
"stationState": {
"messageid": "stationState",
"description": "State of the windshield installation cell",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/stationState",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.assembly.windshield.schemas/schemas/WindshieldStationStateSchema"
},
"glueProcess": {
"messageid": "glueProcess",
"description": "Glue and placement process data",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/glueProcess",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.assembly.windshield.schemas/schemas/GlueProcessSchema"
}
}
},
"contoso.assembly.wheels": {
"messagegroupid": "contoso.assembly.wheels",
"description": "Final Assembly – Wheel assembly station",
"protocol": "MQTT/5.0",
"messages": {
"wheelAssembly": {
"messageid": "wheelAssembly",
"description": "Result of wheel assembly process",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/wheelAssembly",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.assembly.wheels.schemas/schemas/WheelAssemblySchema"
}
}
},
"contoso.eol.can-test": {
"messagegroupid": "contoso.eol.can-test",
"description": "End‑of‑Line – CAN bus diagnostic station",
"protocol": "MQTT/5.0",
"messages": {
"diagnosticReport": {
"messageid": "diagnosticReport",
"description": "Diagnostic report for ECUs",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/diagnosticReport",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.eol.can-test.schemas/schemas/DiagnosticReportSchema"
}
}
},
"contoso.eol.roller": {
"messagegroupid": "contoso.eol.roller",
"description": "End‑of‑Line – Roller dynamometer test station",
"protocol": "MQTT/5.0",
"messages": {
"rollerTest": {
"messageid": "rollerTest",
"description": "Result of roller dynamometer test",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/rollerTest",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.eol.roller.schemas/schemas/RollerTestSchema"
}
}
},
"contoso.eol.water-test": {
"messagegroupid": "contoso.eol.water-test",
"description": "End‑of‑Line – Water leak test station",
"protocol": "MQTT/5.0",
"messages": {
"leakTest": {
"messageid": "leakTest",
"description": "Result of water leak test",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/leakTest",
"qos": 0,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.eol.water-test.schemas/schemas/LeakTestSchema"
}
}
},
"contoso.cell.assignment": {
"messagegroupid": "contoso.cell.assignment",
"description": "Cell Workpiece Assignment",
"protocol": "MQTT/5.0",
"messages": {
"workpieceAssignment": {
"messageid": "workpieceAssignment",
"description": "Assignment of next workpiece and recipe to a cell",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/assignment",
"qos": 1,
"retain": true
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.cell.assignment.schemas/schemas/WorkpieceAssignmentSchema"
}
}
},
"contoso.traceability.orders": {
"messagegroupid": "contoso.traceability.orders",
"description": "Work Order events (ERP → UNS and MES → UNS)",
"protocol": "MQTT/5.0",
"messages": {
"workOrderCreate": {
"messageid": "workOrderCreate",
"description": "ERP publishes a new work order",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/WorkOrders/{orderID}/create",
"qos": 1,
"retain": true
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.traceability.orders.schemas/schemas/WorkOrderCreateSchema"
},
"workOrderStatus": {
"messageid": "workOrderStatus",
"description": "MES updates the status of a work order",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/WorkOrders/{orderID}/status",
"qos": 1,
"retain": true
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.traceability.orders.schemas/schemas/WorkOrderStatusSchema"
}
}
},
"contoso.traceability.workpiece": {
"messagegroupid": "contoso.traceability.workpiece",
"description": "Workpiece progress events (cell‑centric)",
"protocol": "MQTT/5.0",
"messages": {
"workpieceProgress": {
"messageid": "workpieceProgress",
"description": "Progress of a workpiece within a cell",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/workpiece/{workpieceID}/progress",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.traceability.workpiece.schemas/schemas/WorkpieceProgressSchema"
}
}
},
"contoso.traceability.partTransfer": {
"messagegroupid": "contoso.traceability.partTransfer",
"description": "Part transfer events (ingress/egress at cell boundaries)",
"protocol": "MQTT/5.0",
"messages": {
"partIngress": {
"messageid": "partIngress",
"description": "Part has arrived in the cell",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/partIngress",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.traceability.partTransfer.schemas/schemas/PartTransferSchema"
},
"partEgress": {
"messageid": "partEgress",
"description": "Part is leaving the cell toward the next station",
"protocoloptions": {
"topic_name": "{enterpriseID}/{siteID}/{areaID}/{productionLineID}/{workCellID}/{assetId}/partEgress",
"qos": 1,
"retain": false
},
"dataschemaformat": "JsonSchema/draft-07",
"dataschema": "#/schemagroups/contoso.traceability.partTransfer.schemas/schemas/PartTransferSchema"
}
}
}
},
"schemagroups": {
"contoso.body.stamping.schemas": {
"schemagroupid": "contoso.body.stamping.schemas",
"description": "Schemas for the stamping line and panel preparation",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"CoilFeedStatusSchema": {
"schemaid": "CoilFeedStatusSchema",
"description": "Schema for coil feed status",
"content": {
"type": "object",
"properties": {
"coilID": {
"type": "string"
},
"speed": {
"type": "number",
"unit": "m/min"
},
"tension": {
"type": "number",
"unit": "kN"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"coilID",
"speed",
"tension",
"timestamp"
]
}
},
"PressCycleSchema": {
"schemaid": "PressCycleSchema",
"description": "Schema for press cycle data",
"content": {
"type": "object",
"properties": {
"panelID": {
"type": "string"
},
"blankID": {
"type": "string"
},
"strokeCount": {
"type": "integer"
},
"force": {
"type": "number",
"unit": "kN"
},
"energy": {
"type": "number",
"unit": "kJ"
},
"duration": {
"type": "number",
"unit": "s"
},
"result": {
"type": "string",
"enum": [
"OK",
"NOK"
]
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"panelID",
"blankID",
"strokeCount",
"force",
"energy",
"duration",
"result",
"timestamp"
]
}
},
"BlankTransferSchema": {
"schemaid": "BlankTransferSchema",
"description": "Schema for transfer of a blank to the next station",
"content": {
"type": "object",
"properties": {
"panelID": {
"type": "string"
},
"transferRobotState": {
"type": "string",
"enum": [
"IDLE",
"BUSY",
"ERROR"
]
},
"robotPosition": {
"type": "object",
"properties": {
"x": {
"type": "number",
"unit": "mm"
},
"y": {
"type": "number",
"unit": "mm"
},
"z": {
"type": "number",
"unit": "mm"
}
}
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"panelID",
"transferRobotState",
"robotPosition",
"timestamp"
]
}
},
"PanelMeasurementSchema": {
"schemaid": "PanelMeasurementSchema",
"description": "Schema for geometric measurement of panels",
"content": {
"type": "object",
"properties": {
"panelID": {
"type": "string"
},
"length": {
"type": "number",
"unit": "mm"
},
"width": {
"type": "number",
"unit": "mm"
},
"height": {
"type": "number",
"unit": "mm"
},
"thickness": {
"type": "number",
"unit": "mm"
},
"deviation": {
"type": "number",
"unit": "mm"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"panelID",
"length",
"width",
"height",
"thickness",
"timestamp"
]
}
}
}
},
"contoso.body.welding.schemas": {
"schemagroupid": "contoso.body.welding.schemas",
"description": "Schemas for the welding cell in the body shop",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"RobotStateSchema": {
"schemaid": "RobotStateSchema",
"description": "Schema for welding robot state",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"AUTO",
"MANUAL",
"TEACH"
]
},
"status": {
"type": "string",
"enum": [
"IDLE",
"RUNNING",
"ERROR",
"MAINT"
]
},
"errorCode": {
"type": "integer",
"nullable": true
},
"currentProgram": {
"type": "string"
},
"moduleID": {
"type": "string"
},
"robotPosition": {
"type": "object",
"properties": {
"x": {
"type": "number",
"unit": "mm"
},
"y": {
"type": "number",
"unit": "mm"
},
"z": {
"type": "number",
"unit": "mm"
}
}
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"mode",
"status",
"timestamp"
]
}
},
"WeldProcessSchema": {
"schemaid": "WeldProcessSchema",
"description": "Schema for spot weld process data",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"weldID": {
"type": "integer"
},
"current": {
"type": "number",
"unit": "kA"
},
"force": {
"type": "number",
"unit": "kN"
},
"duration": {
"type": "integer",
"unit": "ms"
},
"energy": {
"type": "number",
"unit": "kJ"
},
"result": {
"type": "string",
"enum": [
"OK",
"NOK"
]
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"weldID",
"current",
"force",
"duration",
"result",
"timestamp"
]
}
},
"WeldQualitySchema": {
"schemaid": "WeldQualitySchema",
"description": "Schema for weld quality inspection result",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"weldID": {
"type": "integer"
},
"inspectionMethod": {
"type": "string"
},
"qualityOK": {
"type": "boolean"
},
"detail": {
"type": "string",
"nullable": true
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"weldID",
"inspectionMethod",
"qualityOK",
"timestamp"
]
}
}
}
},
"contoso.body.laser.schemas": {
"schemagroupid": "contoso.body.laser.schemas",
"description": "Schemas for the laser system in the body shop",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"LaserProcessSchema": {
"schemaid": "LaserProcessSchema",
"description": "Schema for laser process data",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"CUT",
"WELD"
]
},
"laserPower": {
"type": "number",
"unit": "kW"
},
"travelSpeed": {
"type": "number",
"unit": "mm/s"
},
"segmentID": {
"type": "string"
},
"duration": {
"type": "number",
"unit": "s"
},
"result": {
"type": "string",
"enum": [
"OK",
"NOK"
]
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"mode",
"laserPower",
"travelSpeed",
"segmentID",
"result",
"timestamp"
]
}
}
}
},
"contoso.paint.painting.schemas": {
"schemagroupid": "contoso.paint.painting.schemas",
"description": "Schemas for the paint robot in the paint shop",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"PaintRobotStateSchema": {
"schemaid": "PaintRobotStateSchema",
"description": "Schema for painting robot state",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"IDLE",
"SPRAYING",
"CLEANING",
"ERROR"
]
},
"currentColor": {
"type": "string"
},
"paintVolumeTotal": {
"type": "number",
"unit": "ml"
},
"cabineHumidity": {
"type": "number",
"unit": "%"
},
"cabineTemp": {
"type": "number",
"unit": "°C"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"status",
"currentColor",
"timestamp"
]
}
},
"PaintProcessSchema": {
"schemaid": "PaintProcessSchema",
"description": "Schema for painting process data",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"bodyID": {
"type": "string"
},
"coat": {
"type": "string",
"enum": [
"PRIMER",
"BASECOAT",
"CLEARCOAT",
"SEALER"
]
},
"flowRate": {
"type": "number",
"unit": "ml/s"
},
"atomizerRPM": {
"type": "integer",
"unit": "rpm"
},
"electrostaticKV": {
"type": "number",
"unit": "kV"
},
"filmThickness": {
"type": "number",
"unit": "µm"
},
"result": {
"type": "string",
"enum": [
"OK",
"TOUCHED_UP",
"REJECT"
]
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"bodyID",
"coat",
"flowRate",
"atomizerRPM",
"result",
"timestamp"
]
}
}
}
},
"contoso.paint.oven.schemas": {
"schemagroupid": "contoso.paint.oven.schemas",
"description": "Schemas for the curing oven in the paint shop",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"OvenStatusSchema": {
"schemaid": "OvenStatusSchema",
"description": "Schema for oven status data",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"zoneTemps": {
"type": "array",
"items": {
"type": "number",
"unit": "°C"
}
},
"humidity": {
"type": "number",
"unit": "%"
},
"conveyorSpeed": {
"type": "number",
"unit": "m/min"
},
"heaterStatus": {
"type": "string",
"enum": [
"OFF",
"HEATING",
"HOLD",
"ERROR"
]
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"zoneTemps",
"humidity",
"conveyorSpeed",
"heaterStatus",
"timestamp"
]
}
}
}
},
"contoso.assembly.axle.schemas": {
"schemagroupid": "contoso.assembly.axle.schemas",
"description": "Schemas for the axle assembly cell in final assembly",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"StationStateSchema": {
"schemaid": "StationStateSchema",
"description": "Schema for axle assembly cell state",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"moduleID": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"IDLE",
"ASSEMBLING",
"COMPLETE",
"ERROR"
]
},
"stationMode": {
"type": "string",
"enum": [
"AUTO",
"MANUAL"
]
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"status",
"stationMode",
"timestamp"
]
}
},
"PressProcessSchema": {
"schemaid": "PressProcessSchema",
"description": "Schema for press and torque process data",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"action": {
"type": "string",
"enum": [
"PRESS",
"TIGHTEN"
]
},
"element": {
"type": "string"
},
"force": {
"type": "number",
"unit": "kN",
"nullable": true
},
"displacement": {
"type": "number",
"unit": "mm",
"nullable": true
},
"torque": {
"type": "number",
"unit": "Nm",
"nullable": true
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"action",
"element",
"timestamp"
]
}
}
}
},
"contoso.assembly.wedding.schemas": {
"schemagroupid": "contoso.assembly.wedding.schemas",
"description": "Schemas for the welding/tightening station in final assembly",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"BoltTighteningSchema": {
"schemaid": "BoltTighteningSchema",
"description": "Schema for bolt tightening result",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"boltIDs": {
"type": "array",
"items": {
"type": "string"
}
},
"torques": {
"type": "array",
"items": {
"type": "number",
"unit": "Nm"
}
},
"angles": {
"type": "array",
"items": {
"type": "number",
"unit": "deg"
}
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"boltIDs",
"torques",
"angles",
"timestamp"
]
}
}
}
},
"contoso.assembly.windshield.schemas": {
"schemagroupid": "contoso.assembly.windshield.schemas",
"description": "Schemas for the windshield installation cell in interior fit‑out",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"WindshieldStationStateSchema": {
"schemaid": "WindshieldStationStateSchema",
"description": "Schema for windshield station state",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"WAITING",
"APPLYING_GLUE",
"PLACING_GLASS",
"DONE",
"ERROR"
]
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"status",
"timestamp"
]
}
},
"GlueProcessSchema": {
"schemaid": "GlueProcessSchema",
"description": "Schema for glue and placement process data",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"beadLength": {
"type": "number",
"unit": "m"
},
"beadContinuity": {
"type": "number",
"unit": "%"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"beadLength",
"beadContinuity",
"timestamp"
]
}
}
}
},
"contoso.assembly.wheels.schemas": {
"schemagroupid": "contoso.assembly.wheels.schemas",
"description": "Schemas for the wheel assembly station in final assembly",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"WheelAssemblySchema": {
"schemaid": "WheelAssemblySchema",
"description": "Schema for wheel assembly result",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"wheelPositions": {
"type": "array",
"items": {
"type": "string"
}
},
"torqueSetpoint": {
"type": "number",
"unit": "Nm"
},
"torquesAchieved": {
"type": "array",
"items": {
"type": "number",
"unit": "Nm"
}
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"wheelPositions",
"torqueSetpoint",
"torquesAchieved",
"timestamp"
]
}
}
}
},
"contoso.eol.can-test.schemas": {
"schemagroupid": "contoso.eol.can-test.schemas",
"description": "Schemas for the CAN bus diagnostic station at End‑of‑Line",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"DiagnosticReportSchema": {
"schemaid": "DiagnosticReportSchema",
"description": "Schema for ECU diagnostic report",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"VIN": {
"type": "string"
},
"ECUsTested": {
"type": "integer"
},
"networkStatus": {
"type": "string",
"enum": [
"PASS",
"FAIL"
]
},
"protocols": {
"type": "array",
"items": {
"type": "string"
}
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"VIN",
"ECUsTested",
"networkStatus",
"protocols",
"timestamp"
]
}
}
}
},
"contoso.eol.roller.schemas": {
"schemagroupid": "contoso.eol.roller.schemas",
"description": "Schemas for the roller dynamometer test at End‑of‑Line",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"RollerTestSchema": {
"schemaid": "RollerTestSchema",
"description": "Schema for roller test result",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"maxSpeed": {
"type": "number",
"unit": "km/h"
},
"maxPower": {
"type": "number",
"unit": "kW"
},
"result": {
"type": "string",
"enum": [
"PASS",
"FAIL"
]
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"maxSpeed",
"maxPower",
"result",
"timestamp"
]
}
}
}
},
"contoso.eol.water-test.schemas": {
"schemagroupid": "contoso.eol.water-test.schemas",
"description": "Schemas for the water leak test at End‑of‑Line",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"LeakTestSchema": {
"schemaid": "LeakTestSchema",
"description": "Schema for water leak test result",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"sprayDuration": {
"type": "number",
"unit": "s"
},
"waterPressure": {
"type": "number",
"unit": "bar"
},
"leakDetected": {
"type": "boolean"
},
"result": {
"type": "string",
"enum": [
"OK",
"LEAK"
]
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"sprayDuration",
"waterPressure",
"leakDetected",
"result",
"timestamp"
]
}
}
}
},
"contoso.cell.assignment.schemas": {
"schemagroupid": "contoso.cell.assignment.schemas",
"description": "Schemas for cell workpiece assignment events",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"WorkpieceAssignmentSchema": {
"schemaid": "WorkpieceAssignmentSchema",
"description": "Schema for assignment of workpiece and recipe to cell",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"recipeID": {
"type": "string"
},
"scheduledStart": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"recipeID"
]
}
}
}
},
"contoso.traceability.orders.schemas": {
"schemagroupid": "contoso.traceability.orders.schemas",
"description": "Schemas for Work Order events",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"WorkOrderCreateSchema": {
"schemaid": "WorkOrderCreateSchema",
"description": "Schema for new Work Order published by ERP",
"content": {
"type": "object",
"properties": {
"orderID": {
"type": "string"
},
"productCode": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"dueDate": {
"type": "string",
"format": "date-time"
}
},
"required": [
"orderID",
"productCode",
"quantity",
"dueDate"
]
}
},
"WorkOrderStatusSchema": {
"schemaid": "WorkOrderStatusSchema",
"description": "Schema for Work Order status update by MES",
"content": {
"type": "object",
"properties": {
"orderID": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"Received",
"Scheduled",
"InProgress",
"Completed",
"Shipped",
"OnHold"
]
},
"progress": {
"type": "number",
"minimum": 0,
"maximum": 100,
"nullable": true
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"orderID",
"status",
"timestamp"
]
}
}
}
},
"contoso.traceability.workpiece.schemas": {
"schemagroupid": "contoso.traceability.workpiece.schemas",
"description": "Schemas for Workpiece progress events",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"WorkpieceProgressSchema": {
"schemaid": "WorkpieceProgressSchema",
"description": "Schema for workpiece progress within a cell",
"content": {
"type": "object",
"properties": {
"workpieceID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"stage": {
"type": "string"
},
"stationID": {
"type": "string"
},
"productionTime": {
"type": "number",
"unit": "s",
"nullable": true
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"workpieceID",
"orderID",
"stage",
"timestamp"
]
}
}
}
},
"contoso.traceability.partTransfer.schemas": {
"schemagroupid": "contoso.traceability.partTransfer.schemas",
"description": "Schemas for part transfer events at cell boundaries",
"schema_type": "JsonSchema/draft-07",
"schemas": {
"PartTransferSchema": {
"schemaid": "PartTransferSchema",
"description": "Schema for ingress/egress of parts at cell boundary",
"content": {
"type": "object",
"properties": {
"partID": {
"type": "string"
},
"orderID": {
"type": "string"
},
"fromCellID": {
"type": "string"
},
"toCellID": {
"type": "string"
},
"transporterID": {
"type": "string",
"nullable": true
},
"timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"partID",
"orderID",
"fromCellID",
"toCellID",
"timestamp"
]
}
}
}
}
},
"endpoints": {
"abstract_body_stamping_asset.producer": {
"endpointid": "abstract_body_stamping_asset.producer",
"channel": "contoso.body.stamping.asset",
"name": "Abstract Body Stamping Asset – Producer",
"description": "Any stamping press asset publishes coilFeedStatus, pressCycle, blankTransfer, panelMeasurement",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.stamping"
]
},
"abstract_body_stamping_cell.consumer": {
"endpointid": "abstract_body_stamping_cell.consumer",
"channel": "contoso.body.stamping.cell",
"name": "Abstract Body Stamping Cell – Consumer",
"description": "Consumes asset stamping events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.stamping",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_stamping_cell.producer": {
"endpointid": "abstract_body_stamping_cell.producer",
"channel": "contoso.body.stamping.cell",
"name": "Abstract Body Stamping Cell – Producer",
"description": "Re-publishes stamping events and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.stamping",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_stamping_line.consumer": {
"endpointid": "abstract_body_stamping_line.consumer",
"channel": "contoso.body.stamping.line",
"name": "Abstract Body Stamping Line – Consumer",
"description": "Consumes cell-level stamping events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.stamping",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_stamping_line.producer": {
"endpointid": "abstract_body_stamping_line.producer",
"channel": "contoso.body.stamping.line",
"name": "Abstract Body Stamping Line – Producer",
"description": "Re-publishes stamping events and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.stamping",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_welding_asset.producer": {
"endpointid": "abstract_body_welding_asset.producer",
"channel": "contoso.body.welding.asset",
"name": "Abstract Welding Robot Asset – Producer",
"description": "Any welding robot publishes robotState, weldProcess, weldQuality",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.welding"
]
},
"abstract_body_welding_cell.consumer": {
"endpointid": "abstract_body_welding_cell.consumer",
"channel": "contoso.body.welding.cell",
"name": "Abstract Welding Cell – Consumer",
"description": "Consumes welding events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.welding",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_welding_cell.producer": {
"endpointid": "abstract_body_welding_cell.producer",
"channel": "contoso.body.welding.cell",
"name": "Abstract Welding Cell – Producer",
"description": "Re-publishes welding events and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.welding",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_welding_line.consumer": {
"endpointid": "abstract_body_welding_line.consumer",
"channel": "contoso.body.welding.line",
"name": "Abstract Welding Line – Consumer",
"description": "Consumes cell-level welding events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.welding",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_welding_line.producer": {
"endpointid": "abstract_body_welding_line.producer",
"channel": "contoso.body.welding.line",
"name": "Abstract Welding Line – Producer",
"description": "Re-publishes welding events and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.welding",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_laser_asset.producer": {
"endpointid": "abstract_body_laser_asset.producer",
"channel": "contoso.body.laser.asset",
"name": "Abstract Laser Asset – Producer",
"description": "Any laser system publishes laserProcess",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.laser"
]
},
"abstract_body_laser_cell.consumer": {
"endpointid": "abstract_body_laser_cell.consumer",
"channel": "contoso.body.laser.cell",
"name": "Abstract Laser Cell – Consumer",
"description": "Consumes laser events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.laser",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_laser_cell.producer": {
"endpointid": "abstract_body_laser_cell.producer",
"channel": "contoso.body.laser.cell",
"name": "Abstract Laser Cell – Producer",
"description": "Re-publishes laser events and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.laser",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_laser_line.consumer": {
"endpointid": "abstract_body_laser_line.consumer",
"channel": "contoso.body.laser.line",
"name": "Abstract Laser Line – Consumer",
"description": "Consumes cell-level laser events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.laser",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_body_laser_line.producer": {
"endpointid": "abstract_body_laser_line.producer",
"channel": "contoso.body.laser.line",
"name": "Abstract Laser Line – Producer",
"description": "Re-publishes laser events and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.laser",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_paint_robot_asset.producer": {
"endpointid": "abstract_paint_robot_asset.producer",
"channel": "contoso.paint.painting.asset",
"name": "Abstract Painting Robot Asset – Producer",
"description": "Any painting robot publishes paintRobotState, paintProcess",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.painting"
]
},
"abstract_painting_cell.consumer": {
"endpointid": "abstract_painting_cell.consumer",
"channel": "contoso.paint.painting.cell",
"name": "Abstract Painting Cell – Consumer",
"description": "Consumes painting events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.painting",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_painting_cell.producer": {
"endpointid": "abstract_painting_cell.producer",
"channel": "contoso.paint.painting.cell",
"name": "Abstract Painting Cell – Producer",
"description": "Re-publishes painting events and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.painting",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_painting_line.consumer": {
"endpointid": "abstract_painting_line.consumer",
"channel": "contoso.paint.painting.line",
"name": "Abstract Painting Line – Consumer",
"description": "Consumes cell-level painting events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.painting",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_painting_line.producer": {
"endpointid": "abstract_painting_line.producer",
"channel": "contoso.paint.painting.line",
"name": "Abstract Painting Line – Producer",
"description": "Re-publishes painting events and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.painting",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_oven_asset.producer": {
"endpointid": "abstract_oven_asset.producer",
"channel": "contoso.paint.oven.asset",
"name": "Abstract Curing Oven Asset – Producer",
"description": "Any curing oven publishes ovenStatus",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.oven"
]
},
"abstract_oven_cell.consumer": {
"endpointid": "abstract_oven_cell.consumer",
"channel": "contoso.paint.oven.cell",
"name": "Abstract Oven Cell – Consumer",
"description": "Consumes ovenStatus and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.oven",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_oven_cell.producer": {
"endpointid": "abstract_oven_cell.producer",
"channel": "contoso.paint.oven.cell",
"name": "Abstract Oven Cell – Producer",
"description": "Re-publishes ovenStatus and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.oven",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_oven_line.consumer": {
"endpointid": "abstract_oven_line.consumer",
"channel": "contoso.paint.oven.line",
"name": "Abstract Oven Line – Consumer",
"description": "Consumes cell-level ovenStatus and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.oven",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_oven_line.producer": {
"endpointid": "abstract_oven_line.producer",
"channel": "contoso.paint.oven.line",
"name": "Abstract Oven Line – Producer",
"description": "Re-publishes ovenStatus and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.paint.oven",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_axle_asset.producer": {
"endpointid": "abstract_axle_asset.producer",
"channel": "contoso.assembly.axle.asset",
"name": "Abstract Axle Assembly Asset – Producer",
"description": "Any axle assembly station publishes stationState and pressProcess",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.axle"
]
},
"abstract_axle_cell.consumer": {
"endpointid": "abstract_axle_cell.consumer",
"channel": "contoso.assembly.axle.cell",
"name": "Abstract Axle Assembly Cell – Consumer",
"description": "Consumes axle assembly events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.axle",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_axle_cell.producer": {
"endpointid": "abstract_axle_cell.producer",
"channel": "contoso.assembly.axle.cell",
"name": "Abstract Axle Assembly Cell – Producer",
"description": "Re-publishes axle assembly events and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.axle",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_axle_line.consumer": {
"endpointid": "abstract_axle_line.consumer",
"channel": "contoso.assembly.axle.line",
"name": "Abstract Axle Line – Consumer",
"description": "Consumes cell-level axle assembly events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.axle",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_axle_line.producer": {
"endpointid": "abstract_axle_line.producer",
"channel": "contoso.assembly.axle.line",
"name": "Abstract Axle Line – Producer",
"description": "Re-publishes axle assembly events and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.axle",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_welding_asset.producer": {
"endpointid": "abstract_welding_asset.producer",
"channel": "contoso.assembly.wedding.asset",
"name": "Abstract Welding/Tightening Asset – Producer",
"description": "Any welding/tightening station publishes boltTightening",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wedding"
]
},
"abstract_welding_cell.consumer": {
"endpointid": "abstract_welding_cell.consumer",
"channel": "contoso.assembly.wedding.cell",
"name": "Abstract Welding/Tightening Cell – Consumer",
"description": "Consumes bolt tightening events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wedding",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_welding_cell.producer": {
"endpointid": "abstract_welding_cell.producer",
"channel": "contoso.assembly.wedding.cell",
"name": "Abstract Welding/Tightening Cell – Producer",
"description": "Re-publishes bolt tightening events and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wedding",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_welding_line.consumer": {
"endpointid": "abstract_welding_line.consumer",
"channel": "contoso.assembly.wedding.line",
"name": "Abstract Welding/Tightening Line – Consumer",
"description": "Consumes cell-level bolt tightening events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wedding",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_welding_line.producer": {
"endpointid": "abstract_welding_line.producer",
"channel": "contoso.assembly.wedding.line",
"name": "Abstract Welding/Tightening Line – Producer",
"description": "Re-publishes bolt tightening events and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wedding",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_windshield_asset.producer": {
"endpointid": "abstract_windshield_asset.producer",
"channel": "contoso.assembly.windshield.asset",
"name": "Abstract Windshield Installation Asset – Producer",
"description": "Any windshield station publishes stationState and glueProcess",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.windshield"
]
},
"abstract_windshield_cell.consumer": {
"endpointid": "abstract_windshield_cell.consumer",
"channel": "contoso.assembly.windshield.cell",
"name": "Abstract Windshield Cell – Consumer",
"description": "Consumes windshield events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.windshield",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_windshield_cell.producer": {
"endpointid": "abstract_windshield_cell.producer",
"channel": "contoso.assembly.windshield.cell",
"name": "Abstract Windshield Cell – Producer",
"description": "Re-publishes windshield events and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.windshield",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_windshield_line.consumer": {
"endpointid": "abstract_windshield_line.consumer",
"channel": "contoso.assembly.windshield.line",
"name": "Abstract Windshield Line – Consumer",
"description": "Consumes cell-level windshield events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.windshield",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_windshield_line.producer": {
"endpointid": "abstract_windshield_line.producer",
"channel": "contoso.assembly.windshield.line",
"name": "Abstract Windshield Line – Producer",
"description": "Re-publishes windshield events and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.windshield",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_wheels_asset.producer": {
"endpointid": "abstract_wheels_asset.producer",
"channel": "contoso.assembly.wheels.asset",
"name": "Abstract Wheel Assembly Asset – Producer",
"description": "Any wheel assembly station publishes wheelAssembly",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wheels"
]
},
"abstract_wheels_cell.consumer": {
"endpointid": "abstract_wheels_cell.consumer",
"channel": "contoso.assembly.wheels.cell",
"name": "Abstract Wheel Assembly Cell – Consumer",
"description": "Consumes wheelAssembly events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wheels",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_wheels_cell.producer": {
"endpointid": "abstract_wheels_cell.producer",
"channel": "contoso.assembly.wheels.cell",
"name": "Abstract Wheel Assembly Cell – Producer",
"description": "Re-publishes wheelAssembly events and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wheels",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_wheels_line.consumer": {
"endpointid": "abstract_wheels_line.consumer",
"channel": "contoso.assembly.wheels.line",
"name": "Abstract Wheel Assembly Line – Consumer",
"description": "Consumes cell-level wheelAssembly events and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wheels",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_wheels_line.producer": {
"endpointid": "abstract_wheels_line.producer",
"channel": "contoso.assembly.wheels.line",
"name": "Abstract Wheel Assembly Line – Producer",
"description": "Re-publishes wheelAssembly events and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.assembly.wheels",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_can-test_asset.producer": {
"endpointid": "abstract_eol_can-test_asset.producer",
"channel": "contoso.eol.can-test.asset",
"name": "Abstract CAN‑Bus Diagnostic Asset – Producer",
"description": "Any EOL CAN‑Bus diagnostic station publishes diagnosticReport",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.can-test"
]
},
"abstract_eol_can-test_cell.consumer": {
"endpointid": "abstract_eol_can-test_cell.consumer",
"channel": "contoso.eol.can-test.cell",
"name": "Abstract EOL CAN‑Bus Test Cell – Consumer",
"description": "Consumes diagnosticReport and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.can-test",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_can-test_cell.producer": {
"endpointid": "abstract_eol_can-test_cell.producer",
"channel": "contoso.eol.can-test.cell",
"name": "Abstract EOL CAN‑Bus Test Cell – Producer",
"description": "Re-publishes diagnosticReport and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.can-test",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_can-test_line.consumer": {
"endpointid": "abstract_eol_can-test_line.consumer",
"channel": "contoso.eol.can-test.line",
"name": "Abstract EOL CAN‑Bus Test Line – Consumer",
"description": "Consumes cell-level diagnosticReport and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.can-test",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_can-test_line.producer": {
"endpointid": "abstract_eol_can-test_line.producer",
"channel": "contoso.eol.can-test.line",
"name": "Abstract EOL CAN‑Bus Test Line – Producer",
"description": "Re-publishes diagnosticReport and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.can-test",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_roller_asset.producer": {
"endpointid": "abstract_eol_roller_asset.producer",
"channel": "contoso.eol.roller.asset",
"name": "Abstract Roller Dynamometer Asset – Producer",
"description": "Any EOL roller dynamometer publishes rollerTest",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.roller"
]
},
"abstract_eol_roller_cell.consumer": {
"endpointid": "abstract_eol_roller_cell.consumer",
"channel": "contoso.eol.roller.cell",
"name": "Abstract EOL Roller Test Cell – Consumer",
"description": "Consumes rollerTest and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.roller",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_roller_cell.producer": {
"endpointid": "abstract_eol_roller_cell.producer",
"channel": "contoso.eol.roller.cell",
"name": "Abstract EOL Roller Test Cell – Producer",
"description": "Re-publishes rollerTest and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.roller",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_roller_line.consumer": {
"endpointid": "abstract_eol_roller_line.consumer",
"channel": "contoso.eol.roller.line",
"name": "Abstract EOL Roller Test Line – Consumer",
"description": "Consumes cell-level rollerTest and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.roller",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_roller_line.producer": {
"endpointid": "abstract_eol_roller_line.producer",
"channel": "contoso.eol.roller.line",
"name": "Abstract EOL Roller Test Line – Producer",
"description": "Re-publishes rollerTest and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.roller",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_water-test_asset.producer": {
"endpointid": "abstract_eol_water-test_asset.producer",
"channel": "contoso.eol.water-test.asset",
"name": "Abstract Water Leak Test Asset – Producer",
"description": "Any EOL water leak station publishes leakTest",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.water-test"
]
},
"abstract_eol_water-test_cell.consumer": {
"endpointid": "abstract_eol_water-test_cell.consumer",
"channel": "contoso.eol.water-test.cell",
"name": "Abstract EOL Water Leak Test Cell – Consumer",
"description": "Consumes leakTest and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.water-test",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_water-test_cell.producer": {
"endpointid": "abstract_eol_water-test_cell.producer",
"channel": "contoso.eol.water-test.cell",
"name": "Abstract EOL Water Leak Test Cell – Producer",
"description": "Re-publishes leakTest and part transfers at cell level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.water-test",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_water-test_line.consumer": {
"endpointid": "abstract_eol_water-test_line.consumer",
"channel": "contoso.eol.water-test.line",
"name": "Abstract EOL Water Leak Test Line – Consumer",
"description": "Consumes cell-level leakTest and part transfers",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.water-test",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"abstract_eol_water-test_line.producer": {
"endpointid": "abstract_eol_water-test_line.producer",
"channel": "contoso.eol.water-test.line",
"name": "Abstract EOL Water Leak Test Line – Producer",
"description": "Re-publishes leakTest and part transfers at line level",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.eol.water-test",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"erp_system.producer": {
"endpointid": "erp_system.producer",
"channel": "contoso.traceability.orders.order",
"name": "ERP System – Producer",
"description": "ERP publishes new work orders",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.traceability.orders"
]
},
"erp_system.consumer": {
"endpointid": "erp_system.consumer",
"channel": "contoso.traceability.orders.order",
"name": "ERP System – Consumer",
"description": "ERP subscribes to work order status updates",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.traceability.orders"
]
},
"mes_system.consumer": {
"endpointid": "mes_system.consumer",
"channel": "contoso.traceability.orders.order",
"name": "MES System – Consumer",
"description": "MES subscribes to new work orders and traceability events",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.traceability.orders",
"#/messagegroups/contoso.traceability.workpiece",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"mes_system.producer": {
"endpointid": "mes_system.producer",
"channel": "contoso.traceability.orders.order",
"name": "MES System – Producer",
"description": "MES publishes work order status and cell assignments",
"usage": "producer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.traceability.orders",
"#/messagegroups/contoso.cell.assignment"
]
},
"central_analytics": {
"endpointid": "central_analytics",
"name": "Analytics Server",
"description": "Central analytics system – subscribes to all production and traceability data",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.stamping",
"#/messagegroups/contoso.body.welding",
"#/messagegroups/contoso.body.laser",
"#/messagegroups/contoso.paint.painting",
"#/messagegroups/contoso.paint.oven",
"#/messagegroups/contoso.assembly.axle",
"#/messagegroups/contoso.assembly.wedding",
"#/messagegroups/contoso.assembly.windshield",
"#/messagegroups/contoso.assembly.wheels",
"#/messagegroups/contoso.eol.can-test",
"#/messagegroups/contoso.eol.roller",
"#/messagegroups/contoso.eol.water-test",
"#/messagegroups/contoso.traceability.orders",
"#/messagegroups/contoso.traceability.workpiece",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"central_historian": {
"endpointid": "central_historian",
"name": "Historian Database",
"description": "Central historian – subscribes to all retained state topics",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.body.stamping",
"#/messagegroups/contoso.body.welding",
"#/messagegroups/contoso.body.laser",
"#/messagegroups/contoso.paint.painting",
"#/messagegroups/contoso.paint.oven",
"#/messagegroups/contoso.assembly.axle",
"#/messagegroups/contoso.assembly.wedding",
"#/messagegroups/contoso.assembly.windshield",
"#/messagegroups/contoso.assembly.wheels",
"#/messagegroups/contoso.eol.can-test",
"#/messagegroups/contoso.eol.roller",
"#/messagegroups/contoso.eol.water-test",
"#/messagegroups/contoso.traceability.orders",
"#/messagegroups/contoso.traceability.workpiece",
"#/messagegroups/contoso.traceability.partTransfer"
]
},
"central_traceability": {
"endpointid": "central_traceability",
"name": "Traceability System",
"description": "Product traceability system – subscribes to all traceability events",
"usage": "consumer",
"protocol": "MQTT/5.0",
"protocoloptions": {
"deployed": false
},
"messagegroups": [
"#/messagegroups/contoso.traceability.orders",
"#/messagegroups/contoso.traceability.workpiece",
"#/messagegroups/contoso.traceability.partTransfer"
]
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment