Industrial IoT

Ignition MQTT: Transmission- und Engine-Module mit einem Broker verbinden

Konfigurieren Sie die Ignition-Module MQTT Transmission und MQTT Engine gegen einen externen Broker, veröffentlichen Sie Tags als Sparkplug B, nutzen Sie sie wieder als Ignition-Tags und prüfen Sie die dekodierten Payloads in einem Broker-Portal.

Ignition-Gateways am Edge und in der Leitwarte, die Sparkplug-B-Tags über einen Cloud-Broker austauschen, als Darstellung von Ignition MQTT
Probieren Sie es auf Ihrem eigenen MQTT-Broker ausHolen Sie sich im Free-Tarif einen privaten, verwalteten MQTT-Broker und starten Sie mit fertigen Codebeispielen.
Kostenlos testen Codebeispiele Keine Kreditkarte erforderlich

Die Ignition-MQTT-Integration ist einer der beliebtesten Wege, eine Sparkplug-B-Architektur aufzubauen: Ein Ignition-Edge-Gateway veröffentlicht Tags, ein zentrales Ignition-Gateway nutzt sie, und dazwischen sitzt ein MQTT-Broker. In diesem Tutorial konfigurieren Sie die Module MQTT Transmission und MQTT Engine gegen einen externen statt den integrierten Broker, veröffentlichen einen Tag-Ordner als Sparkplug B, sehen die Tags auf der konsumierenden Seite erscheinen und prüfen die dekodierten Daten unabhängig davon. Rechnen Sie damit, dass alles innerhalb einer Stunde läuft.

Die Ignition-MQTT-Module

Die MQTT-Module für Ignition werden von Cirrus Link entwickelt und über Inductive Automation vertrieben. Drei davon sind hier relevant:

Modul Rolle Typischer Ort
MQTT Transmission Veröffentlicht Ignition-Tags als Sparkplug B (Edge Node) Ignition Edge oder ein Standort-Gateway
MQTT Engine Abonniert Sparkplug B und erzeugt Ignition-Tags (Primary Host) Zentrales Gateway oder Gateway in der Leitwarte
MQTT Distributor Ein MQTT-Broker, der innerhalb von Ignition läuft Optional; hier durch einen externen Broker ersetzt

Ein externer Broker statt MQTT Distributor entkoppelt Ihre Messaging-Schicht vom Lebenszyklus des Ignition-Gateways. Gateway-Neustarts, Upgrades und Lizenzierung legen den Broker nicht mehr lahm, und Nicht-Ignition-Clients wie Python-Dienste, Historians oder andere SCADA-Systeme verbinden sich gleichberechtigt mit demselben Broker. Ein Cloud-MQTT-Broker ist besonders nützlich, wenn Edge-Standorte keinen direkten Netzwerkpfad zum zentralen Gateway haben.

Voraussetzungen

  • Ignition 8.1 oder neuer: ein Gateway für Transmission (Edge) und eines für Engine (Host). Im Labor können beide Module auf demselben Gateway laufen.
  • Die Module MQTT Transmission und MQTT Engine, installiert über Config > System > Modules > Install or Upgrade a Module. Ohne Lizenz laufen sie im Testmodus, der zurückgesetzt werden kann.
  • Ein MQTT-Broker. Im Labor der öffentliche MQTT-Broker unter broker.connectmq.com, der für Tests und Prototypen gedacht ist; im Produktivbetrieb ein privater Broker mit Zugangsdaten.
  • Ausgehender Zugriff von beiden Gateways auf TCP 1883 (Tests) oder 8883 (TLS).

Schritt 1: MQTT Transmission auf den Broker ausrichten

  1. Öffnen Sie in der Weboberfläche des Ignition-Gateways Config > MQTT Transmission > Settings.
  2. Bearbeiten Sie auf dem Tab Servers den Standardserver oder legen Sie einen neuen an:
    • Name: connectmq
    • URL: tcp://broker.connectmq.com:1883 für das Labor oder ssl://YOUR_BROKER_HOST:8883 für den Produktivbetrieb
    • Username und Password: leer für den öffentlichen MQTT-Broker; YOUR_USERNAME und YOUR_PASSWORD im Produktivbetrieb
  3. Entfernen oder deaktivieren Sie jeden Servereintrag, der auf einen lokalen MQTT Distributor zeigt, damit Transmission den Verkehr nicht auf mehrere Broker verteilt.
  4. Speichern Sie. Der Serverstatus sollte innerhalb weniger Sekunden auf verbunden wechseln.

