Skip to content

Guide

Part of: Receipt printing

Set up an Epson receipt printer with receipts and logo

With Epson Server Direct Print or Star CloudPRNT the receipt printer fetches its receipts from our server over HTTPS by itself – signed in with ID and password, no port forwarding and no PC at the bar. This guide covers everything from a suitable printer to the first receipt with your club logo. It also shows print routes that send order tickets to the kitchen and the bar, the order display as a screen and what to do when it does not work. Inexpensive ESC/POS receipt printers with a cutter connect through a small print proxy – via USB or network, running in Docker on a Raspberry Pi, for example.

8 min read

First: what you should know

  • The printer polls our server every few seconds. Receipts therefore arrive with a delay of a few seconds, depending on the interval you set.
  • The polling URL contains a secret key. Anyone who knows it receives this printer's receipts. Do not share it; if in doubt, create a new one.
  • The list of suitable models comes from Epson's documentation. Older TM-i and TM-DT devices often support Server Direct Print too, but only from a certain firmware version.

What you need

  • An Epson receipt printer with Server Direct Print and a network connection (LAN or Wi-Fi), for example TM-m30III, TM-m30II-H/-NT/-S/-SL, TM-m50/TM-m50II, TM-T88VII, TM-T88VI, TM-L100, TM-H6000V, TM-T70II-DT2 or TM-T88VI-DT2.
  • Internet access for the printer – an ordinary router is enough, no port forwarding needed.
  • Thermal paper 80 or 58 mm wide, matching the printer.
  • An owner or administrator account for the club in Administration (/admin). Receipt printers and order displays are set up only here, not in the admin area of the WebApp or app.

Add the printer in /admin

  1. Open /admin, choose the list on the left and go to "Operations" → "Receipt printers".
  2. Click "Add receipt printer" and enter a name, for example "Bar".
  3. Under "List" choose the list (or leave it empty for all lists) and under "Paper width" 80 mm or 58 mm.
  4. Under "What does this printer print?" tick what comes out automatically: "Receipts", "Z report" and "Order tickets" – more on this in the "Print routes" section below. With nothing ticked the printer only prints test prints and explicitly chosen receipts.
  5. Click "Save". The dialog stays open and shows the polling URL, the "ID (user)" and the password – the password only now, so copy it with "Copy password". "New address" and "New password" invalidate the old ones.

Set up the printer

  1. Find the printer's IP address: with the printer switched off, hold the feed button (FEED) and switch it on – the status sheet shows the IP address.
  2. Open http://IP-address in a browser on a computer in the same network – this is the printer's web configuration (Web Config, on older devices EpsonNet Config). Go to "Advanced Settings" → "Administrator Login" and sign in: on newer models the password is the printer's serial number (user, if asked, "epson"). TM-i and TM-DT models use the same path.
  3. First update the printer's root certificates: our server uses a Let's Encrypt certificate (chain YR1 → ISRG Root YR → ISRG Root X1). Older certificate lists in the printer do not know it – then https:// fails silently and no request reaches us. Open "Advanced Settings" → "Network Security" → "Root Certificate Update" and click "Update"; the printer downloads the current list from Epson. Alternatively import the PEM files "ISRG Root X1" and "ISRG Root YR" from letsencrypt.org/certificates under "Network Security" → "CA Certificate".
  4. Open "TMI Settings" → "Server Direct Print" and set "Server Direct Print" (in the Epson manual "Use Server Direct Print") to "Enable".
  5. Enter the copied polling URL in "URL", 5 seconds in "Interval", and the user and password from /admin in the "ID" and "Password" fields. The printer signs in with them using HTTP Digest, as described in the Epson manual; our server accepts Digest and Basic. Without matching credentials it answers "401" and the printer receives nothing. Shorter than 5 seconds brings nothing: our server accepts at most one request every 400 ms per printer.
  6. Click "Apply" and then, in "TM-i Settings" (address /webconfig-i), "Apply & Restart" – only then does the printer take over Server Direct Print and restart. Afterwards sign out with "Administrator Logout": while someone is signed in as administrator, the printer is in configuration mode and prints nothing.
  7. In /admin click "Test print" in the printer's row. The test receipt arrives with the next poll – so after about 5 seconds at most – and the "Status" column shows "last reached" with the time.

