Intégration

Impression d'étiquettes MQTT : chaque message du broker devient une étiquette

Dans un atelier de production, presque tout est déjà relié au broker MQTT : balances, scanners, PLC, capteurs. En tirer des étiquettes implique normalement d…

Dans un atelier de production, presque tout est déjà relié au broker MQTT : balances, scanners, PLC, capteurs. En tirer des étiquettes implique normalement d'écrire un petit service qui s'abonne, remplit une mise en page et pousse du ZPL vers l'imprimante. Tu peux te passer de ce service : zplCloud s'abonne lui-même au topic et imprime.

Ce qu'il te faut

IngrédientExemple
BrokerMosquitto, HiveMQ, EMQX, AWS IoT Core, Azure IoT Hub
Filtre de topicplant/line1/labels, ou avec jokers plant/+/labels
Accèsutilisateur et mot de passe, généralement port 8883 avec TLS
Cibleune imprimante Zebra connectée ou une imprimante de test virtuelle

Créer l'abonnement

Sous Flux de données → Abonnements → Nouvel abonnement, choisis le type MQTT. La chaîne de connexion est une simple liste de clés et de valeurs :

Server=broker.example.com;Port=8883;Tls=true;Username=plant1;Password=…;Qos=1

Le champ topic reçoit le filtre de topic. Les jokers MQTT sont autorisés : + correspond à exactement un niveau, # à tout ce qui se trouve en dessous. Un abonnement sur plant/+/labels capte donc à la fois plant/line1/labels et plant/line2/labels.

Deux chemins vers une étiquette

Premier chemin : des données en entrée, le design se remplit tout seul. Si tu choisis un design d'étiquette dans l'abonnement, chaque message JSON devient un enregistrement. Les clés du message remplissent les champs liés du design :

{ "sku": "88-12345", "batch": "LOT-42", "qty": 120, "bestBefore": "2027-03-01" }

Un champ lié à sku affiche alors 88-12345. Tout ce qui n'est pas du JSON arrive comme message dans un seul champ.

Second chemin : du ZPL fini. Si le message transporte déjà du ZPL, laisse le design vide dans l'abonnement et envoie une enveloppe :

{
  "schemaVersion": 1,
  "printer": "*",
  "zpl": "^XA^FO50,50^A0N,40,40^FDBonjour^FS^XZ"
}

printer désigne le numéro de série, rp:{id} une imprimante distante, ou "*" toutes les imprimantes du compte. Si le ZPL est volumineux, fais-y plutôt référence : "zplRef": { "storage": "archive", "key": "orders/4711.zpl" } récupère le fichier depuis S3 ou Azure Blob au moment de l'impression.

Pourquoi rien ne se perd

MQTT acquitte normalement un message dès son arrivée. zplCloud procède autrement : l'acquittement a lieu une fois que le ZPL a atteint l'imprimante. Si l'impression échoue, le message reste non acquitté et le broker le relivre en QoS 1 ou 2.

C'est pourquoi Qos=1 dans la chaîne de connexion vaut la peine. En QoS 0, le protocole ne prévoit aucune relivraison : ce qui est perdu lors d'un échec d'impression est perdu pour de bon.

Répéter avant de gâcher du papier

Avant de lancer de vraies étiquettes, crée une imprimante de test virtuelle sous Imprimantes → Imprimantes bac à sable et sélectionne-la dans l'abonnement. Elle accepte du ZPL comme un vrai appareil, rend l'étiquette et la dépose dans un historique - sans matériel, sans quota de rendu. Tu vois ainsi ce que tes messages produisent réellement avant d'entamer le premier rouleau.

Un abonnement peut aussi être déclenché une fois à la main avec Test, entièrement sans message du broker.

Pièges fréquents

  • Rien n'arrive. Vérifie le filtre de topic. plant/line1 ne capte pas les messages sur plant/line1/labels ; il te faut plant/line1/#.
  • Erreurs TLS. Le port 8883 exige Tls=true ; le port 1883 fonctionne sans chiffrement.
  • Étiquettes en double après un redémarrage. Définis CleanSession=false et un ClientId fixe pour que le broker reconnaisse la session.
  • Un champ reste vide. Les clés du message doivent correspondre aux liaisons du design. La zone « journal » de l'abonnement affiche chaque message tel quel.