Wlan-Klingel mit ESP8266 für Fritzbox

Hallo,
ich habe mir die Wlan-Klingel mit ESP8266 für Fritzbox nach dem Beitrag von Reichelt How-To nachgebaut.
Hierfür habe ich mir Platinen in China fertigen lassen. Da ich natürlich keine 10 Platinen benötige, würde ich die Überzähligen für 1€ + Porto / Stk. hergeben. Bei Interesse schickt mir einfach eine PN.

Schaltplan


Platine

Platine bestückt

Sketch

/*https://www.reichelt.de/magazin/how-to/smarte-tuerklingel/
* http://arduino.esp8266.com/stable/package_esp8266com_index.json
* https://github.com/Aypac/Arduino-TR-064-SOAP-Library
* Einstellungen FritzBox:
* neuer Benutzer mit Kennwort Berechtigungen-->Sprachnachrichten
* Heimnetz Heimnetzübersicht Netzwerkeinstellungen Zugriff für Anwendungen zulassen
* Telefoniegeräte Neues Gerät einrichten Telefon z.B. Fon S0 oder FON1; Name z.B. Haustür
* Telefonbuch Wählhilfe, Wählhilfe verwenden Verbindung mit Name des S0 Gerätes
* IDE 1.8.1
* 24.02.2019
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <tr064.h>

const char WIFI_SSID[] = "FRITZ!Box XXXX";   // <-- ändern
const char WIFI_PASSWORD[] = "XXXXXXXXXXXX"; // <-- ändern
const char USER[] = "esp_klingel";    //Benutzer
const char PASSWORD[] = "123456"; // <-- ändern Kennwort
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() {
  //Serial.begin(115200);
  //Serial.println("Setup");
  WiFi.hostname(DEVICE_NAME);
  WiFi.config(STATIC_IP, GATEWAY, SUBNET, DNS);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  WiFi.mode(WIFI_STA);

  while (WiFi.status() != WL_CONNECTED) { 
   delay(50);
  }
  //Serial.println("mit WLA verbunden");
  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);
  //Serial.println("jetzt müssten die Telefone klingeln");
  // Warte 9 Sekunden bis zum auflegen
  delay(9000);
  tr064_connection.action(tr064_service, "X_AVM-DE_DialHangup");

  ESP.deepSleep(0);
}

void loop() {}

Hi

Wäre was für Zeigt her eure geilen Projekte !.

MfG

Hallo,

nette Geste, nur vermisse ich gewisse Schutzmaßnahmen. Mit welcher Spannung läuft das denn? Wie gezeichnet sicherlich mit 3,3V. Dann steckt jemand sein serielles Kabel an, TTL-USB Wandler, womit 5V anliegen und schon ist der ESP und vielleicht auch der Akku hinüber. Mit dem Reichelt DingsBums hat das nichts zu tun. Klingt jetzt hart, aber an deiner Stelle würde ich hier Vorsicht walten lassen. Sonst zerschießen sich unbedarfte Platinenkäufer noch ihre ESPs.

ich find's von der Idee her nett.

Doc_Arduino:
Hallo,

nette Geste, nur vermisse ich gewisse Schutzmaßnahmen. Mit welcher Spannung läuft das denn? Wie gezeichnet sicherlich mit 3,3V. Dann steckt jemand sein serielles Kabel an, TTL-USB Wandler, womit 5V anliegen und schon ist der ESP und vielleicht auch der Akku hinüber. Mit dem Reichelt DingsBums hat das nichts zu tun. Klingt jetzt hart, aber an deiner Stelle würde ich hier Vorsicht walten lassen. Sonst zerschießen sich unbedarfte Platinenkäufer noch ihre ESPs.

Die Schaltung läuft mit 3,3V. Ich hatte das Reichelt DingsBums auch erst mit dem NodeMCU nachgebaut, hatte aber festgestellt, dass die Schaltung im DeepSleep immernoch 9mA zieht. Darauf habe ich es mit einem nackten ESP8266 12F versucht, der zog nur noch 20µA. Da ich das ganze mit einem LiFePo4 (1000mA Akku betreiben wollte, habe ich mich für die eigene Platine (ohne drumherum) entschieden. Es ist mir auch schon passiert, dass ich den ESP mit einem USB-TTL Wandler mit 5V programmiert habe, hat er schadlos überstanden (ich weiß, außerhalb jeglicher Spezifikation, sollte man auch nicht nach machen). Dem Akku wird beim Programmieren nichts passieren, der kann mit bis zu 1C geladen werden, da geht eher der Wandler in die Knie.

Hallo,

ein einfacher Node, nicht die völlig nackten, zieht bei mir im Sleep 190µA. Man darf nicht diese Vollbestückten verwenden. Ich betreibe einen mit 2 Varta Lithium AA-Batterien (je 2900 mAh).

Moinsen,

Habe mir das ganze auch mal nachgebaut, habe aber das Problem das die Telefone nicht klingeln.

Hat das schonmal jemand von euch gehabt?

Wie müsste die Ereginissanzeige in der FB korrekt aussehen? Bei mir meldet sich der Arduino kurz an, und ein paar sekunden später wieder ab. Ab und zu bekomme ich noch die Meldung das eine App sich mit dem Benutzer "espklingel" angemeldet hat, den Benutzer habe ich im Quellcode so hinterlegt.

An der Fritzbox selbst hängen 2 DECT Telefone, selbst wenn ich die direkte interne Durchwahl auf eines der beiden Telefone lege klingelt es nicht.

Jemand eine idee?

Danke.

Gruß, Thomas

Lösung:

Unter: Telefonie -> Anrufe muss die Wählhilfe aktiviert sein.

Rundruf war bei meiner FB ( 7490 ) die **50. **9 hat nicht funktioniert obwohl es auch ein Rundruf ist.

Hallo,

seltsam, Wählhilfe muss ich nicht aktivieren. FritzBox 7590.

Ich fasse nochmal alles zusammen.

Als erstes lässt man den ESP ganz normal mit seinem Router verbinden.
Dabei müssen auf dem Router neue/fremde WLAN Geräte zugelassen werden.
Solange der ESP im Router mit von ihm automatisch zugewiesener IP nicht auftaucht braucht man nicht weitermachen. Dazu verwendet man folgenden Sketch. SSID und WLAN-Key eintragen nicht vergessen.

#include <ESP8266WiFi.h>

void setup()
{

  Serial.begin(115200);
  Serial.println();

  WiFi.disconnect(true);
  delay(10);
  WiFi.mode(WIFI_STA);
  delay(10);

  WiFi.begin("SSID-Name", "WLAN-Key");  // SSID und WLAN-Key eintragen

  Serial.print("Connecting");

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(100);
    Serial.print(".");
  }

  Serial.println();
  Serial.print("Connected, IP address: ");
  Serial.println( WiFi.macAddress() );
  Serial.println( WiFi.localIP() );
  Serial.println( ESP.getChipId() );
}

void loop()
{

}

Wenn okay IP notieren.

Wenn das geklappt hat konfiguriert man den Router. Bei mir eine Fritzbox 7590.
Unter Telefoniegeräte legt man ein neues Telefon an.

  • Telefon (mit und ohne Anrufbeantworter)
  • LAN/WLAN (IP-Telefon) und sinnvollen Namen vergeben, Bsp. "ESP-Klingel"
  • einen Nutzernamen und Kennwort ausdenken
  • weitere Einstellungen übernehmen

Jetzt nimmt man den Sketch im Anhang und trägt die relevanten Daten ein.

Zeile 49: SSID Namen
Zeile 50: WLAN-Key
Zeile 55: Nutzernamen vom obigen Telefon
Zeile 56: Kennwort vom obigen Telefon
Zeile 60: Anzeigetext bei Bedarf ändern
Zeile 63: die vom Router vergebene IP eintragen, Verbindung soll mit bekannter IP schneller sein

Der Rest ist Standard.

Hinweis.
Es muss kein neuer Fritzbox Benutzer angelegt werden. Hat mit dem Nutzernamen/PW vom Telefoniegerät nichts zu tun.

SIP_Klingel_Forum.ino (15.7 KB)

Vieleicht lag es bei mir daran das ich ein neues Gerät vom Typ "Türsprechanlage" angelegt habe, wobei das ansich keinen Unterschied machen sollte ob es jetzt eine Gegensprechanlage oder ein Telefon ist.

Der Sketch in deinem Anhang ist aber deutlich umfangreicher als der Sktech der in den meisten Tut´s verwendet wird, wobei du glaube ich wenn ich es richtig gesehen habe ohne die sonst üblichen zusätlichen Bib´s auskommst.

Ich werd mal noch ein bisschen rumspielen, bei mir klappt es wie aber schon gesagt nur wenn ich die Wählhilfe aktiviere.

Mit deinem Sketch klappt es auch ohne die Wählhilfe und sogar der Anrufername passt. Tolle Sache!

Danke!

kwoth84:
Mit deinem Sketch klappt es auch ohne die Wählhilfe und sogar der Anrufername passt. Tolle Sache!

Danke!

warum meinst du denn, dass er Doc im Namen führt :wink:

Hallo,

oh, freut mich das es geklappt hat.

"Doc" fand ich damals cool im Nickname. Man könnte auch rumdoktern deuten. :slight_smile: Hat im Leben keine weitere Bedeutung.

Ich habe im Grunde bei dem ESP solange rumgedoktert bis er bei mir funktionierte. Der Link zum Originalpost ist im Sketch enthalten. Vorher hatte ich einen Raspi mit Asterixserver zum laufen gebracht, was rein praktisch viel zu kompliziert und teurer ist. Bis besagter "unbekannter" User das vereinfacht hatte. Dankt ihm. :wink:

Muss mich mal kurz dazu melden.

Ich hatte seinerzeit den Sketch im Microkontoller Forum gefunden und hier angeschleppt, weils gut zum Thema passte.

Inzwischen gibt es wohl auch einen Rückkanal zum Türöffnen.

Wollte ich nur anbringen, könnte evtl. für den einen oder anderen interessant sein.
Vorallem wenn das Teil als Türklingel fungiert.

was ich richtig geil finden würde wäre eine ESP32 mit Kamera mit Bild auf dem FritzFon wenns klingelt

mit sowas: https://de.aliexpress.com/item/32992663411.html?spm=a2g0o.productlist.0.0.471f1aaaasfu7R&algo_pvid=cc4a43c1-c127-4199-a590-2454ffba1a50&algo_expid=cc4a43c1-c127-4199-a590-2454ffba1a50-0&btsid=c7b73a0a-d150-44a9-b3be-4a44479a0881&ws_ab_test=searchweb0_0,searchweb201602_2,searchweb201603_55

e_brandt:
was ich richtig geil finden würde wäre eine ESP32 mit Kamera mit Bild auf dem FritzFon wenns klingelt
......

Wo ist dein Problem.
Kannst du dir doch damit selbst bauen.

Oder was war gleich die Frage ?

@ Doc_Arduino

Zeile 49: SSID Namen
Zeile 50: WLAN-Key
Zeile 55: Nutzernamen vom obigen Telefon
Zeile 56: Kennwort vom obigen Telefon
Zeile 60: Anzeigetext bei Bedarf ändern
Zeile 63: die vom Router vergebene IP eintragen, Verbindung soll mit bekannter IP schneller sein

ich habe mal versucht dein Programm auf den ESP zu bringen, scheitere aber schon an Zeile 55 + 56. Was ist der Nutzername des Telefon's? Name des Telefoniegerätes? Bei meiner FB kann ich kein Kennwort für ein Telefon vergeben, was kommt hierhin.

Hallo,

lies bitte nochmal den gesamten Text in #8. Dann weist du worauf sich das Wort "obigen" bezieht, damit sollte die Frage geklärt sein.

Doc_Arduino:
Hallo,

lies bitte nochmal den gesamten Text in #8. Dann weist du worauf sich das Wort "obigen" bezieht, damit sollte die Frage geklärt sein.

Du hast recht, wer lesen kann ist klar im Vorteil.

Freut mich, erspart mir viel Tipparbeit nur für eine andere Formulierung mit gleichen Inhalt. :wink: