When I started the current iteration of this project, I already had a mostly-functional project, with the exception of how I kept track of the keg volumes. I was using strain-gauges of the same type used in bathroom scales for quite a while, with okay results outside of 2 main issues: The first is simply that when I originally built the Keezer, I didn’t plan for scales and thus had to make some modifications in order to accommodate the extra height added by the scales; my fix was a bit hacky but worked well enough. The bigger issue comes down to the simple fact of what a Keezer is; a freezer with a temperature controller to keep it a bit ABOVE freezing. Normally in a freezer, condensate is simply turned into ice that periodically has to be removed by hand, but in my case it just pools in the bottom of the freezer and has to be mopped out every few weeks (more in the summer, less in the winter). It can get a little gross, but the kegs don’t particularly mind (and most importantly, it doesn’t come into contact with the beer). Funny thing is, strain-gauges don’t really like sitting in water (at least when they’re not corrosion resistant). This meant that as time went on, the strain-gauges slowly succumbed to the elements and became less accurate (or more precisely, their values tended to drift over time).

I did a bit of research on how to address these shortcomings over the years, and ultimately, I decided to go with some inexpensive flowrate meters. Not laboratory accurate, but presumably good enough for my needs. After buying one and testing it out over a few weeks at different carbonation pressures (I was a little concerned the carbonation might skew the readings, which it mostly didn’t), I went ahead and bought enough for all of my kegs and began building out the new code. Since I had originally used a Particle Photon as the microcontroller, all the code was written in a variation of C++. Pretty simple, but nothing compared to the simplicity of ESPHome. The first thing I did was write all of the YAML (simple, but surprisingly it still added up). Over a few days, I slowly built up my ‘virtual’ Keezer until it seemed to function the way I wanted.

In addition to switching to flowmeters, I decided to add a pressure sensor (located after the regulator on my CO2 tank, but before the regulators I have for each keg). Normally this part of the lines stays at a steady 40psi (the max pressure I ever want to provide to any keg), and while I left a scale on the tank, this allows me to both tell when the tank is COMPLETELY empty as well as troubleshoot other issues without opening the Keezer (Did I shut the CO2 tank off when I swapped it out and forget to turn it back on? Or is there something else wrong?). Far from a necessity, but I previously had a pressure sensor which I found useful until it failed. I also decided to add a relay and directly regulate the temperature/control the freezer instead of using a standalone temperature controller. ESPHome just makes this so easy; when using C++ I had considered this but was always afraid I would miss an edge case and damage the compressor. With ESPHome and a few lines of YAML, I can define exactly how I want it to operate and feel confident that at least on the software side of things, it will operate the way I intend. The remaining upgrades I made included adding individually addressable LEDs (instead of just white) under the taps, as well as replacing the screen (an old laptop screen connected to a Raspberry Pi) with a tablet that shows a dashboard from Home Assistant (instead of an HTML file I was using previously).

While I previously had a temperature sensor just for data, it was a simple analog one designed to be placed on a circuit board that I just soldered to some wire. I decided to replace and upgrade it as well, using a digital sensor (dallas) actually designed for placement in a wet environment. Nothing fancy, but it’s little improvements like this that make the finished product feel,...

Read more »