In einem früheren Artikel habe ich die Open-Source-Projekte zur Hausautomation ESPHome und Home Assistant vorgestellt. Dieser Artikel zeigt, wie ich die Türklingel unseres Hauses an das System angeschlossen habe. Hauptziel war die Erkennung von Türklingel-Ereignissen im Home Assistant und die Weiterleitung einer Meldung an Orte, an denen die Türklingel selbst nicht zu hören ist.

Der Drucktaster unserer elektromechanischen Ding-Dong-Türglocke wurde vor vielen Jahren durch ein kommerzielles drahtloses System mit mehreren Klingeltönen ersetzt. Es wurde mit zwei abgesetzten Stationen zur erheblichen Vergrößerung der Reichweite der Türklingel geliefert. Leider wird in dem System alles von Batterien versorgt. Wenn deren Kapazität zur Neige geht, wird das Glockenspiel unzuverlässig. Außerdem neigt es dazu, Besucher zu verwirren, da sie nichts hören, wenn sie den Knopf drücken. An unserer Tür klingelt der Briefträger deshalb immer zweimal.

Da ich vor kurzem begonnen hatte, mit der Hausautomation zu experimentieren, war dies eine gute Gelegenheit, die Türklingel zu erneuern und in das System zu integrieren. Um das Verlegen von Kabeln zu vermeiden, entschied ich mich für eine WLAN-Verbindung zwischen der Türklingel und der Steuerung der Hausautomatisierung.

Die alte Klingel und ihre Anschlussdrähte sind einschließlich der Stromversorgung an Ort und Stelle geblieben. Dies erwies sich als recht praktisch, da im Gong genügend Platz war, um eine selbstgebaute drahtlose Türklingel-Schnittstelle einzubauen und diese auch mit Strom zu versorgen.

Da ich die funktionierende drahtlose Türglocke nicht wegwerfen wollte, beschloss ich, deren Drucktaste für meine neue vernetzte Türklingel zu verwenden. Auf diese Weise kam ich zu einem Türglockenspiel der dritten Generation mit WLAN-Verbindung, das einen von mehreren digital erzeugten Klingeltönen abspielt und gleichzeitig einen mechanischen Ding-Dong-Ton erzeugt, während es Benachrichtigungen an die Cloud sendet oder eine andere nützliche Aktion ausführt (siehe Bild 1).

Bild 1. So wird aus einem einfachen Ding-Dong ein komplex vernetztes Türklingelsystem.

Das akustische Feedback für den Besucher wurde ebenfalls wiederhergestellt.

Aufbau einer Türklingel-Schnittstelle

Für die WLAN-Türklingel-Schnittstelle wählte ich ein ESP8266-basiertes NodeMCU-Board (Bild 2), weil es einen analogen Eingang besitzt, den ich verwenden wollte (mehr dazu später).

Bild 2. Das NodeMCU-Modul besitzt an seinem analogen Eingang intern einen Spannungsteiler, der die Eingangsspannung durch 3,2 teilt.

Außerdem benötigt das Board keinen USB-Seriell-Wandler, so dass außer einem Lötkolben keine speziellen Werkzeuge für dieses Projekt erforderlich sind.

Wie bereits erwähnt, wird der Klingelknopf der drahtlosen Türglocke über die alten, vorhandenen Drähte mit dem Türklingel-Interface verbunden. Da sich der Taster außen an der Eingangstür befindet und den Unbilden der Elemente ausgesetzt ist, habe ich die Verbindung mit Vorwiderständen, einem Filterkondensator und Clamp-Dioden abgesichert.

Die Magnetspule der Türglocke benötigt etwa 1 A, wenn sie mit 12 V (AC) betrieben wird. Das ist viel zu viel für den winzigen taktilen Drucktaster des Glockenspiels, denn solche Kontakte vertragen normalerweise nicht mehr als etwa 50 mA, aber mit einem Relais oder Leistungstransistor ist die Verbindung möglich. Ich habe ein kleines 5-V-Relais benutzt, das in meinem Heimlabor herumlag und das vom Mikrocontroller über einen Transistor gesteuert werden kann. Der vollständige Schaltplan ist in Bild 3 zu sehen.

Bild 3. Die Türklingel-Schnittstelle benötigt eine saubere Stromversorgung und die mit der Klingel verbundenen Pins einen gewissen Schutz, da der Taster im Freien dem Wetter ausgesetzt ist.

Überwachen einer Batteriespannung

