Integration
MQTT-Etikettendruck: aus jeder Broker-Nachricht wird ein Etikett
In der Produktion hängt fast alles schon am MQTT-Broker: Waagen, Scanner, SPS, Sensoren. Wer daraus Etiketten machen will, baut normalerweise einen kleinen D…
In der Produktion hängt fast alles schon am MQTT-Broker: Waagen, Scanner, SPS, Sensoren. Wer daraus Etiketten machen will, baut normalerweise einen kleinen Dienst, der mitliest, ein Layout füllt und ZPL an den Drucker schickt. Genau diesen Dienst kannst du dir sparen: zplCloud abonniert das Topic selbst und druckt.
Was du brauchst
| Zutat | Beispiel |
|---|---|
| Broker | Mosquitto, HiveMQ, EMQX, AWS IoT Core, Azure IoT Hub |
| Topic-Filter | werk/linie1/labels oder mit Platzhaltern werk/+/labels |
| Zugang | Benutzer und Passwort, üblicher Port 8883 mit TLS |
| Ziel | ein verbundener Zebra-Drucker oder ein virtueller Testdrucker |
Abo anlegen
Unter Streaming → Abos → Neues Abo wählst du den Typ MQTT. Der Connection-String ist eine einfache Liste aus Schlüssel und Wert:
Server=broker.example.com;Port=8883;Tls=true;Username=werk1;Password=…;Qos=1
Ins Topic-Feld kommt der Topic-Filter. MQTT-Platzhalter sind erlaubt: + steht für genau eine Ebene, # für alle darunter. Ein Abo auf werk/+/labels fängt also werk/linie1/labels und werk/linie2/labels gleichzeitig ein.
Zwei Wege zum Etikett
Erstens: Daten rein, Design füllt sich. Wenn du im Abo ein Label-Design auswählst, wird jede JSON-Nachricht zu einem Datensatz. Die Schlüssel der Nachricht füllen die gebundenen Felder des Designs:
{ "sku": "88-12345", "charge": "LOT-42", "menge": 120, "mhd": "2027-03-01" }
Ein Feld im Design, das an sku gebunden ist, zeigt dann 88-12345. Nicht-JSON landet als message in einem einzigen Feld.
Zweitens: fertiges ZPL. Wenn die Nachricht selbst schon ZPL trägt, lässt du das Design im Abo leer und schickst einen Envelope:
{
"schemaVersion": 1,
"printer": "*",
"zpl": "^XA^FO50,50^A0N,40,40^FDHello^FS^XZ"
}
printer nennt die Seriennummer, rp:{id} für einen Remote-Drucker oder "*" für alle Drucker des Kontos. Ist das ZPL groß, verweist du statt dessen darauf: "zplRef": { "storage": "archiv", "key": "auftraege/4711.zpl" } holt die Datei beim Druck aus S3 oder Azure Blob.
Warum nichts verloren geht
MQTT quittiert normalerweise sofort beim Empfang. zplCloud macht das anders: quittiert wird erst, wenn das ZPL am Drucker angekommen ist. Schlägt der Druck fehl, bleibt die Nachricht unquittiert, und der Broker stellt sie bei QoS 1 oder 2 erneut zu.
Deshalb lohnt sich Qos=1 im Connection-String. Mit QoS 0 gibt es vom Protokoll her keine Wiederholung: was beim Druckfehler weg ist, ist weg.
Erst testen, dann Papier
Bevor Etiketten laufen, lege dir unter Drucker → Sandbox-Drucker einen virtuellen Testdrucker an und wähle ihn im Abo aus. Er nimmt ZPL an wie ein echtes Gerät, rendert das Etikett und legt es in einen Verlauf - ohne Hardware und ohne Render-Verbrauch. So siehst du, wie deine Nachrichten wirklich aussehen, bevor die erste Rolle bedruckt wird.
Ein Abo lässt sich außerdem jederzeit über Test einmal von Hand auslösen, ganz ohne Broker-Nachricht.
Häufige Stolpersteine
- Nichts kommt an. Prüfe den Topic-Filter.
werk/linie1fängt keine Nachrichten aufwerk/linie1/labels; dafür braucht eswerk/linie1/#. - TLS-Fehler. Port 8883 setzt
Tls=truevoraus; auf 1883 läuft es unverschlüsselt. - Doppelte Etiketten nach einem Neustart. Setze
CleanSession=falseund einen festenClientId, damit der Broker die Sitzung wiedererkennt. - Feld bleibt leer. Die Schlüssel der Nachricht müssen zu den Bindings des Designs passen. Der Abschnitt „Protokoll" am Abo zeigt jede Nachricht im Original.