A project log for SmartSoak

Maximize hot tub enjoyment, minimize cost

alexwhittemorealexwhittemore 09/10/2019 at 06:390 Comments

So obviously, having a faster heater is better.

I ran some calculations before deciding to spend the money on a propane heater to see if the cost would work out. I'll dig them up and add them here, since it's interesting, but spoiler alert, it's worth the money.

The built-in electric heater will heat about 2°F/hr, if you're lucky. The propane heater on the conservative, more efficient low flame heats about 5°F/hr. If you're willing to take a 10% efficiency hit, the high setting does 15°F/hr, which means the tub is basically ready to go in 2 hours, even if you've left the heat off for a week. (More on how I measured/calculated these numbers next post. Sorry I'm a tease.)

Unfortunately, with great power comes great responsibility.

Even at 5°F/hr, you've got to check the hot tub temperature and turn it off really inside a 30m window of your target, or bad things start to happen.

One night I turned the tub on to have it ready by post-dinner, but in the process of cooking, I realized I needed groceries. I shopped, one thing led to another, I came home, cooked dinner, and by the time I remembered the hot tub, it was already at a rare-steak-sous-vide 120°F. That's way beyond health hazard - scum had started to congeal on the surface and in the chlorine ball and in the intake filter on the pump. Still not sure what that was, but I know it was gross.

In similar fashion, I left on vacation, giving the roomie the low down on how to fly the tub in my absence. Predictably, he made the same mistake, but two drinks in on a Saturday decided that 110°F didn't seem too unreasonable. After a couple minutes of uncomfortable soaking, he very suddenly ran out of the tub and into the bathroom to vomit.

So yeah, it control better than human-actuated bang-bang.

But before getting there, I actually put together a quick project simply to add telemetry, so I could gather those numbers I mentioned before and so I could SEE when I'd left it on to melt itself to slag.

That and just to see the water temperature more accurately than the 1-degree increments the built-in display shows.

Here's the code:

The sensor actually sends data to an Adafruit.IO dashboard at, though it hasn't been in use for quite a while now.

This was remarkably easy to set up:

All in all, I just followed Adafruit's tutorial linked on that repo's readme to a T, but replacing "humidity" with a second temperature channel.

In the end, you get pretty graphs over time without any additional work, like this one you'll see in the next update:

Adafruit.IO is pretty cool!