Die Leitung zum Klingelknopf S1 ist über R4 mit der kalten Seite des Pull-up-Widerstandes des Tasters verbunden. Das bedeutet, dass die Ader, wenn der Klingelknopf nicht gedrückt wird, die Spannung der Batterie im Inneren des Klingelknopf-Gehäuses führt. Daher habe ich den Draht nicht nur mit einem GPIO-Pin (D7) des Controllers verbunden, sondern auch mit einem Analogeingang (AD0). Auf diese Weise kann der Home Assistant nicht nur Klingeltöne erfassen und weiterleiten, sondern auch den Füllstand der Batterie im Auge behalten. Dies ist praktisch, da die Reichweite der Funkverbindung proportional zur Batteriespannung ist. Ist die Spannung zu niedrig, können die Gegenstelle(n) nicht mehr erreicht werden und das System arbeitet unzuverlässig.

Es wäre natürlich auch möglich, auch das Drücken der Klingel statt über den GPIO über den Analogeingang zu erfassen, doch dies würde auch die Firmware verkomplizieren.

Stromversorgung

Die Stromversorgung erfordert einige Aufmerksamkeit, da eine Klingel üblicherweise nur mit einem Trafo versorgt wird (bis 24 VAC), während ich 5 V Gleichspannung für das Relais und das NodeMCU-Board benötigte.

Die Magnetspule des Türglocke ist eine ziemlich hohe Belastung für den Trafo, so dass die Ausgangsspannung des Transformators ziemlich in die Knie geht, wenn die Klingel aktiviert wird. Ein großer Speicherkondensator (C1) filtert diese Spannungseinbrüche heraus. Ohne diesen Kondensator würde das NodeMCU-Modul bei jedem Drücken des Klingelknopfes neu gestartet.

Der 5-V-Regler ist ein kleiner, 7805-kompatibler Schaltregler (mit einem Eingangsspannungsbereich bis zu 28 V), der dazu beiträgt, Probleme mit der Wärmeableitung zu vermeiden.

Es wurde mit LED1 auch eine praktische Einschaltkontrolle hinzugefügt, über die das NodeMCU-Board nicht verfügt. Ich habe die Türklingel-Schnittstelle auf zwei Prototyping-Platinen verteilt - eine für die Stromversorgung, die andere für den Rest, so dass alles genau in das Gehäuse der alten Klingel passte (Bild 4).

Bild 4. Die Türklingel-Schnittstelle wurde auf zwei Platinen aufgebaut, damit sie in den alten Türgong passt.

ESPHome-Firmware-Konfiguration

Die Software für die Türklingel-Schnittstelle habe ich für ESPHome geschrieben. Der Vorteil liegt auf der Hand: Etwa 30 min „Programmierung“ reichen aus für ein voll funktionsfähiges Gerät mit Over-the-Air -Programmiermöglichkeit (OTA), eigener Web-Schnittstelle und perfekter Integration in den Home Assistant. Darüber hinaus können Sie das System nach Belieben mit Ihrem Smartphone (oder Tablet oder Computer) modifizieren, wann immer Sie Lust dazu haben.

Die Programmierung erfolgt nicht in C, C++ oder Python, sondern in YAML. YAML ist keine Programmier-, sondern eine Auszeichnungssprache (Markup Language). Ein YALM-Skript oder eine Konfigurationsdatei wird von ESPHome als Eingabe verwendet und in C/C++-Code umgewandelt, der dann dem Rest der Bibliothek hinzugefügt und mit diesem kompiliert wird. Das Skript gibt an, welche Teile aus ESPHome eingebunden werden sollen, etwa WLAN-Einstellungen, Webinterface oder nicht, wie und welche Arten von Sensoren und Aktoren an die MCU angeschlossen werden und was mit ihnen geschehen soll. Die meisten solcher üblichen Sachen sind vordefiniert, was die Einrichtung ziemlich einfach und schnell macht.

YAML mag gewöhnungsbedürftig sein, aber es ist nicht kompliziert, solange man die Einrückungen respektiert.

Das Relais an die Drucktaste binden

Das Relais, das die Magnetspule des Gongs steuert, ist als interner switch definiert, der an GPIO14 angeschlossen ist. Wenn Sie das Relais als intern definieren, wird es für den Home Assistant unsichtbar, wodurch eine Überlastung Ihres Systems vermieden wird.

switch:
  - platform: gpio
    pin: GPIO14
    id: ding_dong_relay
    internal: true

 

Der switch wird mit einer ID versehen, damit er in Automationen verwendet werden kann (siehe unten).

Der Klingelknopf ist ein binary_sensor an Pin GPIO13. Mit dem Schlüsselwort inverted informieren wir ESPHome darüber, dass der Knopf aktive low ist.

binary_sensor:

 

  - platform: gpio
    name: "my doorbell pushbutton"
    pin:
      number: GPIO13
      inverted: true
    on_press:
      then:
        - switch.turn_on: ding_dong_relay
        - delay: 200ms
        - switch.turn_off: ding_dong_relay

 

 

Wenn die Drucktaste gedrückt wird, erzeugt ESPHome ein on_press-Ereignis, das an den Home Assistant gesendet wird. Diese Ereignisse können aber auch als Trigger innerhalb der YAML-Datei verwendet werden, um eine oder mehrere Aktionen auszulösen. Dies wird als „automation“ bezeichnet und stellt eine leistungsstarke Funktion von ESPHome dar.

Hier verwenden wir das on_press-Ereignis, um einen 200ms langen Impuls am Relaisausgang zu erzeugen. Dazu wird einfach nur die ID des Relais ding_dong_relay angegeben. Nun ertönt der Gong, wenn jemand auf die Taste drückt, auch wenn das Netzwerk ausgefallen ist. Kurz gesagt, der ursprüngliche Gong ist wiederhergestellt, wie er vor mehr als 40 Jahren installiert wurde, nur haben wir der einfachen, direkten Druckknopfverbindung mehrere Tausend Transistoren hinzugefügt!

Ein Auge auf den Batterie-Füllstand

Die Batterie des Glockenspiels wird als sensor auf A0 definiert. Sein Typ (platform) ist adc, da es sich um eine zu digitalisierende Analogspannung handelt. Das NodeMCU-Modul teilt die Eingangsspannung auf A0 durch 3,2. In ESPHome ermöglichen Filter die Änderung des Ausgangswerts eines Sensors. Ein multiply wird als Filter betrachtet. Wenn wir also den Wert des Sensors mit 3.2 multiplizieren, erhalten wir den ursprünglichen Wert zurück.

sensor:

 

  - platform: adc
    name: "doorbell battery level"
    pin: A0
    filters:
    - multiply: 3.2

 

Leuchten spezifizieren

Das NodeMCU-Modul besitzt eine Flash-Taste an GPIO0 und eine LED an GPIO16, die ebenfalls verwendet werden können. Die Flash-Taste könnte man als Test-Taste einsetzen, die LED könnte eine visuelle Anzeige dafür sein, dass jemand an der Tür geklingelt hat und der Assistant dieses Ereignis registriert hat. Daher habe ich GPIO0 als binären Sensor definiert und dem Binärsensor-Abschnitt hinzugefügt.

light:
  - platform: binary
    name: "LED1"
    output: led1
 
output:
  - platform: gpio
    id: led1
    pin:
      number: GPIO16
      inverted: true

 

Zur Veranschaulichung dieses Konzepts habe ich ein light definiert, das mit einem Ausgang namens led1 verbunden ist. Dadurch wird im Home Assistant eine „Lichtinstanz“ erzeugt, die andere Möglichkeiten bietet als ein switch und außerdem ein anderes Icon besitzt. Die LED an GPIO16 ist als Ausgang mit der ID led1 definiert, der aktiv low ist (inverted: true).

Wenn nun der Home Assistant eine Nachricht an das light mit dem name: "LED1" sendet, um sie ein- oder auszuschalten, wird die Nachricht an den Ausgang mit der entsprechenden id: led1 weitergeleitet.

Die vollständige YAML-Konfigurationsdatei für ESPHome kann unter [2] heruntergeladen werden. Beachten Sie, dass Sie die SSID und das Passwort an Ihr WLAN-Netzwerk anpassen, möglicherweise möchten Sie auch den Namen des Geräts ändern.

ESPHome-Add-on für den Home Assistant

Da ich das ESPHome-Add-On im Home Assistant installiert habe, habe ich das YAML-Skript im Add-on geschrieben. Auf diese Weise ist die YAML-Datei des Geräts bereits im System vorhanden, was spätere OTA-Updates erleichtert. Beim ersten Mal jedoch, zumindest bei einem fabrikneuen ESP8266, müssen Sie die serielle Schnittstelle zur Programmierung der MCU verwenden, da die OTA-Programmierung noch nicht aktiviert wurde (siehe Kasten).

Automatisierung im Home Assistant

Die LED an GPIO16 wurde nur in der YAML-Datei von ESPHome als einsetzbar erklärt. Eine Automatisierungsregel dafür wurde nicht erstellt, so dass sie ohne Aufforderung des Home Assistant gar nichts tut. Die Idee war, sie aufleuchten zu lassen, wenn jemand klingelt. Dies kann mit einer einfachen Automatisierung im Home Assistant erreicht werden: auf einen Klingelknopfdruck zu warten und entsprechend die LED einzuschalten.

