For events of our local fire fighter department I wanted to have a Point of Sales (PoS) system to serve beer  and sausage fast. After a good amount of research I settled with Odoo. This blogpost describes the story behind.

TL;DR: The source and documentation is on GitHub under tobru/odoo-pos-distribution.

After a good amount of research of all the available options I settled with Odoo as it provides a great PoS addon and has a huge community of developers providing solutions for nearly all needs. And as a huge bonus: It's Open Source.

The most important feature I wanted to have is that the whole system works without being connected to the Internet. This is achieved by running everything locally in containers on a Raspberry Pi and providing a dedicated WiFi network for the PoS tablet and a local network using cables for the receipt and order printers.

Initially I started this project early 2018 with Odoo 11, running on a Raspberry Pi 3 with Docker Compose and some handcrafted bash scripts. It was used for a summer event and worked pretty well. This lead into the next iteration for this years 2019 summer event, running with Odoo 12 and a lot of improvements how it is configured and installed. The current setup uses:

  • Odoo 12 and IoT Box, both running in a container
  • Raspberry Pi 4 with 4GB RAM (less would work as well!)
  • K3s (Kubernetes)
  • An old Android Samsung 10" tablet
  • Two Epson TM-T20II receipt printers
  • A cash drawer which can be opened automatically
  • A Mikrotik RB2011 router for providing WiFi and Ethernet switching
  • Pi-hole running on the Raspberry Pi providing DHCP and local DNS

Using Kubernetes brings many benefits: Easy installation and configuration of the whole system and built in health checking. Kubernetes on the edge is a thing! And K3s makes it very easy.

For receipt printing over the network, a special Odoo instance called IoT Box (formerly called PoS Box) is needed. It's basically a normal Odoo installation, but started with different parameters providing access to IoT devices. This makes the whole setup a bit complex and was the most complex thing to get up and running - and needed a good amount of patches to properly run in a container and supporting the setup. Looks like this will change a lot in the upcoming Odoo 13 (see README).

Out of the box the official PoS addon works pretty well. For some additional goodness I used some other additional PoS addons to improve the overall experience. I wanted to have an order number printed on the kitchen order and the receipt (but only if a kitchen order was made), so that the person in the kitchen can just call a number and the customer knows that it's his order which is ready. As such an addon didn't exist, I asked in Upwork for help and found a good developer who was able to create a custom addon. Other addons were used to order the products like on the printed pricelist and configure which product categories are shown.

And this is how it looks like:

PoS View

As additional payment methods to cash we used SumUp 3G for card payment and Twint QR code stickers for payment using Twint. These payment methods were available in Odoo PoS to choose from when a payment was made, but they are not directly connected to Odoo.

I worked pretty well again, we had a huge success with this PoS system and looking forward to the next event with this PoS system.