Home Assistant – Haustürklingel als binary_sensor mit ESPHome

Home Assistant Banner scaled - Home Assistant - Haustürklingel als binary_sensor mit ESPHome

Wer meinen Blog verfolgt, weiß: An meiner Haustür haben in den letzten Jahren schon einige Kameras und Klingeln ihren Dienst getan. Angefangen hat es mit einer Ring, danach kam eine Eufy, zuletzt eine Reolink – allesamt akkubetriebene Video-Türklingeln.

Und bei allen dreien bin ich am Ende über den gleichen Punkt gestolpert: den Kompromiss zwischen Bewegungsempfindlichkeit und Akkulaufzeit. Gerade zur kalten Jahreszeit, in der Akkus ohnehin schwächeln, und gerade an einer belebten Straße mit Durchgangsverkehr wird das schnell zur Zwickmühle. Stelle ich die Bewegungserkennung empfindlich ein, ist der Akku ratzfatz leer, weil jedes vorbeifahrende Auto und jeder Passant ein Event (PIR) auslöst. Drossle ich sie, verpasse ich womöglich genau die Bewegung, die mich interessiert hätte. So richtig glücklich macht das auf Dauer nicht.

Irgendwann war für mich klar: Ich will raus aus diesem Kompromiss – und zwar mit Dauerstrom. Wie ihr in meinem letzten Artikel gelesen habt, hängt an der entscheidenden Ecke inzwischen eine fest verkabelte Reolink TrackFlex Floodlight: Strom aus der Leitung, kein Akku, kein Nachladen, dauerhaft da.

Nur: Eine Kamera sieht zwar Bewegung, aber sie weiß nicht, wann tatsächlich jemand klingelt. Und genau dieses „Es hat geklingelt“-Signal wollte ich zurück in Home Assistant holen. Klingt nach einer Kleinigkeit. War es nicht. 🙈

Was ich eigentlich wollte

Die Anforderung war schnell formuliert, aber genau da lag der Haken:

Home Assistant sollte mitbekommen, wenn jemand am ganz normalen Klingeltaster drückt – für Push-Benachrichtigungen, Ansagen, was auch immer. Aber die Klingel sollte dabei um jeden Preis eine ganz normale Klingel bleiben. Heißt: Wenn Home Assistant, das WLAN oder irgendein Bastel-ESP mal streikt, muss es an der Tür trotzdem bimmeln. Einen Single Point of Failure lasse ich mir bei etwas so Grundlegendem wie der Türklingel nicht ins Haus.

Mit dieser einen Bedingung waren schon die halben „smarten“ Lösungen raus.

Was ich alles ausprobiert habe

Bevor ich bei der finalen Lösung gelandet bin, habe ich mich durch ein paar Sackgassen gearbeitet. Der Vollständigkeit halber – und weil euch das vielleicht den ein oder anderen Fehlversuch erspart:

  • ❌ ESPHome-basierte Doorbell von Zuidwijk: Cooles Projekt, keine Frage. Aber bei dieser Art Lösung läuft das Klingeln über den ESP bzw. über die Smart-Home-Zentrale. Gibt es ein Problem mit ESPHome oder dem Smart Home, klingelt es nicht mehr. Genau das wollte ich nicht.
  • ❌ Zigbee-Vibrationssensor am Gong: Sollte über die Erschütterung des Gongs auslösen. In der Praxis unzuverlässig – mal löste er aus, mal nicht.
  • ❌ Zigbee Aqara Tür-/Fensterkontakt im Gong-Gehäuse: Der Reed-Kontakt sollte durch den beweglichen Anker des Gongs schalten. Das war schon besser, aber eben nicht verlässlich genug: mal blieb der Status hängen, mal wurde ausgelöst, obwohl gar niemand geklingelt hat. Für eine Türklingel? Nicht gut genug.
  • ❌ ESP32 mit Optokoppler / Koppelrelais: Funktioniert prinzipiell, war mir aber zu viel Gebastel und zu fummelig für eine saubere Lösung im Sicherungskasten.
  • ❌ Shelly Plus Uni: Betrieben wird er mit AC – messen kann er aber nur DC, nicht AC. Ergebnis: gegrillt. Mein Fehler, Amazon-Retoure. 🙂
  • ✅ ESP8266 D1 Mini mit ESPHome und einem Eltako-Relais: Und das ist am Ende die Lösung geworden, mit der ich rundum zufrieden bin.

