I first tried everything out on a breadboard - that really only took 30 minutes.
Prototype build on breadboards.
After validating everything worked, I spend a few hours making the circuit production ready: soldering the ESP32 on a prototype board, adding connectors to longer signalling wires and wiring the relays.
I also added power plugs and sockets between the relay module and the infrared heaters. This allows me to quickly reconfigure the sauna to function without home automation and not need a screwdriver or soldering iron to do so. That makes everything more bug- and future-proof.
Electronics all soldered up, ready to go.
The controller as it currently sits on top of the sauna. I mounted it on top of a simple 3D printed plate using some PCB spacers. I didn’t add a full enclosure as it’s not really necessary - maybe something for the future.
The 4 relay module wired up to plugs to be used by the infrared heaters. I put the relay module and wires in an old electronics box I still had laying around.
Relay box installed underneath the bench in the sauna.
BME280 not working?
One thing I noticed is that the BME280 environment sensor was reporting incorrect temperatures when compared to other thermometers mounted right next to it. At room temperature the sensor was accurate, but as soon as I started heating the sauna it would very quickly report high temperatures, often 10 or more degrees off.
For reference, the BME280 sensor supports temperatures up to 85°C (±1.0°C accuracy). As the sauna doesn’t go above 60°C, the sensor itself should be more than capable of supporting this. I also verified that the particular sensor itself wasn’t faulty by swapping it out with a different one - same problem.
After a bunch more sauna sessions and head scratching, I realized that the sensor was probably getting directly hit by infrared rays coming from the heaters. Similar to how a metal or dark-colored object will get hot in direct sunlight, this leads to incorrect measurements of the ambient temperature.
I solved this by embedding the BME280 sensor in a small wooden enclosure I made with my newly acquired laser cutter - the issue disappeared instantly. Problem solved 😁
How the BME280 sensor was originally mounted in the sauna - unprotected. Note the analog temperature gauge below. That gauge was how I first found out that the BME280 temperature was so much off.
The BME sensor inside a lasercut enclosure. I generated the box template using the excellent boxes.py tool and added the holes using the lasercutter software Lightburn.
ESPHome and Home Assistant
After that, the only thing left was polishing the ESPHome config a bit and creating a Sauna dashboard in Home Assistant to see and control everything.
After flashing the ESPHome config to the ESP32 micro-controller using a single CLI command (esphome run sauna.yaml), I just needed to run the ESPHome integration setup wizard in Home Assistant to automatically add the different sensors provided by the BME280 and the relays to Home Assistant.
Even after using ESPHome in multiple other projects, I keep being amazed with how easy ESPHome makes the integration with Home Assistant and how reliable it is afterwards.
The ESPHome config I used, also available on github.
Sauna dashboard in Home Assistant, as shown in on the iOS app.
As of now, I mostly still “manually” flip individual infrared heaters on and off through my phone, but of course, using Home Assistant it would be trivially easy to implement specific automation rules around it.
The above describes the state of things at the time of posting, but there’s tons of potential improvements I’ve been thinking about:
Remote light control: I’m currently just using the remote control that came with the LED panel. I’d like to explore using WLED to add smart control.
Smart speakers: From experience I know that in a sauna this is a bit gimmicky, but I might still consider it (just because).
Proper climate control: i.e. the ability to set and hold a specific target temperature. I’m thinking I could use ESPHome’s PID Controller feature.
Control Panel: Mount a touch control panel to the sauna wall to control the sauna without the need of a phone or computer. I’ve been looking at Nextion.
Statistics Dashboard: Build a dashboard in Home Assistant or Grafana to show fun stats (total time in sauna over time, avg session length, avg. temperature, etc).
Personalized sauna profiles: Different sauna programs (short and hot, long and less hot, temperature intervals, etc) customizable for different people.
I’m not sure whether I’ll end up doing do any of these, but it never hurts to have a backlog of things to work on 😎. If I do, I’ll update this post accordingly.
It’s easy to argue that installing home automation in a sauna is overkill. Indeed, a few manual on-off switches and a cheap thermometer pretty much achieve the same thing for significantly less money and effort. They also don’t require a phone or computer to operate.
But of course, that argument can be made about most home automation projects.
For me, the goal is not to save time or effort, it’s about learning and having fun along the way. The convenience it brings afterwards is more of an added bonus.