Smarte Türklingel mit dem ESP8266 und Fritz!Box selber bauen  

Smarte Türklingel mit dem ESP8266 und Fritz!Box selber bauen

Manchmal ist es schwierig, die Türklingel zu hören, sei es im Keller, mit Kopfhörern oder bei lauter Musik. Wäre es da nicht schön, eine einfache, portable Lösung zu haben, die sich am besten auch noch in bestehende Infrastruktur integriert?

Das Projekt

Geeignet für: Fortgeschrittene

Zeitaufwand: ca. 2 Stunden

Das brauchen Sie: NodeMCU ESP8266 Wi-Fi module, Optokoppler, Gleichrichterdiode, Widerstand 560 Ohm, Breadboard, Einbaukupplung zum Testen/Simulieren der Klingel

Budget: ca. 14 Euro

Die Komponenten

Wir verwenden den beliebten ESP8266-Mikrocontroller und eine Fritz!Box, um unsere DECT-Handgeräte zu einer mobilen Türklingel zu machen.

Die Besonderheiten des ESP8266 machen ihn zur perfekten Basis für dieses Projekt: Er verfügt über WLAN, verbraucht im Deep-Sleep-Modus weniger als ein mW und ist einfach zu programmieren.

Deswegen gibt es auch eine breite Entwickler-Community, die für eine gute Tool-Unterstützung und viele Ressourcen sorgt.

Das von uns verwendete Entwickler-Modul ist über ein handelsübliches Mikro-USB-Kabel programmierbar, das bei der Entwicklung gleichzeitig der Stromversorgung dient.

Wer die Klingelschaltung besonders handlich möchte, kann auf besonders kompakte Module wie das ESP-12F (DEBO ESP8266-12F) zurückgreifen. Dann benötigt man noch einen USB-TTL-UART-Konverter für die Entwicklung.

Für die Programmierung verwenden wir Arduino-IDE.

Die Elektronik

Die Testschaltung

Für die Entwicklung benötigen wir außer dem ESP nur etwas Draht. Zum Simulieren des Klingelns reicht es, Reset (RST) und Ground (GND) des ESP miteinander zu verbinden.

Die Klingelschaltung

Für den Einsatz an der echten Türklingel sind nur wenige Bauteile notwendig: Ein Optokoppler trennt die Stromkreise des Klingeltrafos und des ESP. Bekommt der Optokoppler Strom, werden der Reset (RST) und Ground (GND) des ESP verbunden. Der Mikrocontroller erwacht aus dem Deep-Sleep-Zustand und startet das Klingel-Programm.

Übliche Klingeltrafos liefern eine Wechselspannung zwischen acht und 24 V. Der Widerstand R1 sorgt dafür, dass der Optokoppler eine Spannung von 1,2 V erhält und muss deswegen auf die Klingelspannung abgestimmt werden. Die Diode sorgt dafür, dass aus Wechselspannung der Klingel Gleichspannungsimpulse für den Optokoppler werden. Solange das Programm läuft, ist es übrigens egal, ob der Reset mehrmals ausgelöst wird.

Für eine Stromversorgung mit Batterien (3-3,6 V) muss die Batteriehalterung an die Pins 3V und GND angeschlossen werden.

R1-Werte für übliche Klingelspannungen:

KlingelspannungR1
8 V330 Ohm
12 V560 Ohm
24 V1,2 kOhm

Fritz!Box vorbereiten

