ESPHome-SmartHeating-Solution

DIY Smart Wall Thermostats: Ein Leitfaden für die Aufrüstung Ihrer Hausheizung

Disclaimer für Arbeiten mit Strom im Haushalt

Die Arbeiten mit elektrischen Anlagen und Geräten im Haushalt können gefährlich sein und sollten nur von qualifizierten Fachkräften durchgeführt werden.

Motivation

Die Wandthermostate für die Steuerung der Fußbodenheizung sollten durch Smart Home Thermostate ersetzt werden. Versprochene Vorteile:

Ausgangslage

Die aktuellen Thermostate arbeiten mit einem Bimetallstreifen, wodurch die Temperatur nur ungenau eingestellt werden kann. Im Wohnzimmer steht das Thermostat bspw. bei 29grad und der Raum hat eine Temperatur von 22grad.

Aktuelles Thermostat:

Der Weg

Reverse Engineering der aktuellen Umsetzung

Wie auf dem Bild “CurrentThermostat” zu sehen, wird der Aktor im Heizkreisverteiler (HKV) recht einfach über den Kontakt des Bi Metallstreifens gesteuert –> also ist das auch nur ein Schalter und könnte auch durch einen Lichtschalter ersetzt. Da die Aktoren mit 230V betrieben werden, sind keine weiteren Bauteile im aktuellen Aufbau vorhanden. Vom HKV zum Thermostat liegt ein NYM-J 5x1,5 mm² Leitung.

Internetrecherche

Mit dem erlangten wissen ging es auf die Suche. Es gibt eine Vielzahl von von Anbietern, beachtet man eine mögliche externe Steuerung und Integration in Homeassistant engt sich der Markt ein und die Lösungen werden für den Austausch von 7 Thermostaten schon recht ordentlich bis hin zu eine möglichen Gateway, welches für die Kommunikation der Geräte und der Cloud genutzt wird, also versuchen wir es einfach selbst.

Ergebnis: min. 500€ Investition

Für kein direktes Einsparpotential, einfach zu teuer.

MACHEN WIR ES SELBST!

Bauteile

Liste der benötigten Bauteile pro Thermostat

Werkzeug

Liste des benötigten Wekzeug

ESP8266 Code

Der Code für den Mikrocontroller wurde mit Hilfe von ESPHome erzeugt und geflasht.

# These substitutions allow the end user to override certain values
substitutions:
  room_name: "ShowRoom"
  name: smartheat-showshowroom
  friendly_name: SmartHeat_showRoom

esp8266:
  board: d1_mini

# Enable logging
logger:
  level: INFO

# Enable Home Assistant API
api:
  encryption:
    key: "1234567890asdfghjklö23424234234"

ota:
  platform: esphome
  password: "1234567890asdfghjklö"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Smartheat-showroom"
    password: "1234567890"
  # Optional manual IP
  manual_ip:
    static_ip: AAA.BBB.CCC.DDD
    gateway: !secret network_gateway
    subnet: !secret network_subnet

globals:
  - id: display_state
    type: "bool"
    initial_value: "1"

  - id: display_counter
    type: "int"
    initial_value: "0"

esphome:
  name: "${name}"
  friendly_name: "${friendly_name}"
  comment: ""
  area: ""
  on_loop:
    then:
      - lambda: |-
          if(id(display_counter) == 625 && id(display_state) == 1) {
              id(heat_display).turn_off();
              id(display_state) = 0;
              id(display_counter) = 0;
          }
          else if (id(display_state) == 1){
            id(display_counter) += 1;
          }

time:
  - platform: homeassistant
    id: esptime

font:
  - file: "gfonts://Roboto"
    id: roboto
    size: 10

