Smarte Türklingel – Alte Sprechanlage smart machen

Ich zeige euch wie ihr eine alte Türklingel mit dem Wemos D1 mini in eine smarte Türklingel (incl. Türöffner) verwandelt, die MQTT spricht.

Der folgende Artikel beschreibt meine eigene Erfahrung. Ich übernehme keine Haftung für Schäden, die aus der Nutzung des folgenden Artikels entstehen.

Es ist jetzt wieder Sommer und da genießt man den Nachmittag gerne mal auf dem Balkon. Leider hört man oft nicht, wenn jemand an der Tür klingelt, was sehr ärgerlich sein kann. Darum habe ich mir überlegt wie ich unsere (40 Jahre alte) Türklingel bzw. das Wohnungstelefon smart machen kann. Dabei waren mir folgende Punkte wichtig:

  • Technik sollte in das Wohnungstelefon passen
  • Technik sollte ohne externe Stromversorgung betrieben werden
  • Mitteilung beim Klingeln ans Smartphone senden
  • Möglichkeit über das Smartphone die Tür zu öffnen
  • günstig
  • ohne extrene Cloud

Wohnungstelefon ersetzen

Das Erste was ich gemacht habe ist, dass ich das Wohnungstelefon ersetzt habe. Vorher war ein SEKO LT 603 verbaut, welches zwar technisch größtenteils funktionierte, jedoch optisch nicht mehr der Renner war. Das habe ich ersetzt durch ein Fermax Loft Universal Haustelefon, da das mit den gängigen 4+n Sprechanlagen kompatibel ist und ich das ganze recht günstig haben wollte. Der Einbau verlief problemlos und es funktionierte tadellos. Was anfangs jedoch ein Problem war, war die geringe Lautstärke des Mikrofons. Also unten an der Tür konnte man mich kaum verstehen. Das lässt sich jedoch lösen indem man den Potentionmeter im Höhrer verstellt. Leider ist der Potentionmeter nirgendwo dokumentiert, jedoch bin ich über die Amazon-Rezessionen darauf gestoßen, da dort darüber berichtet wird.

Technik

Ich habe mehrere Möglichkeiten in Erwägung gezogen wie ich die Technik aufbaue. Die erste Überlegung war, das ich alles auf Basis eines Arduino Nano mache. Das Problem war, dass ich hier eine Möglichkeit der Kommunikation schaffen müsste (WLAN oder Bluetooth oder was ganz anderes), was mindestens ein weiteres Bauteil wäre, welches ich im Wohnungstelefon unterkriegen müsste. Somit war der Arduino ersteinmal raus.

Die nächste Überlegung wäre ein Raspberry Pi zu nehmen, bzw. genauer: einen Raspberry Pi Zero W. Dieser ist relativ klein und hat direkt die Möglichkeit per WLAN zu kommunizieren. Das erschien mir dann doch etwas zu überdimensioniert für mein Vorhaben.