Für TLS mit einem Let's-Encrypt-Zertifikat validiert der mit Ignition gelieferte Java-Truststore die Kette normalerweise, sodass Sie meist keine CA-Datei hochladen müssen. Wenn Ihre Modulversion ein Feld für die Client-ID bietet und Ihr Broker Client-IDs an Zugangsdaten bindet, tragen Sie dort die ausgegebene YOUR_CLIENT_ID ein; jede Modulverbindung braucht eigene Zugangsdaten und eine eigene Client-ID.

Schritt 2: Die Edge-Tags anlegen

MQTT Transmission veröffentlicht Tags, die unter einem konfigurierten Tag-Pfad liegen, standardmäßig im Ordner Edge Nodes des Standard-Tag-Providers. Die Ordnerebenen darunter entsprechen den Sparkplug-Bezeichnern:

[default]Edge Nodes/
  cmqdemo-4kz9/            <- Sparkplug Group ID (eindeutig auf dem öffentlichen Broker)
    Line1/                 <- Edge Node ID
      Filler/              <- Device ID
        Temperature        (Float, Memory- oder OPC-Tag)
        Speed              (Int4)
        Running            (Boolean)
        Count              (Int8)

Auf dem öffentlichen MQTT-Broker beginnt jedes Sparkplug-Topic mit spBv1.0. Wählen Sie daher eine zufällige Group ID wie cmqdemo-4kz9, um Kollisionen mit anderen Nutzern zu vermeiden, und verwenden Sie Memory- oder Simulator-Tags statt echter Prozesswerte: Alles, was dort veröffentlicht wird, ist für jeden lesbar.

Prüfen Sie auf dem Tab Transmitters, dass der Standard-Transmitter den Tag-Provider default und den Tag-Pfad Edge Nodes verwendet und dass Primary Host ID gesetzt ist, zum Beispiel auf IgnitionHost. Mit gesetzter Primary Host ID wartet der Edge Node auf die STATE-Nachricht des Hosts, bevor er veröffentlicht, und sendet seine Births erneut, wenn der Host wieder online kommt.

Schritt 3: MQTT Engine als Primary Host konfigurieren

  1. Öffnen Sie Config > MQTT Engine > Settings.
  2. Setzen Sie auf dem Tab General die Primary Host ID auf denselben Wert, IgnitionHost. Engine veröffentlicht seine STATE-Nachricht als Retained Message und signalisiert den Edge Nodes damit, dass ein Host zuhört.
  3. Fügen Sie auf dem Tab Servers denselben Broker hinzu. Verwenden Sie im Produktivbetrieb einen anderen Satz Zugangsdaten als auf der Transmission-Seite: Zwei Module auf zwei Gateways sind zwei getrennte MQTT-Clients.
  4. Lassen Sie auf dem Tab Namespaces den Standard-Namespace für Sparkplug B aktiviert.

Speichern Sie und öffnen Sie den Designer. Unter dem Tag-Provider MQTT Engine finden Sie Edge Nodes/cmqdemo-4kz9/Line1/Filler mit allen vier Tags und ihren Werten. Ändern Sie Temperature auf der Edge-Seite, und der Engine-Tag folgt kurz darauf.

Schritt 4: Den Ignition-MQTT-Verkehr unabhängig prüfen

Wenn etwas schiefläuft, möchten Sie die Sicht des Brokers sehen, nicht nur die von Ignition. Sparkplug-B-Payloads sind Protobuf-kodiert, ein einfacher Abonnent zeigt also Binärdaten, doch schon die Topics verraten viel:

mosquitto_sub -h broker.connectmq.com -p 1883 -i ign-watch-4kz9 \
  -t 'spBv1.0/cmqdemo-4kz9/#' -t 'spBv1.0/STATE/#' -v

Sie sollten der Reihe nach sehen: die STATE-Nachricht des Hosts, NBIRTH für Line1, DBIRTH für Filler und dann DDATA-Nachrichten, sobald sich Tag-Werte ändern. Sehen Sie wiederholte Births ohne Daten, verbindet sich der Edge Node ständig neu, meist wegen eines Client-ID-Konflikts.

Um Payloads in eigenem Code zu dekodieren, folgen Sie dem Tutorial Sparkplug B mit Python dekodieren. Bei einem privaten ConnectMQ-Broker übernimmt das Portal das für Sie: Der Live-Topic-Explorer dekodiert Sparkplug B in lesbare Metriken, und der Broker kann Sparkplug-Daten in Topics im ISA-95-Stil zurückveröffentlichen. So wird zum Beispiel spBv1.0/factory1/DDATA/line1/cnc1 als connectmq/factory1/production/line1/cnc1/telemetry erneut veröffentlicht, sodass Dashboards und Skripte, die kein Sparkplug sprechen, einfache Topics abonnieren können. Genau das ist die Idee eines Unified Namespace (UNS): Die ISA-95-Gerätehierarchie (Enterprise → Site → Area → Line → Cell) wird zur Topic-Struktur auf dem Broker, etwa acme/werk-stuttgart/montage/linie-1/zelle-3/temperatur, und Ignition, MES, ERP und Analysewerkzeuge finden dort denselben aktuellen Zustand jeder Anlage. Wie Sparkplug B und UNS zusammenspielen, beschreibt der Beitrag Sparkplug B und Unified Namespace.

Der Sparkplug-Nachrichtenfluss im Überblick

Nachricht Veröffentlicht von Zweck Retained
STATE MQTT Engine (Primary Host) Host online oder offline Ja
NBIRTH / DBIRTH MQTT Transmission Vollständige Metrikliste mit Typen und aktuellen Werten Nein
NDATA / DDATA MQTT Transmission Nur geänderte Werte Nein
NDEATH Broker, als Last Will des Edge Node Edge Node offline Nein
DDEATH MQTT Transmission Gerät offline Nein
NCMD / DCMD MQTT Engine Schreibzugriffe und Rebirth-Anforderungen Nein

Wer diese Tabelle versteht, löst die meisten Ignition-MQTT-Rätsel. Tags in Engine werden bei NDEATH als veraltet markiert, und eine Rebirth-Anforderung von Engine frischt nach einer Lücke alles auf. Der Leitfaden zur Sparkplug-B-Payload erklärt die Metrikstruktur im Detail.

Wechsel in den Produktivbetrieb

Bevor Sie einen echten Standort anbinden:

  1. Einen privaten Broker mit TLS verwenden. Stellen Sie die URLs auf ssl://...:8883 um und nutzen Sie für jede Modulinstanz ausgegebene Zugangsdaten.
  2. Aussagekräftige Group- und Edge-Node-IDs wählen. Sie werden zum Rückgrat Ihres Namensraums; richten Sie sie an den ISA-95-Ebenen Ihres UNS aus, zum Beispiel die Group ID am Werk (werk-stuttgart) und die Edge Node ID an Bereich und Linie (montage-linie-1).
  3. Transmission abstimmen. Nutzen Sie Tag-Totbänder in Ignition, damit DDATA echte Änderungen transportiert, und ziehen Sie die Store-and-Forward-Optionen von Transmission für unzuverlässige Strecken in Betracht.
  4. Broker-Limits mit Ihrem Design abgleichen. Sparkplug verwendet QoS 0 für Daten und QoS 1 für STATE- und Death-Nachrichten, dazu ein Retained-STATE. Planen Sie die Verbindungsanzahl: Jede Modulinstanz auf jedem Gateway ist ein Client.
  5. Schreibzugriffe absichern. Engine kann über DCMD auf Edge-Tags schreiben. Entscheiden Sie, ob das erlaubt ist, und beschränken Sie beschreibbare Tags am Edge.
  6. Host und Edges überwachen. Alarmieren Sie bei NDEATH und wenn STATE auf offline wechselt, nicht nur bei Prozesswerten.

