Analoge Türklingel smart machen – aber in richtig und mit ESPHome

Es gibt unzählige Smart-Home Projekte, um seine Türklingel smart zu machen, der Bedarf scheint also groß zu sein. Der Vorteil liegt auf der Hand: man sieht, wenn jemand geklingelt hat, als man nicht zu hause war, und man kann sich zusätzlich audiovisuelle Benachrichtigungen bauen, wenn man die Klingel vielleicht nicht hört (wie z.B. eine Lampe die blinkt, eine Text-to-Speech-Nachricht oder irgendwas dergleichen. Das finde ich auch sinnvoll, und das will ich auch, aber nicht so, wie solche Projekte typischerweise aussehen: Lösungen wie „Vibrationssensor an ein Glocke geklebt“ oder sowas in der Richtung wollte ich explizit nicht, sondern das ganze mal in vernünftig, aber dennoch weitestgehend reversibel (Mietswohnung und so…) umzusetzen. Dies hier ist eine Lösung mit ESPHome zum Einsatz in Homeassistant, und das ist gar nicht mal so schwer…

Problem

Mein Problem dürfte in ähnlicher Form viele Menschen in deutschen Haushalten betreffen: Die Türklingel ist eine analoge Türklingel vom unteren Budget-Rand, und kann genau nichts ausser krächzen, und ein schlechtes Telefon immiteren. Umbauen kann man sowieso nichts, weil man ohnehin zur Miete wohnt. Selbst wenn es anders wäre, wäre es vermutlich eine digitale Türklingel, die ebensowenig kann, und ebenso billig ist, nur im Handel mehr kostet. So oder so, „richtige“ smarte Systeme sind meist geschlossene Ökosysteme, Datenschutzkatastrophen oder beides. „Smart“ ist da gar nichts. Ich will doch einfach nur „es klingelt“ als binären Sensor, und ohne Cloud oder App. Insofern ist bei Anlagen ohne Video-Übertragung eine analoge Türklingel schon fast die beste Option, weil alles so simpel ist, dass daran nichts proprietär ist, und man das ganze relativ einfach nach eigenen Bedingungen smart machen kann. In meinem Fall habe ich eine Sprechstelle von STR an der Wand kleben, genauer ein STR HT2003/2 Haustelefon 10611. Die meisten einfachen analogen Klingeln dürften aber ähnlich funktionieren.

Informationen sammeln

Bei einem Umbau ist das wichtigste, erst einmal rauszufinden, wie die alte Klingel denn so genau funktioniert. Wenn man also schon mal den Verdrahtungsplan für sein Modell gefunden hat, ist man schon mal ein Stück weiter. Bei analogen Klingeln kommt irgendwo ein Singal an, wenn jemand klingelt. Also muss man rausfinden, wo das Singal ankommt (also der Signal-Pin), wo es wieder zurückggeht (typischerweise eine gemeinsame Masseleitung) und vor allem was das genau für ein Singal ist. Bei meiner STR-Klingel liegt zwischen S (auf der Klemme Pin 4) und O (Pin 5) ein 9V-Wechselstromsignal an, wenn es klingelt. Das geht ungefiltert in eine Bimmel, die davon zum schwingen und damit auch zum hörbaren bimmeln angeregt wird. So weit so simpel. Rausfinden kann man die Kontakte am einfachsten, wenn man schaut, prüft oder misst, welche der Klemmen mit der eigentlichen Bimmel verbunden sind.

Übrigens: wenn man an der geöffneten Klingel arbeitet, sollte man die Höhrerauflage mit einem Stück Klebeband niederhalten, weil sonst die ganze Zeit eine Audioverbindung zur Haustür steht.

Der Plan

Es gilt also, das Signal irgendwie abzugreifen, am einfachsten nimmt man dafür einen Microcontroller, in meinem Fall einen ESP. Ich habe einen D1-Mini genommen, weil ich davon noch welche da hatte, und ich das ganze schon vor längerer Zeit umgesetzt hatte aber heutzutage würde ich einen ESP32 nehmen, die sind nicht mehr teurer als die ESP8266, und die gibt es auch in einem kleinen D1 Mini Layout oder mittlerweile noch kleiner (besonders alles was einen ESP32-C3 hat). Für die D1 Mini gibt es praktische Aufsatzplatinen, wo man ein paar Bauteile verdrahten kann, also perfekt für diesen Zweck. Wenn das zu hoch wird, gibt es aber noch so dual-boards, wo man dann ein bisschen Platz neben dem ESP zum verkabel hat. Oder man macht einfach die gute alte fliegende Verdrahtung.

Die Stromversorgung ist ein gewisses Problem. Man könnte sich zwar die Stromversorgung der Klingel zu nutze machen, aber die Trafos dafür im Keller sind grade mal so ausgelegt, dass sie die Klingeln speisen können, und zwar fürs ganze Haus. Das macht man einfach nicht, weil die Trafos durch die Dauerlast auch schneller kaputtgehen, und die sind eh schon zart besaitet und oft über 20 Jahre alt. In meinem Fall macht der Klingeltrafo in der Kellerverteilung 200mA bei 9VAC für 7 Parteien. Rausfinden kann man das mit messen (wobei Multimeter hierfür oft ein bisschen zu träge sind), oder man schaut einfach im Keller nach dem Klingeltrafo im Schaltschrank, da steht das typischerweise drauf. Das würde grade mal so für den ESP mit aktivierten WLAN reichen…vielleicht. Man kommt also vermutlich nicht drumrum, irgendwo ein USB-Kabel rauszuführen. Man kann entweder ein sehr dünnes USB-Kabel nehmen, oder die Aussparung für das Höhrerkabel per Feile oder Dremel minimal aufweiten, dann passen beide Kabel durch. Das ist in meinem Fall die einzige permanente Modifikation an der Klingel gewesen, und die ist absolut minimal, und nicht sichtbar. Um die Singale von der Klemme abzugreifen, habe ich abgeschnittene Reste von Jumper-Kabeln für Breadboards benutzt, weil man die ganz gut in die Klemmen einschrauben kann.

Konzeptionell muss man das 9V-AC Signal irgendwie sinnvoll so aufbereiten, dass der ESP damit an seinen I/O-Pins was damit anfangen kann, man braucht also ein paar passive Bauteile, um das umzusetzen. Gesamtkosten waren vielleicht 5€, je nach dem was man für Bauteile noch rumliegen hat:

  • Einen Optokoppler: der typische PC817 ist für DC-Singale, und einen Gleichrichter zu bauen, hat ein paar andere Nachteile, aber es gibt den Optokoppler glücklicherweise auch für AC, das ist dann die Variante PC814, den brauchen wir. Ich habe die SMD-Version benutzt. Die kriegt man z.B. günstig auf Aliexpress.
  • Current Limit Widerstand: Widerstand um die LEDs im Optokoppler nicht auszubrennen. In meinem Fall war ein 1k-Widerstand perfekt. Der wird in eine der AC-Klingel-Leitungen eingebracht, z.B. in die Singal-Leitung.
  • Pullup Widerstand: Die integrierten Pullups vom ESP sind ein bisschen schwach auf der Brust. Ich habe den per Software deaktiviert und einen 10k Widerstand benutzt. Der geht zwischen den ESP-I/O-Pin und 3V3.
  • Filter-Kondensator: Ein 4,7µF-Keramik-Kondensator um Ghosting zu verhindern. Ohne Kondensator ist es wahrscheinlich, dass man auch das Klingeln bei den Nachbarn auf der Leitung „hört“. Normalerweise würde man das Signal in Software entprellen, aber weil das ein AC-Signal ist, geht das wegen dem AC-Zero-Crossing nicht wirklich. Eine Periode ist bei 50Hz sowas um 8ms lang und wir wollen eher ein delayed_on von ~100ms. Entsprechend muss man das in Hardware lösen, weil der Optokoppler das Signal unerwartet sensibel wahrnimmt. Der kommt zwischen den I/O-Pin des ESPs und GND.

Umsetzung

Die genauen Werte hab ich erst mal „PI mal Daumen“ angesetzt, und dann mit ein bisschen LLM Prompting die Werte verifiziert und in die ideale Richtung hin angepasst, aber für mein Setup (also 9VAC Nominal, peak nicht mehr als 12V im Worstcase) passen die oben angegebenen Werte. Versorgt wird das ganze dann über den USB-Port vom ESP selbst, da wir hier ohnehin nichts haben, was groß Leistung braucht. Wenn eure Ausgangslage anders ist, muss man im Zweifel ein bisschen rumrechnen, um gute Werte zu finden, das kann das LLM der Wahl aber typischerweise zuverlässig.

Da ich nicht vorhatte, für ein Einmal-Projekt PCBs zu bestellen, hab ich das diesmal schnell in Fritzing zusammengeklickt, statt einen Schaltplan in KiCAD zu bauen. Das sieht dann so aus:
In Hardware (mit einer 5 mal geänderten Verkabelung) sieht das Ganze dann so aus:

Den ESP kann man einfach mit ein bisschen doppelseitigem Klebeband befestigen, an der Stelle ist in der Klingel tatsächlich genug Platz.

Fertig sieht das ganze dann so aus (okay, man hätte vielleicht ein weißes USB-Kabel nehmen können…) :

Ich finde dennoch das ganze fällt kaum auf.

Software

Wichtiger als die Hardware ist allerding sowieso die Software bei Microcontroller-Projekten. Das ESPHome yaml-File dazu sieht so aus:

Das yaml-File ist explizit einfach gehalten, und bildet nur die hier beschriebene Funktionalität ab. In meinem yaml-File ist noch eine ganze menge mehr drin, aber es geht hier ja nur um die Türklingel. Wenn man einen D1 auf ESP32-Basis nimmt, muss man die board-definition und wahrscheinlich auch den Namen vom IO-Pin ändern, weil die dort anders heißen.

Und in Homeassistant sieht das ganze dann so aus:

Ich benutze das ganze dann z.B. um mir Benachrichtigungen aufs Handy zu pushen, wenn ich nicht zu Hause bin und in der Küche eine Lampe blinken zu lassen, weil ich da oft die Klingel wegen der Abzugshaube nicht höre. Aber was man damit im Nachhinein anfängt, ist ja ohnehin persönliche Präferenz. Es wäre ohne weiteres möglich, auch die Tür mit dem selben ESP zu öffnen, aber das wollte ich explizit nicht.

Viel Spass beim Nachbauen.

Schreibe einen Kommentar

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