Im Home Assistant gibt es mehrere Möglichkeiten, den Automationseditor zu öffnen, zum Beispiel links im Menü auf Configuration und danach rechts auf Automations zu klicken. Eine neue Automatisierung wird durch einen Klick auf die runde, orangefarbene „+“-Schaltfläche in der unteren rechten Ecke eingeleitet.

Sie können nun eine Phrase eingeben, die der Home Assistant versucht, in die gewünschte Automation umzuwandeln. Es ist jedoch nicht so einfach, eine passende Phrase zu finden, und es ist Zeitverschwendung, eine vom Home Assistant erstellte fehlerhafte Automatisierungsregel zu korrigieren, so dass wir besser auf Skip klicken. Geben Sie einen Namen für die Automatisierung ein und optional eine Beschreibung. Verlassen Sie den Modus durch Single (default).

Trigger und Aktionen

Es gibt mehrere Möglichkeiten, ein Trigger-Ereignis anzugeben, das die Automatisierung startet. Für mich ist es in diesem Fall der am meisten intuitive Weg, als Action type ein Device zu zu wählen, das in der Device-Liste mit dem Namen aufgeführt ist, den Sie in der YAML-Datei angegeben haben. Genau so suchen Sie in der Trigger-Liste nach dem Namen, den Sie der Flash-Taste gegeben haben.

Es gibt keine conditions, also überspringen Sie diesen Teil. Actions sind ähnlich wie Trigger, und wie bei Triggern gibt es mehr als einen Weg, um das gewünschte Ergebnis zu erhalten. Eine Möglichkeit besteht darin, Device als Action type zu wählen und Ihr Gerät aus der Device-Liste auszuwählen. Aus der Action-Liste geben Sie Turn on LED1 an (oder den Namen, den Sie der LED gegeben haben).

Sichern Sie Ihre Arbeit, indem Sie auf das runde orangefarbene Disketten(!)symbol in der unteren rechten Ecke klicken.

Überprüfen Sie, ob die Automatisierung funktioniert, indem Sie an der Tür klingeln. Wenn Sie dies tun und die Automatisierung funktioniert, werden Sie feststellen, dass es keine Möglichkeit gibt, die LED wieder auszuschalten.

Ein light in der Benutzeroberfläche

Um dem abzuhelfen, werden wir der Übersichtsseite des Home Assistant eine so genannte card hinzufügen, die (durch Klicken auf die card) nicht nur die LED ausschaltet, sondern auch eine Statusansicht der LED ermöglicht, so dass Sie nicht den ganzen Weg bis zur Türklingel gehen müssen, um zu sehen, ob die LED eingeschaltet ist oder nicht.

Klicken Sie im Menü auf der linken Seite auf Overview, dann auf die drei Punkte in der oberen rechten Ecke (Open Lovelace UI menu) und wählen Sie Configure UI. Klicken Sie nun auf die runde orangene „+“-Schaltfläche in der unteren rechten Ecke (im Home Assistant wird viel herumgeklickt). Suchen Sie die light-Karte und klicken Sie darauf. Suchen Sie die Entity-Liste nach der LED und wählen Sie sie aus. Geben Sie auch einen einprägsamen Namen ein, mit dem Sie die LED in der Übersicht leichter identifizieren können, wenn es in Ihrem weiterentwickelten Hausautomationssystem einmal eine Menge solcher lights gibt.

Speichern Sie die Karte und verlassen Sie den UI-Konfigurationsmodus, indem Sie auf das Kreuz in der linken oberen Ecke klicken (Close). Durch Klicken auf die Karte sollten Sie nun den Status der LED umschalten können.

Zum Abschluss

Wenn Sie die in diesem Artikel vorgestellten Schritte befolgt haben (und alle meine Fehler korrigiert haben, die ich in den neuesten Versionen der sich ständig weiterentwickelnden Projekte ESPHome und Home Assistant natürlich eliminiere), haben Sie jetzt eine Türklingel mit WLAN-Verbindung, die Sie im Home Assistant automatisieren können. Sie können viel mehr (nützliche) Dinge tun, als eine LED leuchten zu lassen, aber das überlasse ich Ihnen. Dieser Artikel zeigte für einen Einstieg in die Materie die Grundprinzipien, und jetzt liegt es an Ihnen, die Dinge zu verbessern und sie an Ihre Bedürfnisse und Wünsche anzupassen.

 

(200089-03)

 

----------------------------------------------------------------------------------------------------------------------

Wollen Sie weitere Elektor-Artikel lesen? Jetzt Elektor-Mitglied werden und nichts verpassen!

----------------------------------------------------------------------------------------------------------------------