Projektvorstellung: Smarte Sauna total

ich beschäftige mich inzwischen fast 2,5 Jahre mit dem Thema und habe dazu bereits einige Posts verfasst:

da ist es jetzt mal an der Zeit, ein kleines Tutorial zu schreiben.

Ziel war folgende Sensoren in HA zu bekommen:

  1. aktuelle Sauna Temperatur
  2. Stromverbrauch
  3. ein/aus Schalter
  4. Innenbeleuchtung mit LED

Damit alles bis zum Schluß funktioniert wird ein eingerichtetes und betriebsbereites MQTT benötigt (wie das geht würde den Rahmen dieses Tutorials sprengen, dann gerne per PN)

PS.: ich hab mir das nicht alles selbst ausgedacht, aber Tage und Wochen rumprobiert, gebastelt und Recherchiert…

die Light Version:

Hardware:
nur ein zigbee Temperaturmesser
zB für ca €3,50 von AliExpress
die können max. 60 °C vertragen.
Also von aussen an die Sauna-Glastüre geklebt
und dort sind dann immer ca 40° weniger als im Inneren (den Wert empirisch selbst ermitteln)

unter Helfer einen TemplateSensor erstellt, der auf den tatsächlich gemessenen Wert + 40 addiert.

im dashboard eine Temperatur-Karte erstellt die bis 20°C die gemessene Temperatur (= Keller Temperatur) und bei >20°C o.g. TemplateSensor (= SaunaTemperatur) anzeigt.
damit war Sensor 1) aktuelle Temperatur der Sauna bereits erledigt.

was den Stromverbrauch betrifft, hatte ich bereits einen analogen Stromzähler nur für die Sauna in meinem Schaltkasten.

den jetzt smart zu machen um dann evtl. 20 Saunagänge/Jahr in HA automatisch zu erfassen war mir zu aufwändig.
Die Zwischenlösung war ein Input-Sensor, man musste also nach jedem Saunagang den Zählerstand manuell ablesen und in HA eintragen
Details hier:

das wäre (fast) Sensor 2) Stromverbrauch

Problem:
der zigbee Sensor verlor im Keller des Öfteren die Verbindung (obwohl ein aktiver power-Plug für die Waschmaschine keine 1,2m entfernt ist)

die Komfort Version (Sauna total)

Hardware:
Smarter FI (WIFI Version) mit Zähler
bei AliExpress EARU 63A WiFi Smart Circuit € 15,50
ESP32 mit ext. Antenne (weil schwaches WLAN im Keller) ca. € 6,20
3m LED-Stripe WS2812B IP67 ca. € 10,00
5V Netzteil ca. € 9,70
Temperatur-Sensor Dallas DS18B20 mit Kabel und Adapter ca. € 3,10
aus dem Bauhaus eine Aufputzdose und Kleinteile ca € 4,00
Kosten total: ca. € 49,00

Montage:
da ich diesen China FIs nicht so ganz über den Weg getraut habe, habe ich diesen smarten FI einfach hinter den vorhandenen FI im Stromkasten gehängt weil der im Fall der Fälle immer zuerst auslöst.
es kommen in HA diese Sensoren an:


somit Sensoren 2) und 3) erledigt und ontop noch einen Sensor für den Gesamt-Verbrauch seit Inbetriebnahme

Für die LED Beleuchtung habe ich mich für WLED entschieden, einfach weil es unkompliziert zu installieren ist. Zunächst das Netzteil parallel an die Sauna-Stromversorgung angeschlossen (wenn Sauna an, dann auch ESP32 an).
Den 3 m LED Stripe knapp über den Sauna-Boden installiert. Dort ist selbst bei einer Temperatur von 80°C nur ca. 30-35°C und das kann ein Stripe locker ab, aber auf IP67 achten, die sind Spritzwassergeschützt. Dies ist der Anschlussplan (wobei ich jetzt nur 145 LEDs im Stripe und den Kondensator auch nicht verwendet habe)

ich habe also +5V und GND sowohl am Anfang als auch am Ende des Stripes angeschlossen.
dann alle Kabel zur Aufputzdose verlegen und die ext. Antenne anbauen.

Den Dallas Temperaturfühler durch ein Loch von aussen nach innen stecken (und zwar möglichst weit oben) und das Kabel zur Dose führen.

Software (nur WLED)
die LED Steuerung alleine ist recht simple und wurde schon an vielen Stellen beschrieben, daher hier nur die Kurzversion:

  1. ESP32 per USB an den PC anschliessen
  2. https://install.wled.me/
  3. wenn fertig die WLAN Zugangsdaten noch eingeben
  4. das DATA Kabel vom Stripe an GPIO16
  5. HA findet ein neues Gerät (WLED) das einfach übernehmen, fertig