Die Lösung: Wemos D1 Mini + ESPHome + Eltako R12-100-12V

Der Trick an der Sache ist eigentlich unspektakulär – und genau deshalb so robust: Der Klingelkreis bleibt komplett eigenständig. Taster → Klingeltrafo → Gong. Der Gong bimmelt also ganz normal, völlig unabhängig von Home Assistant, ESPHome oder WLAN.

Parallel zum Gong hängt die Spule eines Eltako R12-100-12V. Das ist ein elektromechanisches Schaltrelais für die Hutschiene mit einem potenzialfreien Schließer. Sobald jemand klingelt, liegen die 12 V an, das Relais zieht an und schließt seinen Kontakt. Und dieser trockene Kontakt hängt am GPIO des ESP8266 D1 Mini. ESPHome erkennt das Schließen und meldet einen binary_sensor an Home Assistant.

Das Schöne daran: Home Assistant weiß jetzt Bescheid, wenn es klingelt – aber selbst wenn HAOS mal steht oder der ESP abraucht, klingelt es an der Tür trotzdem. Genau so wollte ich das.

Ein Wort zur Spannung, dann ist’s auch gut: Wichtig ist nur, dass die Steuerspannung des Relais zum Klingeltrafo passt. Bei mir sind das 12 V, also das R12-100-12V. Wer einen 8-V-Trafo hat, nimmt entsprechend die 8-V-Variante. Mehr Gedanken muss man sich da nicht machen.

Wichtig vorweg: In den Sicherungskasten gehört eine Elektrofachkraft. Ich beschreibe hier ganz bewusst keine Verdrahtung und keine Klemmenbelegung – das ist Sache vom Elektriker. Mir geht es hier ums Prinzip und vor allem um die Software-Seite.

Verwendete Komponenten

Die ESPHome-Konfiguration

Kommen wir zum spannenden Teil – der Software. Auf dem D1 Mini läuft ESPHome, die komplette Konfiguration ist erfreulich kurz. Hier meine YAML:

esphome:
  name: azdelivery-d1-mini
  friendly_name: AZDelivery D1 Mini
  name_add_mac_suffix: true

esp8266:
  board: d1_mini

logger:

api:
  encryption:
    key: "XXX"

ota:
  - platform: esphome
    password: !secret azdelivery_d1_mini__ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: D1 Mini Fallback
    password: fallback1234

captive_portal:

binary_sensor:
  - platform: gpio
    name: "Haustürgong Flur EG"
    id: haustuer_klingel
    device_class: sound
    pin:
      number: D5
      mode:
        input: true
        pullup: true
      inverted: true
    filters:
      # Entprellung, damit ein Klingeldruck nicht zig Events erzeugt
      - delayed_on: 30ms
      - delayed_off: 150ms
    on_press:
      - logger.log: "Klingel gedrückt, Haustürgong wurde ausgelöst"

Ein paar Worte dazu, ohne dass daraus eine Schritt-für-Schritt-Anleitung wird:

  • Der Kontakt hängt an D5 (GPIO14) gegen GND. Mit pullup: true und inverted: true ist der Pin im Ruhezustand HIGH und meldet „aus“ – erst wenn das Relais schließt und den Pin auf Masse zieht, wird daraus ein „erkannt“.
  • Die Entprellung (delayed_on / delayed_off) sorgt dafür, dass ein einzelner Klingeldruck nicht als Salve aus zig Events durchrauscht.
  • Als device_class habe ich sound gewählt – in Home Assistant taucht der Sensor dann als „Geräusch erkannt“ auf. Einen dedizierten „Türklingel“-Typ gibt es in HA leider nicht.
  • Das on_press-Logging ist reiner Komfort fürs Debuggen.

