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:
| Reedkontakt | ESP32 |
|---|---|
| Anschluss 1 | GPIO27 |
| Anschluss 2 | GND |
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 + Reedkontakt | Zigbee-Sensor | |
|---|---|---|
| Preis | sehr günstig | günstig |
| Stromversorgung | am besten USB | Batterie |
| mehrere Kontakte | problemlos möglich | meist ein Kontakt |
| Erweiterbarkeit | sehr hoch | gering |
| Einrichtung | etwas Bastelarbeit | sehr einfach |
| lokale Nutzung | ja | ja, 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.
