🌡️ Dampf, Schweiß und Silizium#
Es gibt diesen Moment in jeder Home-Automation-Reise, wo die To-do-Liste von „Flurlicht automatisieren“ zu „Saunasteuerung durch selbstgebaute Platine ersetzen“ kippt – einfach, weil man’s kann.
Willkommen an diesem Punkt.
Hier erzähle ich, wie ich eine individuelle Saunasteuerung gebaut habe – mit einem ESP D1 Mini, digitalen Potentiometern, etwas ESPHome-Zauberei und dem verdammt guten Vorwand, endlich eine eigene Platine mit KiCad zu designen.
Hat’s nach verbranntem Flux und Erfolg gerochen? Absolut. Hat’s auf Anhieb mit Home Assistant funktioniert? Irgendwann, ja.
🔥 Ziele & Zähigkeit#
Meine Mission: Die alte analoge Saunasteuerung (mit Drehreglern aus der Steinzeit) ins 21. Jahrhundert befördern – mit smarter Temperaturkontrolle, Feedback und automatischem Licht.
Dazu brauchte ich:
- Einen ESP8266 (Wemos D1 Mini) als Gehirn
- Ein Solid-State-Relais zum Ein-/Ausschalten des Ofens
- Digitale Potis, um den analogen Regler zu simulieren
- Einen WS2812b-LED-Strip für Ambiente und Zeitanzeige
- Einen Präsenzsensor (Radar statt Bewegung – weil still ≠ weg)
- Einen DS18B20-Temperatursensor
- ESPHome-Integration
- Und natürlich: eine selbst designte Platine, die alles verbindet
📐 Die Platine entwerfen#
Das sollte kein Drahtverhau werden, der im Saunakasten vor sich hin schmort. Ich wollte Eleganz. Ich wollte eine richtige Platine.
Also: KiCad geöffnet. Ein paar Stunden (gut, Tage) mit Schaltplänen, Footprints, Leiterbahnen und hübscher Silkscreen-Spielerei später – boom:
Ich hab die Platine bestellt, gewartet wie ein Kind vor Weihnachten, und dann alles in Ruhe verlötet – mit der Geduld eines Menschen, der sehr bewusst keine SMD-Pads kurzschließen will.
Und das Ergebnis?
Einfach schön.
⚙️ Klüger als der Durchschnittsofen#
Die größte Herausforderung war, das Verhalten der alten Steuerung zu emulieren. Diese nutzte ein 2,5 kΩ-Potentiometer zur Temperaturregelung – simpel, aber effektiv. Also:
🔁 Vier digitale Potis parallel#
Denn Überraschung: Die meisten Digipots kommen nicht auf 2,5 kΩ. Aber vier parallel? Das funktioniert. Ich habe die X9C103S-Serie verwendet und sie über das entsprechende ESPHome-Component angesteuert.
ESPHome, dieses YAML-liebende Wesen, unterstützte meine Schaltung nicht ganz von Haus aus.
Warum? Ich habe Optokoppler verwendet, um die digitalen Potis zu schalten – nicht, weil ich musste, sondern weil ich wollte. Die Originalsteuerung hatte zwar eine 5V-Leitung mit vermutlich genug Strom (laut Berechnung: ja, laut Bauchgefühl: lieber nicht). Ich wollte stattdessen vollständige galvanische Trennung. Also baute ich ein kleines Netzteil ein und koppelte die Steuersignale über Optos ein. Sauber. Getrennt. Sicher.
Nur ein Problem: Optokoppler sind lahm. Zumindest im Vergleich zu dem, was ESPHome erwartet.
Das x9c
-Modul in ESPHome schaltete mit 1 Mikrosekunde Delay – viel zu schnell für meine Optos. In Tests (mit etwas Oszilloskop-Magie) fand ich heraus, dass ich eher 50–70 µs brauche.
Was hab ich gemacht? Genau: Ich hab’s gepatcht.
Ich habe dem x9c
-Output-Component einen neuen Parameter step_delay
spendiert. Der Standardwert bleibt bei 1 µs (damit alte Konfigurationen nicht brechen), aber jetzt kann man ihn bis 100 µs einstellen. Langsam genug selbst für die verschlafensten Optokoppler.
Der Pull-Request wurde angenommen. 🎉 Doku hab ich auch gleich geschrieben – wenn schon, denn schon.
Und jetzt läuft mein Setup ganz ohne Hacks – nur mit sauberem YAML und einer Prise Community-Liebe.
Hier ein Einblick in die ESPHome-Konfiguration:
esphome:
name: sauna
friendly_name: sauna
esp8266:
board: d1_mini
logger:
api:
encryption:
key: "redacted"
services:
- service: set_pot_value
variables:
level: float
then:
- lambda: |-
if (level < 55 || level > 105) {
ESP_LOGE("custom", "Level out of range (65-105): %.2f", level);
} else {
float mapped_level = (level - 55) / 50.0;
id(x9c_pot).set_level(mapped_level);
ESP_LOGI("custom", "Setting temperature to %.2f °C (mapped level: %.2f)", level, mapped_level);
}
ota:
password: "redacted"
platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
domain: .fritz.box
ap:
ssid: "Sauna Fallback Hotspot"
password: "redacted"
captive_portal:
switch:
- platform: gpio
pin:
number: D2
name: "Oven"
icon: mdi:fire
id: relay
one_wire:
- platform: gpio
pin: D4
sensor:
- platform: dallas_temp
name: Temperature
resolution: 10
light:
- platform: neopixelbus
pin: D3
name: "LED"
num_leds: 235
type: GRB
variant: WS2812
on_turn_on:
- logger.log: "Light Turned On!"
on_turn_off:
- logger.log: "Light Turned Off!"
effects:
- addressable_color_wipe:
name: Visual Timer 1min
colors:
- red: 0%
green: 100%
blue: 0%
num_leds: 235
add_led_interval: 255ms
reverse: false
- addressable_color_wipe:
name: Visual Timer 10min
colors:
- red: 0%
green: 100%
blue: 0%
num_leds: 235
add_led_interval: 2553ms
reverse: false
- addressable_color_wipe:
name: Visual Timer 15min
colors:
- red: 0%
green: 100%
blue: 0%
num_leds: 235
add_led_interval: 3830ms
reverse: false
binary_sensor:
- platform: gpio
device_class: motion
pin:
number: D1
mode:
input: true
pullup: false
name: "person detected"
id: presence_sensor
output:
- platform: x9c
id: x9c_pot
cs_pin:
number: D7
inverted: true
inc_pin:
number: D6
inverted: true
ud_pin:
number: D5
inverted: true
initial_value: 0.01
step_delay: 100us
Ein kleiner Trick, den ich eingebaut habe, ist ein benutzerdefinierter Service in ESPHome, mit dem ich die Saunatemperatur direkt über Home Assistant einstellen kann. Und jetzt kommt das Schöne: Ich wollte nicht einfach rohe Potentiometerwerte schicken – ich wollte echte Zieltemperaturen in Grad Celsius angeben, wie ein normaler Mensch eben.
Also habe ich einen set_pot_value
-Service geschrieben, der einen Float-Wert (z. B. 75 °C) entgegennimmt, diesen auf den Wertebereich von 0.0 bis 1.0 (wie vom digitalen Poti erwartet) abbildet und ihn dann entsprechend setzt.
Es gibt sogar eine kleine Plausibilitätsprüfung: Wenn du versuchst, einen Wert außerhalb des zulässigen Sauna-Bereichs (55–105 °C) zu setzen, lehnt das System das höflich, aber bestimmt ab – mit einer ordentlichen Fehlermeldung im Log. Denn niemand will sich versehentlich in eine andere Dimension dämpfen.
Und hier ist der Codeausschnitt, der das möglich macht:
services:
- service: set_pot_value
variables:
level: float
then:
- lambda: |-
if (level < 55 || level > 105) {
ESP_LOGE("custom", "Level out of range (65-105): %.2f", level);
} else {
float mapped_level = (level - 55) / 50.0;
id(x9c_pot).set_level(mapped_level);
ESP_LOGI("custom", "Setting temperature to %.2f °C (mapped level: %.2f)", level, mapped_level);
}
Und so sieht das ganze in Home Assistant aus:
🧠 Intelligenz mit Stil#
Dank ESPHome ließ sich alles wunderbar in Home Assistant integrieren:
- Ein virtueller Schalter zum Ein- und Ausschalten des Saunaofens (über das SSR)
- Eine Temperaturanzeige in Echtzeit
- Automatisierungen zum Vorheizen oder automatischen Abschalten
- Ambiente-LEDs, die nicht nur hübsch leuchten, sondern auch etwas sagen
💡 LED-Magie: Die smarte Sanduhr#
Hier wird’s herrlich nerdig:
Statt einer Sanduhr oder einem Countdown-Timer nutze ich den WS2812b-LED-Streifen, um die Zeit im Blick zu behalten – ganz ohne Uhr:
- Beim Betreten der Sauna startet der Streifen in einem warmen, gemütlichen Gelb
- Im Verlauf von 15 Minuten wechselt die Farbe schrittweise zu Grün – LED für LED
- Sobald alles grün ist: Zeit, rauszugehen
Einfach, elegant, hypnotisch. Und ja – auch ein bisschen cooler als eine Eieruhr.
👀 Präsenz-Erkennung: Auch Bewegungslos ist anwesend#
Bewegungsmelder sind gut – aber in der Sauna sitzt man eher still und denkt über das Leben nach (oder zählt die Schweißperlen). Deshalb kam ein radarbasiertes Präsenzmodul zum Einsatz.
Der erkennt auch, wenn man sich nicht bewegt. Perfekt für die Sauna.
Solange jemand drin ist, bleiben die LEDs aktiv. Wird niemand mehr erkannt, fährt das System elegant runter. Automatisierter Komfort – fast wie im Spa.
🧪 Lektionen gelernt#
- Vier Digipots sind besser als einer
- ESPHome ist extrem anpassbar, wenn man bereit ist, einzutauchen
- Radar erkennt, was Bewegungsmelder längst aufgegeben haben.
- Eine eigene Platine zu bauen bedeutet viel Aufwand – aber eben auch volle Kontrolle.
🤝 Willst du auch eine?#
Du willst deine Sauna smart machen? Ich helfe gern! Ob Code, Schaltplan oder ESPHome-Config – ich teile alles, was dein Projekt voranbringt (und dich vor dummen Drehreglern bewahrt).
Profi-Tipp: Wenn deine Saunasteuerung grün leuchtet, ist es wahrscheinlich Zeit, rauszugehen. Oder du hast versehentlich eine KI erschaffen, die dein Schwitzverhalten analysiert.
Fragen? Ideen? Lust, Sauna-Setups zu vergleichen? Schreib mir – am besten vor dem nächsten Aufguss.