Sobald der ESP läuft, erscheint der binary_sensor direkt in Home Assistant – ohne Gefummel, ganz normal über die ESPHome-Integration.

Screenshot 2026 07 01 161718 800x577 - Home Assistant - Haustürklingel als binary_sensor mit ESPHome

Push-Benachrichtigung mit Kamerabild

Der binary_sensor allein macht ja noch keine Benachrichtigung. Ich wollte nicht einfach nur ein „Es hat geklingelt“ aufs Handy, sondern direkt auch sehen, wer vor der Tür steht.

Dafür wird im Moment des Klingelns ein Schnappschuss der Haustürkamera gemacht und an die Push-Mitteilung angehängt. Per Force Touch / Haptic Touch wird das Bild dann groß. Der Clou dabei: Ohne diesen Schnappschuss würde beim Aufziehen immer das aktuelle Live-Bild geladen – und das zeigt eben nicht mehr den Moment, in dem geklingelt wurde. Der Schnappschuss friert genau diesen Augenblick ein.

alias: Benachrichtigung - Haustürgong Haustürklingel
description: ""
triggers:
  - trigger: state
    entity_id: binary_sensor.azdelivery_d1_mini_hausturgong_flur_eg
    to:
      - "on"
    from:
      - "off"
conditions:
  - condition: template
    value_template: |
      {{ this.attributes.last_triggered is none
         or (now() - this.attributes.last_triggered).total_seconds() > 30 }}
actions:
  - action: camera.snapshot
    target:
      entity_id: camera.kamera_haustur_schnappschusse_in_standardauflosung
    data:
      filename: /config/www/reo_klingel_{{ snapshot_ts }}.jpg
  - action: shell_command.cleanup_reolink_snapshots
    metadata: {}
    data: {}
  - action: notify.mobile_app_nh_iphone
    data:
      title: 🛎️ Haustürklingel betätigt
      message: Jemand ist an der Haustür!! (Haptic Touch = Großes Bild)
      data:
        url: /lovelace/kameras-webrtc
        clickAction: /lovelace/kameras-webrtc
        image: >-
          https://external-homeassistant-url-tld/local/reo_klingel_{{
          snapshot_ts }}.jpg
    enabled: false
  - action: notify.erwachsene
    data:
      title: 🛎️ Haustürklingel betätigt
      message: Jemand ist an der Haustür!! (Haptic Touch = Großes Bild)
      data:
        url: /lovelace/kameras-webrtc
        clickAction: /lovelace/kameras-webrtc
        image: >-
          https://external-homeassistant-url-tld/local/reo_klingel_{{
          snapshot_ts }}.jpg
    enabled: true
mode: single
variables:
  snapshot_ts: "{{ now().strftime('%Y%m%d-%H%M%S') }}"

Damit mir die Schnappschüsse nicht mit der Zeit das Home Assistant OS vollmüllen, räumt ein kleiner shell_command regelmäßig (immer beim Auslösen der Automation) auf und löscht alles, was älter als 30 Tage ist. Der kommt in die configuration.yaml:

shell_command:
  cleanup_reolink_snapshots: "find /config/www -name 'reo_*.jpg' -mtime +30 -delete"
26 07 01 09 37 57 800x609 - Home Assistant - Haustürklingel als binary_sensor mit ESPHome

Bonus: Kamera-Popup am Flur-Tablet per browser_mod

Weil’s so schön ist, hängt im Flur direkt vor der Haustür ein Wand-Tablet als Smart-Home-Display. Klingelt jemand, poppt dort automatisch das Live-Bild der Haustürkamera im Vollbild auf – so sieht man schon beim Vorbeigehen, wer draußen steht, ohne irgendwas antippen zu müssen. Umgesetzt ist das mit browser_mod (Custom-Integration). Nach 30 Sekunden schließt sich das Popup von selbst wieder.

