ESP32, ESPHome und SmarthomeHome Assistant

ESP32 Tür- und Fensterkontakt mit ESPHome selber bauen

Ob ein Fenster offen steht oder eine Tür geschlossen ist, gehört zu den einfachsten Informationen im Smart Home. Dafür muss man allerdings nicht zwingend einen fertigen Zigbee- oder WLAN-Sensor kaufen. Mit einem ESP32, einem Reedkontakt und ESPHome lässt sich ein eigener Tür- und Fensterkontakt für wenige Euro bauen.

Technisch ist das Projekt ausgesprochen einfach. Ein kleiner Magnet betätigt einen Reedkontakt. Der ESP32 erkennt dessen Zustand und überträgt ihn über ESPHome direkt an Home Assistant.

Interessant wird der Selbstbau vor allem dann, wenn wir den ESP32 später noch erweitern möchten. An einem einzigen Board können beispielsweise mehrere Fensterkontakte, ein Temperatursensor oder weitere Eingänge angeschlossen werden.

Hinweis: Dieser Artikel enthält Affiliate-Links. Bei einem Kauf über einen gekennzeichneten Link erhalte ich eine kleine Provision. Für dich bleibt der Preis unverändert.

Was brauchen wir für den Fensterkontakt?

Für die einfachste Variante benötigen wir nur wenige Bauteile:

  • ESP32 Development Board
  • Reedkontakt mit Magnet
  • Verbindungskabel
  • USB-Netzteil und USB-Kabel
  • optional kleines Kunststoffgehäuse

ESP32 Development Boards:
ESP32 Boards bei Amazon ansehen*

Reedkontakte mit Magnet:
Reedkontakte bei Amazon ansehen*

Dupont-Kabel für den Versuchsaufbau:
Dupont-Kabel bei Amazon ansehen*

Wie funktioniert ein Reedkontakt?

Ein Reedkontakt ist ein kleiner magnetisch betätigter Schalter. Im Inneren befinden sich zwei Kontakte, die sich durch ein Magnetfeld öffnen oder schließen.

Für einen Fensterkontakt wird ein Teil am Rahmen und der Magnet am beweglichen Fensterflügel befestigt. Ist das Fenster geschlossen, befindet sich der Magnet direkt neben dem Reedkontakt. Beim Öffnen entfernt sich der Magnet und der Zustand des Kontaktes verändert sich.

Der ESP32 muss deshalb keine komplizierten Messungen durchführen. Er erkennt lediglich, ob ein GPIO gerade HIGH oder LOW ist.

ESP32 und Reedkontakt anschließen

Für unser Beispiel verwende ich GPIO27. Grundsätzlich können auch viele andere geeignete GPIOs verwendet werden.

Der Anschluss ist ausgesprochen einfach:

ReedkontaktESP32
Anschluss 1GPIO27
Anschluss 2GND

Wir verwenden anschließend den internen Pull-up-Widerstand des ESP32. Dadurch benötigen wir für den eigentlichen Kontakt keinen zusätzlichen Widerstand.

Türkontakt in ESPHome einrichten

ESPHome macht die Auswertung sehr einfach. Der Reedkontakt wird als GPIO Binary Sensor eingerichtet.

binary_sensor:
  - platform: gpio
    name: "Fenster Wohnzimmer"
    device_class: window
    pin:
      number: GPIO27
      mode:
        input: true
        pullup: true
      inverted: true

Nach dem Flashen des ESP32 erscheint der Sensor über die ESPHome-Integration in Home Assistant.

Durch device_class: window weiß Home Assistant außerdem, dass es sich um ein Fenster handelt. Der Zustand wird entsprechend als geöffnet beziehungsweise geschlossen dargestellt.

Falls dein Reedkontakt genau umgekehrt arbeitet, kannst du den Wert bei inverted entsprechend ändern.

Türkontakt statt Fensterkontakt

Der gleiche Aufbau funktioniert natürlich auch an einer Tür. Lediglich die Device Class wird geändert:

binary_sensor:
  - platform: gpio
    name: "Haustür"
    device_class: door
    pin:
      number: GPIO27
      mode:
        input: true
        pullup: true
      inverted: true

Home Assistant zeigt die Entität anschließend passend als Tür an.

Mehrere Fenster mit einem ESP32 überwachen

Hier beginnt der Selbstbau gegenüber vielen fertigen Kontaktsensoren interessant zu werden. Ein ESP32 besitzt zahlreiche GPIOs. Wir können deshalb mehrere Reedkontakte mit einem einzigen Board überwachen.

Das bietet sich beispielsweise an, wenn mehrere Fenster dicht beieinander liegen.

binary_sensor:
  - platform: gpio
    name: "Fenster Wohnzimmer links"
    device_class: window
    pin:
      number: GPIO27
      mode:
        input: true
        pullup: true
      inverted: true

  - platform: gpio
    name: "Fenster Wohnzimmer rechts"
    device_class: window
    pin:
      number: GPIO26
      mode:
        input: true
        pullup: true
      inverted: true

  - platform: gpio
    name: "Terrassentür"
    device_class: door
    pin:
      number: GPIO25
      mode:
        input: true
        pullup: true
      inverted: true