in HA ist ein vollwertiger LED Stripe angekommen mit allen verfügbaren Schaltern und Effekten


das wäre dann 4) von unseren Vorgaben und man könnte hier jetzt Schluß machen …

Software (WLED inkl. Temperatur)

ich hatte ja schon zu Anfang festgestellt

und genau deshalb und weil der ESP32 ja eh schon da ist der Dallas Temperatur-Sensor

dazu kann man nicht die zuoberst installierte Standart-Version von WLED verwenden, sondern benötigt einen Usermod, den hier herunterlade (ver. 15.4 für 4mb ESP32)

jetzt in HA o.g. WLED Gerät öffnen und hier klicken …


man landet auf der WEB-GUI vom WLED, dort dann klicken auf:
config - Security&Updates - Manual OTA Update

die zuvor heruntergeladene Datei
WLED_0.15.4_esp32_devb_Dallas_sensor_PWM_fan_mods_4mb.bin
auswählen, ignore Firmware Validation anklicken und update starten.

immer noch unter config zu usermods gehen und dies überprüfen:


Der GPIO für den Sensor ist also Pin4
mir reicht hier ein Sensor-update-Intervall von 120Sec.

Der Anschluss vom Sensor ist selbsterklärend:
GND am Sensor = GND am ESP32
VCC am Sensor = 5V am ESP32
DAT am Sensor = GPIO4 am ESP32
(da GND und 5V auch schon durch den LED belegt ist muss man das parallel anlöten)

danach sollte man nach einem Neustart unter
Info den Wert vom Temperatur-Sensor sehen

damit das jetzt in HA ankommt muss beim WLED MQTT eingeschaltet und konfiguriert werden.
also zurück zu config, dann Sync Interfaces und MQTT entsprechend dort konfigurieren


der Wert von “Device Topic” wird bei Euch anders lauten …
unter Broker müsst ihr die eigene IP von Eurem MQTT eintragen, analog dazu eigener user & Password

jetzt brauchen wir in HA einen Templatesensor also die config.yaml öffnen und dort eintragen

mqtt:
  sensor:
    - name: "SaunaTemp"
      state_topic: "wled/e7794c/temperature"
      device_class: temperature
      qos: 0
      unit_of_measurement: "°C"

ACHTUNG! bei “state_topic” das verwenden, was Euer WLED als “Device Topic” anzeigt wird…

nach einem HA Neustart müsstet Ihr unter Einstellungen - Geräte&Dienste einen neuen Sensor Namens “SaunaTemp” finden … wir haben es geschafft.

Dieser Sensor läuft mit ESP32 stabil per WLAN und ext. Antenne, also kein Problem im Keller
und zeigt einen exakten Temperatur-Wert bis 125 °C an.

Allerdings ist der Sensor nur verfügbar, wenn die Sauna auch eingeschaltet ist (der Strom zum Netzteil ist ja parallel zum Sauna-Ofen geschaltet), wenn die Sauna aus ist, sind Sensor & LED logischerweise “unbekannt”. Sowas stört natürlich immer etwas das dashboard, aber dazu kommen wir noch…

Schönes Projekt,

aber am Thermometer hätte ich dann auch nicht mehr gespart.

Dieses Thermometer war hier neulich als Pool-Thermometer ein Thema, aber sollte auch perfekt für Deine Sauna passen - nicht als Schätzeisen, sondern die korrekte Temp. in der Sauna messen:

Du hast recht, das war ja meine Light-Version.
ausserdem bin ich davon ausgegangen, daß ich keinen exakten Wert benötige für eine Benachrichtigung, daß meine Sauna jetzt aufgeheizt ist, egal ob die jetzt 72, 76 oder 80°C hat.

mit dem ESP32 geht es jetzt besser und der Dallas Sensor DS18B20 kostet kaum € 3,50

letzter Punkt:

Automationen in HomeAssistant

um die Sauna bequem vom wallpanel einschatlen zu können einen Button anlegen

danach diese Automationen (sind nur Beispiele)