alias: Flur EG - Kamera Popup SmartHome Tablet wenn Türklingel betätigt wurde
description: ""
triggers:
  - trigger: state
    entity_id: binary_sensor.azdelivery_d1_mini_hausturgong_flur_eg
    to: "on"
  - type: occupied
    device_id: 23d8fca3c34d49c66c69fab01ff171af
    entity_id: 4e07233bd9ae1e6bc3518c19299b5da9
    domain: binary_sensor
    trigger: device
    enabled: false
  - type: motion
    device_id: c7a6afa0006a640602693c7ca5a6ac5c
    entity_id: 9b8f3b126e90737861727d9a7592b1bc
    domain: binary_sensor
    trigger: device
    enabled: false
conditions: []
actions:
  - action: browser_mod.popup
    data:
      dismissable: true
      autoclose: false
      allow_nested_more_info: false
      browser_id:
        - 5d8d15f92258392314b0680315dbc8e3
      title: Kamera Haustür
      initial_style: tablet-camera
      style_sequence:
        - tablet-camera
      popup_styles:
        - style: tablet-camera
          include_styles:
            - classic
          styles: |
            ha-dialog {
              --dialog-surface-margin-top: auto !important;

              --popup-width: 92vw;
              --popup-min-width: 92vw;
              --popup-max-width: 92vw;

              --popup-min-height: 75vh;
              --popup-max-height: 75vh;

              --dialog-content-padding: 0px;
              --padding-x: 0px;
              --padding-y: 0px;
            }

            .content {
              padding: 0px !important;
            }

            .container {
              padding: 0px !important;
            }
      content:
        type: picture-entity
        show_state: false
        show_name: false
        camera_view: live
        fit_mode: cover
        entity: camera.kamera_haustur_standardauflosung
        image: camera.kamera_haustur_schnappschusse_in_standardauflosung
      timeout: 30000
      timeout_hide_progress: true
  - delay:
      hours: 0
      minutes: 0
      seconds: 30
      milliseconds: 0
mode: single
IMG 0566 625x800 - Home Assistant - Haustürklingel als binary_sensor mit ESPHome

Fazit

Tja, was gibt es abschließend zu sagen … der Weg war deutlich länger, als das Ziel groß ist. 😅 Am Ende ist es eine schlichte, kleine Lösung geworden – aber genau eine, die tut, was sie soll, und die mich nicht im Regen stehen lässt, wenn irgendwo mal der Strom bzw. das Netzwerk hakt.

Was mir an der Lösung gefällt:

  • Die Klingel funktioniert weiter, auch wenn Home Assistant, WLAN oder der ESP mal streiken – kein Single Point of Failure
  • Dauerstrom, kein Akku, keine Cloud, alles schön lokal
  • Potenzialfreie Trennung zwischen Klingelkreis und ESP – sauber und sicher
  • Spottbillig: D1 Mini ein paar Euro, das Eltako-Relais rund 25 €
  • Reaktion in Home Assistant praktisch verzögerungsfrei – inklusive Kamerabild aufs Handy und Popup am Flur-Tablet

Was man wissen muss:

  • In den Sicherungskasten gehört eine Elektrofachkraft
  • Das Eltako-Relais klackt hörbar beim Schalten (neben dem Gong fällt das aber nicht auf)
  • Der Weg dahin war … nun ja, ein paar Sackgassen mehr, als mir lieb war 😉

Unterm Strich bin ich rundum zufrieden. Aus dem ewigen Kompromiss zwischen Bewegungsempfindlichkeit und Akkulaufzeit ist eine grundsolide, dauerstromversorgte und lokale Lösung geworden – und die Türklingel ist und bleibt einfach eine Türklingel.

Wie habt ihr eure Klingel in Home Assistant eingebunden? Fertige Lösung, Shelly, Bastel-ESP oder ganz anders? Ab damit in die Kommentare!

Kommentare

Schreibe einen Kommentar

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