This is the new version of QLMuxd that is designed to support label printing to Brother QL printers that are set up in pools to allow for increased throughput and redundancy and act as a proxy for RaceDB to use a dynamically found RFID reader.
This version uses SNMP broadcast discovery to find Brother QL Label printers and Impinj RFID readers on the network.
The goal is to:
There are two additional scripts that are used in the RaceDB container to assist it to use the QLMux Proxy.
See: related.md for more information on the qllabels repo.
QLMux Proxy changes:
QLMux Proxy was designed to support label printing to Brother QL printers that are set up in pools to allow for increased throughput and redundancy. The new version finds the printers dynamically using SNMP broadcast discovery. By default the printers are placed into a single pool, which is suitable for small events. For larger events, the printers can be placed into two different pools to allow for increased throughput and redundancy using the builtin Web Status page. The qllabels script is used to format the labels and submit them to the QLMux Proxy for printing using the information provided as the command line argument by RaceDB.
QLMux Proxy also implements a transparent proxy for RaceDB to use a dynamically found RFID reader. This allows RaceDB to use a single IP address and port to connect to the RFID reader. The QLMux Proxy will then forward the connection to the correct RFID reader that is dynamically found. By default if only one RFID reader is found, it will be used. If more than one RFD reader is found, the first one found will be used, but this may be changed using the builtin Web Status page. The rfidproxy script is used to connect to the QLMux Proxy and the RFID reader.
qlmux_proxy supports a proxying a connection from RaceDB to an Impinj RFID reader.
Any connection to the qlmux_proxy on port 5084 will be proxied to the RFID reader found via SNMP Broadcast.
To allow for easy swapping of RFID readers, qlmux_proxy can support selection of which RFID reader to use via the built-in web status page.
rfidproxy listens to port 5084 on multiple local IP addresses, one for each RFID reader and proxies the connection to the QLMux Proxy on port 5085-5087 on the hosting system.
If running outside of a container:
Inside a container, the IP addresses will be different.
The QLMux Proxy web status page is used to assign RFID readers to the correct IP address.
To assist in the default assignment of RFID readers to IP addresses, the rfidproxy script will use the hostname of the system. It looks “table” or “kiosk”
The status of each printer is monitored so that fall over can be used to do the following:
Depending on the printer status, when data has arrived and is in the DataQueue, QLMux will attempt to deliver to the first available printer in the associated Pool.
QLMux uses SNMP to periodically check the current printer status for all specified printers. Printers that are not in the ready state will not be used. Brother QL printers typically have four states:
For each printer QLMux checks that the printer at the specified host address is the correct model.
qmux_proxy supports two sizes of labels:
| Size | Use | Printer |
| 2”x4” (62mm x 102mm) | frame, shoulder labels | Brother QL-710W, QL-720NW |
| 4”x6” (102mm x 152mm) | bib number labels | Brother QL-1060N |
qlmux_proxy supports three pools for each of the two sizes of labels.
| Pool | Use |
|---|---|
| Left | for RFID reader ports 1 and 2 |
| Right | for RFID reader ports 3 and 4 |
| Center | backup for Left and Right pools |
If there are no printers available in:
By default the printers are placed in the Left pool. The Web Status page can be used to move printers between pools.
For small events (1-2 registration stations) a single pool is sufficient. For larger events (3-4 registration stations) configuring multiple pools can reduce the time to print labels and help people find their bib numbers faster.
The Web Status page is available at http://localhost:9180/status. It shows the status of the printers and RFID readers

The QLMux Proxy will automatically find the printers on the network and add them to the printer pool. If a printer is swapped out, the QLMux Proxy will automatically find the new printer and add it to the pool. The problem printer can be left in place, just open the cover to stop it from being used.
For larger events, it may be necessary to have two pools of printers, and in this case the Web Status page will be used to put the new printer in the correct pool.
The QLMux Proxy will automatically find the RFID readers on the network and add them to the list of available RFID readers.
QLMux Proxy will automatically find the RFID reader and start using it. If more than one RFID reader is found, the first one will be used. If the RFID reader is swapped out, the QLMux Proxy will automatically find the new RFID reader and start using it.
If multiple RaceDB instances are running, multiple QLMux Proxy instances can be run, each with a different RFID reader.
RaceDB will connect to the QLMux Proxy on port 5084+N, where N is the number of the RFID reader. There is a separate
Best practice is to have only one RFID reader on the network at a time. If more than one RFID reader is found, the first one will be used. If the RFID reader is swapped out, the QLMux Proxy will automatically find the new RFID reader and start using it.
Having the backup RFID reader powered on and not connected will make switching faster.
0.0.0.0 is used for both standalone and container installations.
N.b. If used in a container the container will need to be run with the
--network=host option to allow SNMP Broadcast discovery to work.
Our recommendation is to use an WiFi router that supports DHCP and provides a builtin Ethernet switch.
If need to connect to the Internet, get an LTE/WiFi router that supports DHCP and provides a builtin Ethernet switch.
Trying to connect one or more stations to the Internet using a phone as a hotspot is not recommended. It can be made to work but often the underlying network routing is not correct and the connection is not reliable. Your mileage may vary.
See the Makefile.
The qlmux_proxy can be run as a container.
See docker for a simple build and run example.
N.b. A qlmux_proxy container needs to have networking set to Host mode to allow for SNMP broadcast discovery.