The Kegerator Goes Live!

Nuvation Garage has hosted a few parties in the past month, and the kegerator is performing beautifully! It’s not much to look at yet, but there’s been a ton of progress on the software side. Staff Design Engineer Philipp Schrader filled me in on what’s happening behind the scenes of the kegerator. As the son of German brewing engineer, Philipp was more than happy to jump onboard and lead the software development for this particular garage project. A fulfillment of his destiny!

The kegerator display. Fresh beer on tap!

You will recall from our previous post that we’re using a Raspberry Pi for the kegerator processor. Besides the Raspberry Pi, there are two services running on a dedicated server: the MySQL database, and a Ruby script running the webserver. We’ve had some delays with the badge reader functionality, since the vendor we were planning on using does not provide drivers for the ARM architecture that the processor on the Raspberry Pi uses. We’re sorting that out, and in the meantime the kegerator is operating in ‘Party Mode’, with one pre-loaded guest account for all users.

Philipp and some happy party guests

Here is the sequence of events:

A user presses a button to login to their account.

The Raspberry Pi queries the MySQL database, and communicates with the webserver to display the user’s account balance on the monitor. Websockets are used to keep a persistent communication channel between the server and the webpage.

If there is money in the user’s account, the Raspberry Pi sends a signal to open the valve.

The user begins pouring beer, and the flow meter monitors the quantity.

The flow meter sends the pour volume to the Raspberry Pi, which in turn decrements the user’s account balance in the MySQL database.

The webserver updates the display to show the new balance, and the remaining volume in the keg.

Here’s a whiteboard drawing of the system:

Of course, there is still lots more work to be done! In addition to getting the badge reader functionality up and running, we’d like to: