MANUFACTURING / MQTT / GRPC / ON-PREM
Print Labels When the Line Says So: MQTT and gRPC for PLCs, MES and Robots
Let the line trigger the label. LabelInn takes print commands over MQTT or gRPC on your LAN, answers each one with the job result, and drives Zebra, TSC, Toshiba and Epson printers natively. No print server.
{
"printerId": "<printer id>",
"payloadType": "design",
"designId": "<design id>",
"designDataRows": [
{ "sku": "A-1042", "lot": "L2610", "qty": "24" }
],
"copies": 1
}THE PROBLEM
On a production line the controller already knows the moment a carton is full, a pallet is wrapped or a part has passed inspection. What usually happens next is an operator walking to a PC to print the label. That walk is where labels end up on the wrong box.
LabelInn's edge runtime sits on a PC on your network and listens for print commands over MQTT, the messaging protocol most SCADA systems, gateways and Node-RED flows already speak, and over gRPC for MES software and robot cells that prefer typed calls. It renders the label and sends native printer commands. No print server, no Windows driver per printer model.
🏭 Labels triggered by the line, not by a walk to the PC. Publish a message, a label prints. Talk to us about your line →
01 / MQTT
How it works
Connect LabelInn to your existing broker, such as Mosquitto, EMQX or HiveMQ, or switch on its built-in broker. TLS, username and password, and QoS 0, 1 and 2 are supported. LabelInn subscribes to these command topics:
| Topic | Purpose |
|---|---|
labelinn/cmd/print | Print a label or a batch |
labelinn/cmd/status | List local printers and broker state |
A print command names the printer and says what to print: a saved LabelInn design filled with your data, or raw ZPL, TPCL or ESC/Label if your system already generates printer language.
{
"printerId": "<printer id>",
"payloadType": "design",
"designId": "<design id>",
"designDataRows": [
{ "sku": "A-1042", "lot": "L2610", "qty": "24" }
],
"copies": 1
}Every command is answered on labelinn/cmd/response with the job result and its id, so the controller can confirm the label before the carton moves on.
02 / GRPC
gRPC: typed calls for MES and robot cells
The same runtime runs a gRPC server on your LAN (port 6633 by default, with an automatic fallback if it is taken). Switch it on in LabelInn's gRPC settings and it starts with the app.
| Service | Calls |
|---|---|
| PrintService | SubmitJob prints a design with data or raw ZPL/TPCL/ESC-Label and returns the result; GetJobStatus reads it back by job id |
| PrinterFleetService | ListPrinters returns every local printer and whether it is online |
| VerifyService | VerifyScan checks a scanned barcode against what was printed |
| SystemService | HealthCheck and Ping |
03 / MES
Why this is easier than a print server
| Typical approach | LabelInn edge runtime |
|---|---|
| Windows print server and a driver per model | Native ZPL, TSPL, TPCL and ESC/Label, no driver |
| Fire-and-forget raw socket to port 9100 | A job id per command and a status you can query |
| Label layout hard-coded in PLC or MES logic | Designs edited visually in LabelInn, referenced by id |
04 / INDUSTRIAL AUTOMATION
Connecting your line
- From the PLC side, anything that publishes MQTT or calls gRPC works: an MQTT-capable controller, a SCADA system, Node-RED, an MES, or a protocol gateway in front of the PLC.
- On the floor, a PC near the printers runs LabelInn and drives them over USB or the network.
- Prefer plain HTTP? The same runtime takes jobs on
POST /local/v1/print/jobs. See printing from a web app.
QUESTIONS / FAQ
Frequently asked questions
Can a PLC print a label with LabelInn?
Yes. Anything that publishes an MQTT message or makes a gRPC call can print: an MQTT-capable controller, SCADA, Node-RED, an MES or a protocol gateway in front of the PLC.
Which MQTT brokers does LabelInn work with?
Standard MQTT brokers such as Mosquitto, EMQX and HiveMQ, with TLS, username and password, and QoS 0 to 2. LabelInn can also run its own built-in broker.
How does the line know the label printed?
Each MQTT command is answered on labelinn/cmd/response with the job result. Over gRPC, SubmitJob returns the result directly and GetJobStatus reads it back by job id.
Can I send raw ZPL instead of a LabelInn design?
Yes. A print command can carry a saved design plus data, or raw ZPL, TPCL or ESC/Label.
KEEP GOING
Related
NEXT STEP / LABELINN
Let the line trigger its own labels
Run LabelInn next to your printers and connect it to the systems that already run the line. · MQTT commands and gRPC services · A result for every job · Native printer languages, no drivers