Sauna on
`alias: 𐩘 Sauna on
description: Sauna wurde eingeschaltet, auto aus nach 4 Std.
triggers:
  - trigger: state
    entity_id:
      - switch.fi_sauna_schalter
    to: "on"
conditions: []
actions:
  - metadata: {}
    data:
      value: "{{ states('sensor.fi_sauna_energie_gesamt') }}"
    target:
      entity_id: input_number.sauna_start
    action: input_number.set_value
  - metadata: {}
    data: {}
    target:
      entity_id: input_boolean.sauna
    action: input_boolean.turn_on
  - delay:
      hours: 0
      minutes: 1
      seconds: 0
      milliseconds: 0
  - action: light.turn_off
    metadata: {}
    data: {}
    target:
      entity_id:
        - light.saunawled
  - delay:
      hours: 4
      minutes: 0
      seconds: 0
      milliseconds: 0
  - type: turn_off
    device_id: 556a6c398e035e5e91b9aa6819b92c31
    entity_id: a61088d5e535d426f389c1ff458d7457
    domain: switch
  - action: input_boolean.turn_off
    metadata: {}
    target:
      entity_id: input_boolean.sauna
    data: {}
mode: single
`

die setzt 2 Helfer die vorher noch angelegt werden müssen, schaltet die LED aus, wartet 4 Std. und schaltet danach den FI aus (Notabschaltung, falls man es mal vergessen sollte)

Helfer:
boolscher Helfer"Sauna" speichert ob Sauna EIN ist
Zahlenwert-Eingabe “Sauna_start” speichert den Strom-Zählerstand zu Beginn des Sauna-Gangs
Zahlenwert-Eingabe “SaunaEnde” speichert die entstandenen Stromkosten

Dashboard:

in Abhängigkeit vom Helfer “Sauna” werden am dashboard 2 Kachelkarten angezeigt:

Sauna ready
alias: 𐩘 Sauna ready
description: Sauna > 80°C
triggers:
  - trigger: numeric_state
    entity_id:
      - sensor.saunatemp
    above: 75
conditions: []
actions:
  - action: select.select_option
    metadata: {}
    target:
      entity_id: select.asus_pc_farbe
    data:
      option: Rot
  - action: input_text.set_value
    metadata: {}
    target:
      entity_id: input_text.scrolltext
    data:
      value: >-
        Deine Sauna befindet sich kurz vor der Kernschmelze, jetzt bei 80° C
        schwitzen.
  - action: script.turn_on
    metadata: {}
    target:
      entity_id: script.laufschrift
    data: {}
  - data:
      message: TTS
      data:
        ttl: 0
        priority: high
        media_stream: alarm_stream_max
        tts_text: Deine Sauna ist seit {{ now().strftime("%H:%M") }} fertig!
    action: notify.mobile_app_kpad
  - data: {}
    target:
      entity_id: button.10002607f5_7
    action: button.press
  - metadata: {}
    data: {}
    action: input_boolean.turn_on
    target:
      entity_id: input_boolean.sauna_ready
  - action: light.turn_on
    metadata: {}
    data:
      rgb_color:
        - 255
        - 106
        - 0
      brightness_pct: 50
    target:
      entity_id:
        - light.colorful_light
        - light.night_light
        - light.pyramide_sensor_led
  - action: light.turn_on
    metadata: {}
    data:
      rgb_color:
        - 255
        - 95
        - 31
      brightness_pct: 50
    target:
      device_id: 058921c61ae1c71235bfdc8f93de58df
mode: single

wenn die Sauna die Zieltemperatur erreicht hat, werden unterschiedliche akustische und visuelle Nachrichten ausgegeben und die LED in der Sauna eingeschaltet.

Sauna off

alias: 𐩘 Sauna off
description: Sauna off
triggers:

  • trigger: state
    entity_id:
    • switch.fi_sauna_schalter
      to:
    • “off”
      conditions:
      actions:
  • target:
    entity_id: input_number.saunaende
    data:
    value: >-
    {{ ((float(states(‘sensor.fi_sauna_energie_gesamt’)) -
    float(states(‘input_number.sauna_start’))) *
    float(states(‘input_number.preis_strom’))) | round(2) }}
    enabled: true
    action: input_number.set_value
  • data: {}
    target:
    entity_id:
    • input_boolean.sauna
    • input_boolean.sauna_ready
      action: input_boolean.turn_off
      mode: single

die letzte Automation berechnet die Stromkosten beim Ausschalten der Sauna und setzt alle Helfer auf Off und zeigt die Stromkosten am dashboard an …

zusätzliche Ideen (wer’s braucht)

man könnte eine Amortisations-Berechnung hinzufügen die feststellt, wann sich die Kosten für die private Sauna im Vergleich zu einem Sauna-Gang in einer öffentlichen Sauna amortisieren.

oder ihr habt weitere Anwendungen, an die ich bisher nicht gedacht habe bereits umgesetz oder geplant. Dann bitte hier posten, danke.