Letztendlich habe ich mich für den Wemos D1 mini entschieden, da es dafür auch noch fertige Shields gibt, die ich draufstecken kann ohne am Ende einen Kabelsalat zu haben. Der Wemos D1 mini nutzt den ESP8266 Chip, der auch vom NodeMCU verwendet wird. Dieser bietet die nötige WLAN-Konnektivität. Hierfür habe ich bei AliExpress folgende Dinge bestellt, die man auch bei Amazon oder Ebay finden kann:

  • Stromversorgung Schaltplan

    Da die Klingel mit Wechselstom und nicht mit Gleichstrom läuft brauchte ich hier noch eine Möglichkeit der Umwandlung. Ich verwende einen B80C800DM Brückengleichrichter (Ebay) um den Wechselstrom gleichzurichten um damit den Wemos D1 mini zu betreiben. Um die Spannung runterzubrechen wird der LM2596 angeschlossen und auf 5V gestellt. Bevor der Wemos D1 mini an die Schaltung angeschlossen wird, sollte ohne den Wemos D1 mini geprüft werden ob der LM2596 auch auf 5V gestellt ist, da sonst der Wemos D1 mini kaputt gehen kann.

    Die Schaltung sieht wie folgt aus:

    Stromversorgung
    Stromversorgung

    Klingelsignal Schaltplan

    Um das Klingelsignal zu erkennen ohne gleich den Wemos D1 mini zu grillen nutze ich einen PC814 Wechselstrom Optokoppler (AliExpress | Ebay). Der Vorteil gegenüber dem PC817 Gleichstrom Optokoppler ist ganz klar, dass ich den Strom vorher nicht gleichrichten muss. Somit fällt ein Bauteil weg, was hervorragend ist, da auf der Tripler Base nicht allzuviel Platz vorhanden ist. Vor den Optokoppler habe ich noch einen 1k Widerstand geschaltet (etwas kleiner ist aber auch okay).

    Die Schaltung sieht wie folgt aus:

    Klingelsignal
    Klingelsignal

    Die Schaltpläne zeigen nur wie zu verschalten ist. Die Bauteile können so plaziert werden wie es auf dem Board passt, solange die Schaltung am Ende stimmt.

    Relay

    Das Relay Shield wäre viel zu hoch, wenn man es mit den weiblichen Stiftleisten anbringen würde. Deshalb habe ich die männliche Stiftleiste an das Relay-Shield und die selbe Stiftleiste an die Tripler Base gelötet. Das ganze sieht dann wie folgt aus:

    Relay
    Relay

    Fertige Schaltung

    Hat man alles wie oben beschrieben erledigt sieht die fertig bestückte Schaltung wie folgt aus:

    Schaltung verkabelt
    Schaltung verkabelt
    Schaltung eingebaut
    Schaltung eingebaut

     

    Wemos D1 mini flashen

    Der Wemos D1 mini lässt sich ganz einfach mit der Arduino IDE programmieren. Es gibt eine (wie ich finde) sehr gute Bibliothek, die ich verwende, die einem sehr viel Arbeit abnimmt und direkt die MQTT-Anbindung mitbringt: Homie. Davon gibt es eine Variante speziell für den ESP8266, der vom Wemos D1 mini verwendet wird.

    Nachdem die Bibliothek mit allen Abhängigkeiten installiert wurde, kann der Code geschrieben und geflasht werden. Mein Code ist sehr kurz gehalten, da ja auch nicht viel passieren muss.

    //DoorBell.ino
    #include <Homie.h>
    
    int readDelay = 50;
    int buttonPressDelay = 3000;
    int openingDelay = 3000;
    int inputPin = D3;
    int relayPin = D1;
    int inputValue = 0;
    bool opened = false;
    int timeOpened = 0;
    
    HomieNode doorbellNode("button", "button");
    HomieNode openerNode("switch", "switch");
    
    boolean openerHandler(const HomieRange& range, const String& value) {
      if(value != "true" && value != "false") return false;
    
      if(value == "true") {
        digitalWrite(relayPin, HIGH);
        openerNode.setProperty("on").send("true");
        Serial.println("Opener started ...");
        opened = true;
        timeOpened = millis();
      }
    
      return true;
    }
    
    void loopHandler() {
      inputValue = digitalRead(inputPin);
    
      digitalWrite(BUILTIN_LED, inputValue);
    
      if(inputValue == 0) {
        Serial.println("Doorbell pressed ...");
        doorbellNode.setProperty("pressed").send("true");
        delay(buttonPressDelay);
        doorbellNode.setProperty("pressed").send("false");
      }
    
      delay(readDelay);
    }
    
    void setup() {
      Serial.begin(115200);
      Serial.println();
    
      pinMode(inputPin, INPUT_PULLUP);
      pinMode(BUILTIN_LED, OUTPUT);
      pinMode(relayPin, OUTPUT);
      
      digitalWrite(relayPin, LOW);
    
      Homie_setBrand("doorbell");
      Homie_setFirmware("Doorbell", "1.0.0");
    
      openerNode.advertise("on").settable(openerHandler);
      Homie.setLoopFunction(loopHandler);
    
      Homie.setup();
    }
    
    void loop() {
      int timeNow = millis();
    
      if(timeOpened > 0 && (timeNow - timeOpened) > 3000) {
        Serial.println("Close ...");
        Serial.println(timeNow);
        Serial.println(timeOpened);
        timeOpened = 0;
    
        digitalWrite(relayPin, LOW);
        openerNode.setProperty("on").send("false");
        Serial.println("Opener finished ...");
      }
    
      Homie.loop();
    }
    

    Die dazugehörige config.json würde wie folgt aussehen:

    {
      "name": "Doorbell",
      "device_id": "c01",
      "wifi": {
        "ssid": "[SSID]",
        "password": "[PASSWORD]"
      },
      "mqtt": {
        "host": "192.168.178.54",
        "port": 1883,
        "base_topic": "doorbell/",
        "auth": true,
        "username": "homeassistant",
        "password": ""
      },
      "ota": {
        "enabled": true
      }
    }

    Zum Thema Homie und Wemos D1 mini werde ich noch einen weiteren Artikel schreiben.

    Anbindung an Home-Assistant

    #configuration.yaml
    mqtt:
      embedded:
    binary_sensor:
      - platform: "mqtt"
        name: intercom_bell
        state_topic: "doorbell/c01/button/pressed"
        payload_on: "true"
        payload_off: "false"
        device_class: "sound"
        retain: true
    switch:
      - platform: mqtt
        name: intercom_opener
        state_topic: "doorbell/c01/switch/on"
        command_topic: "doorbell/c01/switch/on/set"
        payload_on: "true"
        payload_off: "false"
        retain: true
        icon: mdi:lock
    #customize.yaml
    binary_sensor.intercom_bell:
      friendly_name: Klingel
    switch.intercom_opener:
      friendly_name: Türöffner

    Regeln für Telegram

    #automation.yaml
    - alias: 'Telegram Bot: Benachrichtige über klingeln'
      trigger:
        platform: state
        entity_id: binary_sensor.intercom_bell
        from: 'off'
        to: 'on'
      action:
        - service: telegram_bot.send_message
          data_template:
            message: 'Es klingelt an der Tür'
            disable_notification: true
            inline_keyboard:
              - "Tür öffnen:/open_door"
    
    - alias: 'Telegram Bot: Öffne die Tür'
      trigger:
        platform: event
        event_type: telegram_callback
        event_data:
          data: '/open_door'
      action:
        - service: telegram_bot.edit_replymarkup
          data_template:
            message_id: 'last'
            chat_id: '{{ trigger.event.data.chat_id }}'
            inline_keyboard: []
        - service: telegram_bot.send_message
          data_template:
            target: '{{ trigger.event.data.user_id }}'
            message: 'Die Tür wird geöffnet'
            disable_notification: true
        - service: switch.turn_on
          entity_id: switch.intercom_opener

    Ich hoffe, dass ich das Ganze einigermaßen erklären konnte. Sollte etwas unklar sein, schreibt einfach einen Kommentar und ich werde schauen, dass ich den Artikel anpasse.