Alternatively: Star printers with CloudPRNT

  1. Instead of Epson you can use a Star receipt printer with CloudPRNT, for example TSP143IV, TSP100IV, mC-Print3 or mC-Print2. When adding it, choose "Star CloudPRNT (printer fetches the receipts)" under "Connection".
  2. Open the Star printer's web interface (IP address from the self-test printout) and sign in as administrator.
  3. Enable CloudPRNT, enter the address from /admin as "Server URL", 5 to 10 seconds as polling interval, and the user and password from /admin for authentication (Basic).
  4. Save, restart the printer and click "Test print" in /admin. On the first poll the server remembers the printer's MAC address; another device with the same address is rejected.

Inexpensive receipt printers via the print proxy (USB or network)

  1. Instead of an Epson or Star printer with a cloud feature, an inexpensive ESC/POS receipt printer works too – via USB or on the network, for example Epson TM-T20, Xprinter, Munbyn or Rongta. It must have an automatic cutter: every receipt ends with a cut. Printers without a cutter (tear bar, many 58 mm mobile printers) are not supported.
  2. For this, a small print proxy runs in Docker in your club network – on a Raspberry Pi (older models from Pi 2 too; Pi 1 and the first Pi Zero do not work), a NAS or a PC. It connects to our server by itself, no port forwarding needed.
  3. In /admin open "Operations" → "Receipt printers" → "Print proxies", enter a name and click "Pair proxy". The device token is shown only now. If the printer is connected to the proxy via USB, tick "Printer via USB at the proxy (/dev/usb/lp0)". Copy the ready-made start command (docker run …) with "Copy command". Alternatively, "docker compose" shows the same setup as a docker-compose.yml – copy it with "Copy YAML", save it in a folder and run "docker compose up -d" there.
  4. Run the command on the Raspberry Pi or computer. On first start Docker pulls the image drinklist/print-proxy from Docker Hub by itself (https://hub.docker.com/r/drinklist/print-proxy, for amd64, arm64 and arm/v7). Docker restarts the proxy by itself after a reboot or power cut; shortly afterwards the proxy shows "connected" in /admin. Tip: with the addition --test-print and the printer's IP address (or /dev/usb/lp0) the image prints a test page without the server – a quick check of cable, address and cutter.
  5. Then add the receipt printer: connection "Print proxy: inexpensive ESC/POS printer via USB or network (Docker, Raspberry Pi)", choose the proxy and under "Connection at the proxy" network (the printer's IP address in the club network, port 9100) or USB (/dev/usb/lp0). Tick "The printer has an automatic cutter", save and click "Test print". Print routes, reprints and jobs work as with any other printer.
  6. If the proxy is not connected (power, internet), receipts wait and come out as soon as it is back online – receipts older than two hours are no longer printed, a reprint remains possible. The "Status" column shows paper out or cover open as far as the printer reports it; many inexpensive printers do not. "New token" invalidates the old one, "Remove" disconnects the proxy for good.

Print routes: food to the kitchen, drinks to the bar

  1. Under "What does this printer print?" every printer decides what it prints automatically: "Receipts" after every cash sale, the "Z report" when closing the register and "Order tickets" for new orders from QR ordering. Several printers may print the same, for example receipts at the bar and in the office.
  2. Kitchen: add the printer "Kitchen", tick "Order tickets" and under "Only these product groups (categories)" choose the category of your food, for example "Food" – exactly as it is set on the products.
  3. Bar: for the printer "Bar" tick "Receipts" and "Order tickets" plus "All other products (category without its own printer)". Without a category and without this tick a printer prints every order in full.
  4. An order with 2 lagers and 1 schnitzel now produces two tickets: the schnitzel in the kitchen, the lagers at the bar – each with order number, table or station, time, guest and notes. Items no printer matches are not printed. Optionally use "Prices on the order ticket" and "Print cancelled orders as a cancellation ticket".
  5. The "Print routes" button shows the overview: which document for which list and product group comes out on which printer. If no list is chosen for a printer, "For list" in the printer dialog limits its routes to one list.

Order display instead of tickets: a screen for kitchen and bar

  1. Open "Operations" → "Order displays" and click "Add order display". Name it, for example "Kitchen", and choose "Only these product groups (categories)" or "All other products (category without its own printer)" just like for a printer – screens and printers share the same rules.
  2. Open the link or QR code on the tablet or TV and choose "Add to Home Screen". The display then starts as its own app without signing in, in full screen, and keeps the screen awake. One tap turns on the sound for new orders.
  3. Every open order appears as a large tile with number, table or station, guest, notes and only the items for this screen. The timer keeps running and turns the tile amber after "Amber after minutes" and red after "Red after minutes".
  4. Tap "In progress" to take the order (the bar sees it as taken) and "Done" to remove it from this screen – with "Undo" for 10 seconds. Delivering and taking payment stays at the bar. "New link" invalidates the old one, for example if a tablet gets lost.

Club logo for receipts, PDFs and the TV display

  1. In /admin open "Organization" → "Master data" and scroll to the "Logo" section.
  2. Click "Upload logo" and choose a JPG or PNG image of up to 2 MB. It is rotated and resized automatically.
  3. Choose where the logo appears: "On receipts (receipt printer), top centre", "On the TV/projector display, top right" and "On the club’s PDFs, top right (receipts, statements, reports)".
  4. Tip: the receipt printer prints only black and white, so the logo is converted into dots. A simple logo with clear edges and strong contrast on a light background looks best on a receipt.

Printing receipts

  • A receipt shows the club logo, line items with VAT letter, discounts and price rules, the total, the payment type and VAT per rate.
  • "Journals & accounts" → "Payment journal": "Print receipt" in a payment's row sends the receipt to the chosen printer – without a choice to the first printer with "Receipts". The PDF receipt remains available as usual.
  • "Operations" → "Cash desk & Z report": "Print Z report" in the row of a closed cash session prints the Z report on paper.
  • "Operations" → "Receipt printers" → "Jobs": every job with status and error. "Reprint" prints a receipt again.

If it does not work

  • The "Status" column still says "never polled yet": the URL is missing or wrong, Server Direct Print is not enabled, or the printer cannot reach the internet. Also check the printer's date and time – if they are wrong, the HTTPS connection fails. If you cannot get into the web configuration (sign-in fails), reset the printer to factory settings with the FEED button as described in the Epson manual.
  • Jobs stay "waiting" or "sent": is the printer on, paper loaded and the cover closed? The printer collects jobs with its next poll; without a response they are delivered again and marked "failed" after several attempts. If /admin shows "Please generate a new password (needed for Epson)" for the printer, the password predates Digest sign-in: generate a new one and enter it in the printer.
  • "Error" with a message from the printer: usually out of paper or cover open. Fix it and the job is sent again automatically.
  • Text cut off or too narrow: the paper width in /admin must match the paper loaded (80 or 58 mm).
  • Accented or special characters wrong: check that the printer's firmware is up to date – older versions do not handle all character sets.

Epson: troubleshooting from practice

  • No poll reaches the server although everything is entered: usually the printer does not know our server's Let's Encrypt certificate (seen with a TM-m30III, TM-i firmware 01.39 and root certificates 02.03). Run "Advanced Settings" → "Network Security" → "Root Certificate Update" → "Update" or import "ISRG Root X1" and "ISRG Root YR" (letsencrypt.org/certificates) under "Network Security" → "CA Certificate". Then click "Apply & Restart" in "TM-i Settings".
  • Changed settings have no effect: Server Direct Print only takes over changes after "Apply & Restart" in "TM-i Settings" (/webconfig-i).
  • The printer prints a "WebConfig Start" slip and nothing else: someone is signed in to the web configuration as administrator and the printer is in configuration mode. Always sign out with "Administrator Logout".
  • The self-test prints but nothing comes from the network – even ePOS or port 9100 accept data without printing: the internal link between network board and print engine has hung. Unplug the power for about 30 seconds.
  • Enter the address with https://, not http://: requests via http:// are redirected, and Epson does not follow redirects.
  • In /admin under "Operations" → "Receipt printers", "Letzter Kontakt" (last contact) in the printer dialog shows the latest polls with their result; these diagnostics are shown in German. "Anmeldung angefordert (401 – bei Digest normal)" (sign-in requested, normal with Digest) is normal for the first poll. With "Digest-Anmeldung falsch (ID/Passwort prüfen)" (Digest sign-in wrong) generate a new password and enter it in the printer. If it says "seit dem letzten Serverstart kein Abruf angekommen" (no poll since the last server start), the printer does not reach our server – check https://, root certificates and network.

Still stuck?

If a guide leaves a question open, or something looks different from the description: open a ticket and we will reply inside it. Support runs through tickets only, not by email.