Damit unser Mikrocontroller mit der Fritz!Box kommunizieren kann, benötigen wir Zugriff über das TR-064-Protokoll. Dafür muss im Administrationsmenü der Fritz!Box (http//fritz.box) unter ”Heim”“Heimnetzübersicht”“Netzwerkeinstellungen” der Haken bei “Zugriff für Anwendungen zulassen” gesetzt sein.

Die Software

Arduino IDE-Einrichten

Die Programmierung des ESP8266 erfolgt bei unserem Entwickler-Board über USB, welches gleichzeitig auch zur Stromversorgung bei der Entwicklung dient.

Wir verwenden Arduino-IDE, um die Software zu kompilieren und den Microcontroller zu programmieren.

Standardmäßig sind in Arduino-IDE nur Boards aus der Arduino-Familie verfügbar. Die ESP8266-Entwickler stellen dafür entsprechende Board-Konfigurationen bereit:

  1. In den Einstellungen der Arduino-IDE (“Datei” -> “Voreinstellungen ändern”) in das Feld “Zusätzliche Boardverwalter-URLs” die URL für ESP8266-Boards eintragen:
    http://arduino.esp8266.com/stable/package_esp8266com_index.json
  2. Die Board-Konfiguration mit entsprechendem Tooling über den “Boardverwalter” (“Werkzeuge” -> “Board: Arduino/Genuino Uno” -> “Boardverwalter”) installieren. Einfach als Zielverzeichnis ESP8266 angeben und die aktuellste Version wählen. Der Download beträgt ca. 150 MB, weil eigene Compiler, Libraries und Tools für ESP8266-Systeme benötigt werden.

Nach der abgeschlossenen Installation können auch ESP8266-Boards gewählt werden, in unserem Fall “NodeMCU 1.0 (ESP-12E Module)”.

Die vollständige Dokumentation finden Sie hier.

Installation der TR-064-Bibliothek

Die Kommunikation mit der Fritz!Box erfolgt über das TR-064-Protokoll. Eine entsprechende Library findet man hier.

Zur Installation einfach den Ordner „TR-064-SOAP-Library“ in das Verzeichnis für Arduino-Libraries im Homeverzeichnis verschieben ( Arduino/libraries unter Linux bzw. Dokumente/Arduino/libraries bei Windows).

Das Programm

Mit diesem kurzen Programm ruft das ESP8266-Board bei jedem angeschlossenen Telefon für vier Sekunden an, wenn die Klingel betätigt wird, und geht anschließend wieder in den Deep-Sleep-Modus:

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <tr064.h>

const char WIFI_SSID[] = "WLANNAME(SSID)";   // <-- ändern
const char WIFI_PASSWORD[] = "WLANPASSWORT"; // <-- ändern
const char USER[] = "admin";
const char PASSWORD[] = "PASSWORT"; // <-- ändern
const char FRITZBOX_IP[] = "192.168.178.1";
const int FRITZBOX_PORT = 49000;

TR064 tr064_connection(FRITZBOX_PORT, FRITZBOX_IP, USER, PASSWORD);

const IPAddress STATIC_IP(192, 168, 178, 230);
const IPAddress GATEWAY(192, 168, 178, 1);
const IPAddress SUBNET(255, 255, 255, 0);
const IPAddress DNS(GATEWAY);

const char DEVICE_NAME[] = "ESP-Klingel";

void setup() {
  WiFi.hostname(DEVICE_NAME);
  WiFi.config(STATIC_IP, SUBNET, GATEWAY, DNS);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  WiFi.mode(WIFI_STA);

  while (WiFi.status() != WL_CONNECTED) { 
   delay(50);
  }

  tr064_connection.init();

  String tr064_service = "urn:dslforum-org:service:X_VoIP:1";

  // Die Telefonnummer **9 ist der Fritzbox-Rundruf.
  String call_params[][2] = {{"NewX_AVM-DE_PhoneNumber", "**9"}};
  tr064_connection.action(tr064_service, "X_AVM-DE_DialNumber", call_params, 1);

  // Warte vier Sekunden bis zum auflegen
  delay(4000);
  tr064_connection.action(tr064_service, "X_AVM-DE_DialHangup");

  ESP.deepSleep(0);
}

void loop() {}

Zunächst werden die notwendigen Parameter definiert, damit sich der ESP8266 mit dem Netzwerk verbinden und die TR-064-Schnittstelle aufrufen kann.

Benutzername und Passwort für das Fritz!Box-Login sind für die Authentifizierung an der TR-064-Schnittstelle notwendig (der Benutzername ab Werk ist “admin”). Außerdem wird eine Instanz des TR-064 API-Clients erstellt.

Damit der Mikrocontroller die meiste Zeit im energiesparenden Deep-Sleep-Modus verbringen kann, meldet er sich bei jedem Aufruf erneut beim Netzwerk an. Um die Reaktionszeit zwischen Betätigung der Klingel und dem Anruf bei den Telefonen kurz zu halten, verwenden wir deswegen eine feste IP-Adresse und verzichten auf eine langsamere dynamische Vergabe per DHCP.

Erfahrenen Arduino-Entwicklern fällt sofort auf, dass sich die gesamte Programmlogik in setup() und nicht in loop() befindet. Das liegt an der Funktionsweise des ESP8266, der im Deep-Sleep-Modus alle Komponenten außer der Real Time Clock abschaltet, einschließlich der CPU. Damit kann loop() in diesem Zustand nicht ausgeführt werden. setup() wird jedes Mal ausgeführt, wenn der Mikrocontroller aufgeweckt wird.

Die letzten Schritte

Zunächst wird die Verbindung mit dem WLAN hergestellt, danach die Verbindung zur TR-064-Schnittstelle. Über diese erfolgt zunächst ein Anruf bei allen verbundenen Handgeräten, nach vier Sekunden legen wir wieder auf. Wer möchte, kann stattdessen natürlich auch die Direktwahl eines bestimmten Handgerätes verwenden.

Zum Hochladen des Programms muss noch ein Port ausgewählt werden (auch wenn es in der Regel nur einen gibt, unter “Werkzeuge”“Port”“COM3” unter Windows bzw. “ttyUSB0” unter Linux). Dann einfach auf den Button mit dem Pfeil klicken.

Das Programm wird nach dem Hochladen gleich zum ersten Mal ausgeführt und die Telefone läuten kurz. Um das Programm erneut auszuführen, einfach GND und RST am Microcontroller kurzschließen.

Viel Spaß!

 

Titelbild: Adobe Stock, 161405299, terovesalainen

 

Ihre Meinung zählt: Was denken Sie zu diesem Thema?

Bisherige Abstimmungsergebnisse werden geladen.
 

Schreiben Sie einen Kommentar:

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