Hier ist meine Sauna Karte.

Ich habe mir ein paar nützliche Sensoren gebaut.

In der Sauna nutze ich eine smarte Leuchte und einen Govee Gradient Strip unter den Bänken. Die Temperatur messe ich mit einem Dallas Sensor an einem ESP! Strom tracke ich nicht, da ich einen Holzofen nutze. Mit der KI habe ich mir den Helfer Sauna Aufheizzeit gebaut. Aufgrund der Heizrate und meiner Zieltemperatur errechnet sich hier ziemlich genau, wann die Sauna startklar ist. Der Balken läuft dann je nach Fortschritt durch. Ich hatte Chatgpt mit ein paar Vergangenheitswerten gefüttert, daraufhin habe ich mir dann mehrere Helfer gebaut, die den Template-Helfer Aufheizzeit füttern. Der Sensor ist so gebaut, dass er bei jedem Aufheizvorgang dazulernt.

Mit einem Tap auf die Überschrift Wellness öffnet sich ein Popup mit all meinen Aufgüssen:

1 „Gefällt mir“

coole Sache, Respekt.

würdest Du deine Automation/Helfer hier ggf. teilen?

Das wäre super toll …

ich glaube, es ist tatsächlich einfacher, wenn du chatgpt bemühst.

Es sind tatsächlich so viele Helfer im Hintergrund, habe selbst schon fast den Durchblick verloren.

Alleine für die lernende Aufheizrate gibt es 4 Helfer. Aufgrund meiner historischen Werte und des Ofens hat chatgpt mir 3 Helfer gebaut, die unterschiedliche Steigraten bei den Temperaturzonen ermitteln. Am Anfang steigt die Temperatur schneller, später eher langsamer. Ist wahrscheinlich auch nicht mit einem Elektroofen vergleichbar. Meine Sauna ist zudem aussen. Jede Sauna heizt anders

Kann echt jedem raten: Spielt mit chatgpt und gebt der KI ein paar Eurer Daten, dann ist es individuell.

ja, hab ich inzwischen schon mehrfach gelesen, daß man das damit machen kann, aber null Erfahrung. Mache es bisher noch “old school” Wäre für eine kleine Starthilfe dankbar. Ich dachte chatgpt ist nicht kostenlos oder hat sich das geändert?

Das ist der lernende Sensor.

Je nach Temperatur holt dieser sich die Raten aus einer der drei Sensoren.

{% if not is_state(‘binary_sensor.sauna_heizt’, ‘on’) %}
0
{% else %}
{% set t = states(‘sensor.saunatemp_sauna’) | float(0) %}

         {% set z1 = states('sensor.sauna_rate_zone_1_mean') | float(1.0) %}
         {% set z2 = states('sensor.sauna_rate_zone_2_mean') | float(4.5) %}
         {% set z3 = states('sensor.sauna_rate_zone_3_mean') | float(2.4) %}
         
         {% if t < 20 %}
           {{ z1 }}
         {% elif t < 40 %}
           {{ z2 }}
         {% else %}
           {{ z3 }}
         {% endif %}
       {% endif %}

Das ist der Sensor, der die Zeit anzeigt:

{% set aktuell = states(‘sensor.saunatemp_sauna’) | float(0) %}
{% set raw_rate = states(‘sensor.sauna_aufheizrate_lernend’) | float(0) %}
{% set ziel = 80 %}

{% set min_rate = 0.1 %}
{% set last_change = states.sensor.sauna_aufheizrate_lernend.last_changed %}
{% set sekunden = (now() - last_change).total_seconds() %}

{% if aktuell >= ziel %}
Temperatur erreicht!

{% elif raw_rate <= 0 and sekunden > 300 %}
Sauna aus

{% else %}
{% set rate = raw_rate if raw_rate > min_rate else min_rate %}
{% set minuten = ((ziel - aktuell) / rate) | round(0) | int %}
{% set fertig = (now() + timedelta(minutes=minuten)).strftime(‘%H:%M’) %}
{{ minuten }} Minuten ({{ fertig }})
{% endif %}

Dann gibt es noch diverse Statistik Sensoren etc. Hoch komplex, ich kann es dir nicht alles erklären, ohne einen Roman zu schreiben.

Eine gewissen Anzahl von Anfragen ist kostenlos bei chatGPt. Dann kann man warten oder kauft ein Abo. Ich komme mit der kostenlosen Variante hin.

ChatGPt erklärt dir zu dem, was welcher Sensor macht und was du genau tun musst.

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)
s.a.: (Neues Update & Features - Hier in der Community 🫶)