Damit überwacht ein einziger ESP32 zwei Fenster und eine Terrassentür.

Bei längeren Leitungen würde ich den Aufbau allerdings gründlich testen. Je länger die Kabel werden, desto eher können Störungen eine Rolle spielen.

Fensterstatus in Home Assistant anzeigen

Nach der Einrichtung stehen die Kontakte als normale Binary Sensoren in Home Assistant zur Verfügung. Sie lassen sich auf einem Dashboard anzeigen und natürlich für Automationen verwenden.

Praktisch finde ich beispielsweise eine Übersicht aller Fenster im Haus. Vor dem Verlassen des Hauses reicht dann ein Blick auf das Dashboard, um zu sehen, ob irgendwo noch ein Fenster geöffnet ist.

Heizung bei geöffnetem Fenster ausschalten

Eine klassische Anwendung ist die Heizungssteuerung. Wird ein Fenster geöffnet, kann Home Assistant nach kurzer Verzögerung das Heizkörperthermostat herunterregeln.

Die Verzögerung ist sinnvoll, damit ein kurzes Öffnen des Fensters nicht sofort eine Automation auslöst. Bleibt das Fenster beispielsweise länger als zwei Minuten geöffnet, wird die Heizung reduziert.

Nach dem Schließen kann Home Assistant wieder auf die vorherige Solltemperatur wechseln.

Benachrichtigung bei offenem Fenster

Eine weitere einfache Automation ist eine Erinnerung. Home Assistant kann beispielsweise eine Nachricht senden, wenn ein Fenster länger als 15 Minuten geöffnet bleibt.

Das ist gerade im Winter praktisch. Statt morgens irgendwann festzustellen, dass das Badezimmerfenster seit zwei Stunden offen steht, meldet sich Home Assistant automatisch.

Warnung beim Verlassen des Hauses

Richtig nützlich wird der Fensterkontakt zusammen mit einer Anwesenheitserkennung. Erkennt Home Assistant, dass niemand mehr zu Hause ist, kann gleichzeitig der Zustand aller Fenster und Türen geprüft werden.

Ist noch ein Fenster geöffnet, kommt eine Push-Nachricht auf das Smartphone.

Damit lässt sich mit sehr einfacher Hardware eine praktische Sicherheitsfunktion aufbauen.

Reedkontakt entprellen

Mechanische Kontakte können beim Umschalten kurzzeitig mehrfach zwischen offen und geschlossen wechseln. Dieses sogenannte Prellen ist bei einem langsam betätigten Fensterkontakt meistens kein großes Problem. Trotzdem können wir den Zustand in ESPHome filtern.

binary_sensor:
  - platform: gpio
    name: "Fenster Wohnzimmer"
    device_class: window
    pin:
      number: GPIO27
      mode:
        input: true
        pullup: true
      inverted: true
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms

Kurze Zustandsänderungen werden dadurch herausgefiltert.

ESP32 direkt am Fenster mit USB versorgen

Für einen ersten Aufbau würde ich den ESP32 einfach über USB versorgen. Das ist zuverlässig und ESPHome bleibt jederzeit über WLAN erreichbar.

Wenn sich in der Nähe des Fensters eine Steckdose befindet, ist das meiner Meinung nach die unkomplizierteste Lösung.

Kleine USB-Netzteile bei Amazon ansehen*

Funktioniert der ESP32-Fensterkontakt mit Batterie?

Grundsätzlich ja, allerdings würde ich dafür keinen normalen ESP32-Development-Board-Aufbau verwenden, der dauerhaft mit aktivem WLAN läuft. Der Stromverbrauch wäre für einen klassischen batteriebetriebenen Fensterkontakt viel zu hoch.

Für einen Batteriebetrieb muss der ESP32 die meiste Zeit schlafen. Der sogenannte Deep Sleep reduziert den Verbrauch erheblich. Beim Öffnen oder Schließen müsste der Mikrocontroller aufgeweckt werden, den neuen Zustand an Home Assistant übertragen und anschließend wieder schlafen gehen.

Das ist möglich, macht das Projekt aber deutlich komplexer. Zusätzlich verbrauchen Spannungsregler und USB-UART-Chips vieler Development Boards auch im Deep Sleep weiterhin Strom.

Wenn du einen einzelnen batteriebetriebenen Fensterkontakt möchtest, ist ein fertiger Zigbee-Sensor deshalb häufig die praktischere Lösung.

Zigbee Tür- und Fensterkontakte bei Amazon ansehen*

Wann lohnt sich der ESP32-Selbstbau trotzdem?

Der ESP32 spielt seine Vorteile aus, wenn eine Stromversorgung vorhanden ist oder mehrere Sensoren an einer Stelle zusammenlaufen.