12 Antworten auf „Smarte Türklingel – Alte Sprechanlage smart machen“

  1. Hi, danke erstmal für die Anleitung.

    Leider bekomme ich es nicht hin, das der Wemos D1 mini irgend etwas an io.adafruit.com sendet. Die Config stimmt soweit und der Wemos blinkt auch nicht. Im seriellen Monitor wird auch die erfolgreiche Verbindung angezeigt. In io.adafruit.com habe ich eine Gruppe namens “doorbell” angelegt und dort drin dann 2 feeds “switch” und “button”. Nun müsste der Trigger für das Klingelsignal ja ausgelöst werden, wenn ich D3 und GND mal mit einem Kabel verbinde. Zumindest leuchtet da kurz die blaue LED auf und geht wieder aus. Das müsste doch den Befehl senden oder? Ich hoffe du kannst mir helfen.

  2. Hallo, wo wie hast du denn das relay angeschlossen? Wo bezieht dies seinen Strom? Und leider bekomme ich es nicht hin, dass io. adafruit.com die Signale bekommt (getestet wenn ich D3 und GND verbinde und die LED des D1 Mini kurz aufleuchtet). Kannst du mir da helfen? Danke im Voraus

    1. Als Relay nutze ich das von Wemos. Das wird einfach auf den Wemos D1 mini aufgesteckt. Angesteuert wird es dann über den Pin D1. Den Strom bekommt es dann auch über die Pins des Wemos.

      Warum io.adafruit.com nichts bekommt kann ich Dir leider nicht sagen. Am besten einmal mit einem anderen MQTT Server ausprobieren. Zum Beispiel Mosquitto.

      1. Hallo, ich habe nun mosquitto genommen und das funktioniert. Warte nun noch auf den oktokoppler und auf ein power-board da der DC-DC Wandler meine Anlage komplett still legt. Danke erstmal.

          1. Hallo, also zumindest die Software soweir so gut. Ich habe nur Probleme mit dem Relais, wenn ich den Befehl gebe, klickt es deutlich doch die Haustür wird nicht geöffnet. Ich hab NO an den TÖ gesteckt und GND an GND. Wenn ich allerdings TÖ und GND manuell zusammen halte dann geht der türöffner. Am Relais und an den Kabeln habe ich auch gemessen (Mitm Multimeter) und wenn es geschalten wird dann ist auch der Stromkreis geschlossen. Weiß echt nicht weiter

          2. Das ist extrem merkwürdig. Bin da gerade auch etwas ratlos. Das Relais macht ja nichts anderes als TÖ und GND miteinander zu verbinden. Darum finde ich das sehr merkwürdig, dass es funktioniert, wenn Du manuell TÖ und GND zusammen hältst, jedoch nicht über das Relais, obwohl es korrekt anzieht. Das einzige was mir da einfallen würde ist zu überprüfen ob die Kabel richtig im Relais drinstecken. Manchmal sitzen die nicht richtig und der Kontakt ist nicht ganz da. Werde aber mal recherchieren ob ich da sonst noch etwas zu finde.

  3. Hallo, habe vor die Schaltung nachzubauen und kurz möchte sichergehen da es für mich aus der Beschreibung nicht so deutlich hervorgeht.
    Habe bereits ein Fermax Loft Universal Haustelefon und müsste daher mit deiner Vertratung kompatibel sein.
    Du schreibst oben in der Schaltung das du den Strom von der Klingelzuleitung nimmst. Ist damit des Kabel gemeint welches mit dem Pin 1 (Call) verbunden ist?
    Masse ist denke ich dann Pin 3 (Common)?

    1. Hi, genau. Masse ist Common. Bei mir kommen zwei Leitungen mit Dauerstrom an. Das ist einmal die Leitung für den Türöffner und einmal von der Klingel. Die Leitung von der Klingel wird dann weitergeleitet zum Klingelschalter an der Wohnungstür. Da weiß ich jedoch nicht ob das bei Dir auch der Fall ist. Du müsstest bei Dir mit einem Messgerät ausmessen an welcher Leitung du Dauerstrom hast und die könntest Du dann theoretisch nehmen.

      1. Hallo. Danke dir. Das wären dann genau die Leitungen die ich ausgemessen habe und die ich dann auch für die Stromversorgung nehmen würde.
        Leider fehlen mir noch ein paar Bauteile so das ich die ganze Schaltung noch nicht komplett aufbauen konnte.
        Bez. des Sketch für den ESP8266 werde ich es mit ESPURNA versuchen. Der sollte, mit ein wenig Konfiguration, für meinen Anwendungsfall optimal passen und hat auch eine schöne Weboberfläche für Konfiguration und Administration.

Schreibe einen Kommentar

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