Wenn Sie nicht in jeder Leitwarte Broker betreiben möchten, übernimmt ConnectMQ als verwalteter MQTT-Broker Zertifikate, Updates und Flood-Schutz für Sie. Für die übergreifenden Fragen zum SCADA-Design siehe MQTT in SCADA-Systemen und den Leitfaden zu Industrial IoT mit MQTT.

Fehlerbehebung

  • Server zeigt getrennt an. Falsches URL-Schema (tcp:// statt ssl://), Firewall auf dem Port oder falsche Zugangsdaten.
  • Edge verbunden, aber keine Births. Primary Host ID ist in Transmission gesetzt, aber Engine ist nicht verbunden oder verwendet eine andere ID, sodass der Edge auf STATE wartet.
  • Births wiederholen sich alle paar Sekunden. Zwei Clients teilen sich eine Client-ID, oder zwei Transmission-Instanzen veröffentlichen dieselben Group- und Edge-Node-IDs.
  • Engine-Tags zeigen schlechte Qualität. Der Edge hat NDEATH gesendet, oder der Host hat ein Rebirth angefordert, das nie ankam. Prüfen Sie die Logs des Edge-Gateways.
  • Nichts auf dem öffentlichen MQTT-Broker. Prüfen Sie, ob seine Limits zu Ihrem Test passen: 10 Nachrichten pro Sekunde und Client und 64 KB pro Nachricht.

Verbinden Sie Ignition mit ConnectMQ

Geben Sie Ihren Ignition-Gateways einen gemeinsamen, ständig verfügbaren Broker, der Sparkplug B für Sie dekodiert. Erstellen Sie unter app.connectmq.com einen kostenlosen Serverless-Broker, ganz ohne Kreditkarte, tragen Sie URL und Zugangsdaten in MQTT Transmission und Engine ein und sehen Sie Ihre Tags im Topic-Explorer erscheinen. Lieber erst experimentieren? Der öffentliche MQTT-Broker funktioniert mit dem obigen Laboraufbau, solange Sie nur Test- und Simulationswerte senden.

Häufig gestellte Fragen

Brauche ich MQTT Distributor, wenn ich einen externen Broker verwende?

Nein. Richten Sie MQTT Transmission und MQTT Engine auf den externen Broker aus und deaktivieren oder entfernen Sie die Servereinträge des Distributors.

Kann Ignition reines JSON statt Sparkplug B veröffentlichen?

MQTT Transmission ist um Sparkplug B herum gebaut. Für eigene JSON-Topics bietet Cirrus Link ein separates Modul an, oder Sie veröffentlichen aus Gateway-Skripten mit einem Standard-MQTT-Client.

Warum werden meine MQTT-Engine-Tags veraltet?

Meist, weil der Edge Node die Verbindung verloren hat und sein NDEATH veröffentlicht wurde, oder weil Host und Edge unterschiedliche Primary Host IDs verwenden. Prüfen Sie den Serverstatus auf beiden Seiten.

Unterstützt der kostenlose Plan Sparkplug B?

Ja. Sparkplug benötigt QoS 0 und 1 sowie Retained Messages, die der kostenlose Serverless-Plan innerhalb seiner Verbindungs- und Nachrichtengrößenlimits unterstützt.

Verwandte Artikel

Industrial DataOps: Werksdaten kontextualisieren und steuern

Was Industrial DataOps in der Praxis bedeutet: Kontextualisierung, Normalisierung, Qualitätsprüfungen und Governance von OT-Daten und wie Sie diese Schicht auf einem MQTT-Namespace betreiben.

8 Min. Lesezeit

Alle Artikel →

Ihr privater MQTT-Broker ist nur wenige Klicks entfernt

Konto anlegen, Broker-Zugangsdaten erhalten und das erste Gerät verbinden — ohne Server, die installiert, gepatcht oder skaliert werden müssen.