sensor:
  - platform: dht
    model: DHT22_TYPE2
    id: dhtsensor
    pin: D5
    temperature:
      id: temp
      name: "Temperature"
      filters:
        - offset: -4.0
        - throttle: 60s
      on_value:
        then:
          - lambda: |-
              if (id(temp).state < id(soll_temp).state){
                id(heat_relay).turn_on();
              }
              else {
                id(heat_relay).turn_off();
              }
    humidity:
      id: hum
      name: "Humidity"
    update_interval: 5s

# Example configuration entry
number:
  - platform: template
    name: sollTemperatur"
    id: soll_temp
    optimistic: true
    update_interval: 5s
    restore_value: true
    initial_value: 15
    min_value: 5
    max_value: 30
    step: 0.25

# Example configuration entry
binary_sensor:
  - platform: gpio
    pin:
      number: D6
      mode:
        input: true
        pullup: true
    id: up_button
    name: "Up"
    on_press:
      if:
        condition:
          number.in_range:
            id: soll_temp
            below: 29.75
        then:
          - lambda: |-
              if (id(display_state) == 0){
                id(heat_display).turn_on();
                id(display_state) = 1;
              }
              else {
                id(soll_temp).publish_state(id(soll_temp).state += 0.25);
              }

              id(display_counter) = 0;

  - platform: gpio
    pin:
      number: D7
      mode:
        input: true
        pullup: true
    id: down_button
    name: "Down"
    on_press:
      if:
        condition:
          number.in_range:
            id: soll_temp
            above: 5.25
        then:
          - lambda: |-
              if (id(display_state) == 0){
                id(heat_display).turn_on();
                id(display_state) = 1;
              }
              else {
                id(soll_temp).publish_state(id(soll_temp).state -= 0.25);
              }
              id(display_counter) = 0;

switch:
  - platform: gpio
    name: "Heat Relay"
    id: heat_relay
    pin: D0

i2c:
  sda: D1
  scl: D2
  scan: true
  frequency: 800kHz
  id: bus_a

display:
  - platform: ssd1306_i2c
    model: "SH1106 128x64"
    id: heat_display
    contrast: 50%
    address: 0x3C
    lambda: |
      it.strftime(85, 0, id(roboto), "%H:%M:%S", id(esptime).now());
      it.printf(0, 10, id(roboto), "Temp: %.2fC", id(temp).state);
      it.printf(0, 20, id(roboto), "Hum: %.2f", id(hum).state);
      it.printf(0, 30, id(roboto), "Soll: %.2f", id(soll_temp).state);
      if (id(heat_relay).state == 1){
        it.printf(0, 54, id(roboto), "Heizen ein");
      }
      else if (id(heat_relay).state == 0){
         it.printf(0, 54, id(roboto), "Heizen aus");
      }

Schaltpläne

Schematisch

Breadboard

3D Druck

Link to Project

Planändeerung

Zu Begin sollte jedes Thermostat ein eigenes Netzteil erhalten, dies wurde Aufgrund vom Spulenfiepen der Mini Neztzteile in den HKV verlegt. Spart Ressourcen und Platz in der Unterputzdose.

Der Zusammenbau

Finish

Kosten

Durch den Einsatz der DIY Lösung der Preis pro Thermostat auf unter 8€ gedrückt werden.

Fazit

Der Wechsel zu smarten Wandthermostaten bietet mehr Komfort, präzisere Steuerung und die Möglichkeit zur Integration in Home Assistant – und das zu einem Bruchteil der Kosten kommerzieller Lösungen. Dieses DIY-Projekt zeigt, dass man mit etwas technischem Geschick und Kreativität eine funktionale und stilvolle Lösung selbst umsetzen kann.

Die selbstgebauten Thermostate überzeugen durch Effizienz, Unabhängigkeit und modernes Design. Es ist ein inspirierendes Beispiel dafür, wie sich smarte Technologien individuell und kostengünstig realisieren lassen. Viel Erfolg beim Nachbauen – und denkt immer an die Sicherheit bei der Arbeit mit elektrischen Anlagen! 😊

OUTTAKES