Ein ESP32 könnte beispielsweise gleichzeitig drei Fensterkontakte, einen Temperatur- und Luftfeuchtigkeitssensor sowie einen Helligkeitssensor auswerten.

Dann ersetzt ein einziges ESPHome-Gerät gleich mehrere separate Sensoren.

Manipulationssicherer Aufbau mit Öffnerkontakt

Wer längere Leitungen verwendet oder den Kontakt auch für Sicherheitsfunktionen einsetzen möchte, kann über einen sogenannten Öffnerkontakt nachdenken.

Dabei ist der Stromkreis im normalen geschlossenen Zustand ebenfalls geschlossen. Wird das Fenster geöffnet oder die Leitung unterbrochen, verändert sich der Eingang.

Dadurch kann eine durchtrennte Leitung nicht einfach wie ein dauerhaft geschlossenes Fenster aussehen. Für eine echte Einbruchmeldeanlage gelten allerdings deutlich höhere Anforderungen. Dieses ESPHome-Projekt ersetzt keine zertifizierte Alarmanlage.

ESP32 und Reedkontakt in ein Gehäuse bauen

Für den dauerhaften Betrieb würde ich den ESP32 in einem kleinen Kunststoffgehäuse unterbringen. Der Reedkontakt selbst kann über ein dünnes Kabel mit dem ESP32 verbunden werden.

Dadurch muss das relativ große ESP32-Board nicht direkt auf dem Fensterrahmen sitzen. Dort befinden sich lediglich der kleine Reedkontakt und der Magnet.

Kleine Elektronikgehäuse bei Amazon ansehen*

Noch mehr Sensoren an den ESP32 anschließen

Wenn der ESP32 ohnehin dauerhaft am Fenster installiert ist, würde ich überlegen, welche Informationen an dieser Stelle noch interessant sind.

  • Temperatur
  • Luftfeuchtigkeit
  • Helligkeit
  • mehrere Fensterkontakte
  • Türkontakt
  • Bewegungsmelder

Gerade Temperatur und Luftfeuchtigkeit lassen sich mit günstigen Sensoren einfach ergänzen. Dadurch wird aus dem einfachen Fensterkontakt ein kleiner Raumsensor.

Weitere ESP32-Projekte für Home Assistant

Wenn du noch weitere ESP32-Boards in der Bastelkiste hast, findest du inzwischen einige Projekte auf smarthome-tricks.de. Eine Übersicht bietet mein ESP8266- und ESP32-Hub.

Interessant ist beispielsweise der ESP32 Präsenzmelder mit LD2410 und ESPHome. Statt eines einfachen Bewegungsmelders verwendet er einen 24-GHz-Radarsensor und kann dadurch auch relativ ruhig sitzende Personen erkennen.

Auch eine ESP32 IR-Fernbedienung für Home Assistant lässt sich mit wenigen Bauteilen aufbauen. Damit können ältere Fernseher, Receiver oder andere Geräte mit Infrarot-Fernbedienung in Home Assistant eingebunden werden.

Wer sich für Energieüberwachung interessiert, kann außerdem einen digitalen Stromzähler mit ESP32 und ESPHome auslesen.

ESP32 oder fertiger Zigbee-Fensterkontakt?

ESP32 + ReedkontaktZigbee-Sensor
Preissehr günstiggünstig
Stromversorgungam besten USBBatterie
mehrere Kontakteproblemlos möglichmeist ein Kontakt
Erweiterbarkeitsehr hochgering
Einrichtungetwas Bastelarbeitsehr einfach
lokale Nutzungjaja, mit eigener Zigbee-Zentrale

Für ein einzelnes Fenster ohne Stromanschluss würde ich eher einen Zigbee-Sensor verwenden. Wenn mehrere Kontakte zusammenlaufen oder zusätzliche Sensoren geplant sind, wird der ESP32 dagegen schnell interessant.

Fazit: Einfaches ESPHome-Projekt mit vielen Möglichkeiten

Ein Tür- oder Fensterkontakt gehört zu den einfachsten Projekten, die man mit ESP32 und ESPHome umsetzen kann. Für den eigentlichen Sensor benötigen wir lediglich einen günstigen Reedkontakt und einen freien GPIO.

In Home Assistant steht der Zustand anschließend direkt für Dashboards und Automationen zur Verfügung. Damit lässt sich die Heizung beim Lüften absenken, vor offenen Fenstern warnen oder beim Verlassen des Hauses prüfen, ob wirklich alles geschlossen ist.

Besonders interessant finde ich den Selbstbau, wenn mehrere Kontakte an einem ESP32 angeschlossen werden. Dann wird aus einem einfachen Bastelprojekt schnell eine günstige zentrale Fensterüberwachung für einen ganzen Raum.

* Affiliate-Link: Bei einem Kauf über einen gekennzeichneten Link erhalte ich eine Provision. Für dich bleibt der Preis unverändert.

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert