Integración
Impresión de etiquetas con MQTT: cada mensaje del broker se convierte en una etiqueta
En una planta de producción casi todo cuelga ya del broker MQTT: básculas, escáneres, PLC, sensores. Convertir eso en etiquetas suele implicar escribir un pe…
En una planta de producción casi todo cuelga ya del broker MQTT: básculas, escáneres, PLC, sensores. Convertir eso en etiquetas suele implicar escribir un pequeño servicio que se suscribe, rellena un diseño y envía ZPL a la impresora. Puedes ahorrarte ese servicio: zplCloud se suscribe al topic por sí mismo e imprime.
Qué necesitas
| Componente | Ejemplo |
|---|---|
| Broker | Mosquitto, HiveMQ, EMQX, AWS IoT Core, Azure IoT Hub |
| Filtro de topic | plant/line1/labels, o con comodines plant/+/labels |
| Acceso | usuario y contraseña, normalmente puerto 8883 con TLS |
| Destino | una impresora Zebra conectada o una impresora de prueba virtual |
Crear la suscripción
En Streaming → Suscripciones → Nueva suscripción elige el tipo MQTT. La cadena de conexión es una simple lista de claves y valores:
Server=broker.example.com;Port=8883;Tls=true;Username=plant1;Password=…;Qos=1
El campo de topic admite el filtro de topic. Se permiten los comodines de MQTT: + coincide exactamente con un nivel y # con todo lo que hay por debajo. Por tanto, una suscripción a plant/+/labels captura plant/line1/labels y plant/line2/labels a la vez.
Dos caminos hacia una etiqueta
Primero: entran datos y el diseño se rellena solo. Si eliges un diseño de etiqueta en la suscripción, cada mensaje JSON se convierte en un registro. Las claves del mensaje rellenan los campos vinculados del diseño:
{ "sku": "88-12345", "batch": "LOT-42", "qty": 120, "bestBefore": "2027-03-01" }
Un campo vinculado a sku muestra entonces 88-12345. Todo lo que no sea JSON llega como message en un único campo.
Segundo: ZPL terminado. Si el mensaje ya contiene ZPL, no selecciones ningún diseño en la suscripción y envía un sobre:
{
"schemaVersion": 1,
"printer": "*",
"zpl": "^XA^FO50,50^A0N,40,40^FDHola^FS^XZ"
}
printer indica el número de serie, rp:{id} una impresora remota o "*" todas las impresoras de la cuenta. Si el ZPL es grande, apunta a él: "zplRef": { "storage": "archive", "key": "orders/4711.zpl" } obtiene el archivo de S3 o Azure Blob en el momento de imprimir.
Por qué no se pierde nada
Normalmente, MQTT confirma un mensaje en cuanto llega. zplCloud lo hace de otra manera: la confirmación se produce cuando el ZPL ha llegado a la impresora. Si la impresión falla, el mensaje queda sin confirmar y el broker lo vuelve a entregar con QoS 1 o 2.
Por eso merece la pena poner Qos=1 en la cadena de conexión. Con QoS 0 el protocolo no ofrece ninguna reentrega: lo que se pierde por un fallo de impresión, se pierde para siempre.
Ensaya antes de gastar papel
Antes de imprimir etiquetas reales, crea una impresora de prueba virtual en Impresoras → Impresoras sandbox y selecciónala en la suscripción. Acepta ZPL como un dispositivo real, renderiza la etiqueta y la guarda en un historial - sin hardware y sin consumir cuota de renderizado. Así ves lo que producen realmente tus mensajes antes de gastar el primer rollo.
Una suscripción también puede lanzarse una vez a mano con Probar, sin ningún mensaje del broker.
Errores frecuentes
- No llega nada. Revisa el filtro de topic.
plant/line1no captura los mensajes deplant/line1/labels; necesitasplant/line1/#. - Errores de TLS. El puerto 8883 requiere
Tls=true; el puerto 1883 funciona sin cifrar. - Etiquetas duplicadas tras un reinicio. Configura
CleanSession=falsey unClientIdfijo para que el broker reconozca la sesión. - Un campo se queda vacío. Las claves del mensaje tienen que coincidir con las vinculaciones del diseño. El área «Registro» de la suscripción muestra cada mensaje tal cual.