- Mitglied seit
- 27 Dez 2004
- Beiträge
- 3,309
- Punkte für Reaktionen
- 9
- Punkte
- 38
Moin,
es gibt hier ja schon einige Threads dazu, wie man die Fritzbox dazu bringen kann, auf Knopfduck ein Ziel zu wählen - z.B. mit modifizierter Firmware und USB-Druckerkabel, was zwar billig ist, aber bei jedem Firmwareupdate neu eingerichtet werden muss. Auch Wahlgeräte für den Anschluss an einen fon-Port sind bisher als Lösung vorgeschlagen worden, was zwar firmwareunabhängig funktioniert, aber nicht ganz billig ist.
Inspiriert vom Who-ist-home-indicator und unter Nutzung der zugehöhrigen TR-064 Library auf GitHub habe ich ein einfaches Programm für die NodeMCU geschrieben, welches auf Knopfdruck die Wählhilfe der Fritzbox nutzt, um einen Anruf auszulösen. Dies funktioniert über die reguläre API der Fritzboxen, bedarf also keiner Firmwareanpassungen. Es ist die gleiche Methode, mit der auch Desktopprogramme die Wahlhilfe verwenden.
Basis ist die NodeMCU, ein stromsparender Microcontroller mit WLAN für ca. 3,20€ (über eBay einschließlich Versand aus China) bzw. 7,99 auf Amazon (wenn man nicht 4-6 Wochen auf die Lieferung warten möchte). Der Strombedarf ist dabei so gering, dass man die NodeMCU auch an älteren Fritzboxen direkt aus deren USB-Buchse versorgen kann.
Nähere Informationen über die NodeMCU und wie man diese mit der ArduinoIDE programiert, findet man hier.
Hat man die ArduinoIDE installiert und wie dort beschrieben den Boardmanager für ESP8266 (das ist der eigentliche WLAN-Controller auf der NodeMCU) nachinstalliert, so muss man nur noch die oben genannte TR-064 Library herunter laden und installieren. Direkt kann man die Zip nicht als Library in der ArduinoIDE importieren, ich habe das Archiv deshalb entpackt und nur den Inhalt des library-Unterverzeichenes gezippt. Das lies sich dann importieren.
Schießt man die NodeMCU an den PC an, so muss ggf. noch der Treiber für den integrierten USB-Seriellwandler installiert werden (ja, auch der ist bei den 3,20€ on board). Danach schaut man im Gerätemanager, welche COM-Port hinzu gekommen ist. In der Arduino-IDE wählt man nun die NodeMCU und den COM-Port.
Jetzt kann man auch schon in der IDE programmieren - z.B. mit Copy/Paste folgendes Programm rein kopieren:
In dem Code muss man eine WLAN-SSID und Passwort eintragen. Dass muss nicht von der Fritzbox sein, deren Wählhilfe man aufrufen möchte, es kann auch eine andere im heimischen Netz sein. Hauptsache, man kommt über das WLAN zu der IP der fernzusteuernden Box.
Ebenfalls muss ein Benutzername und Passwort für das Web-Login eingetragen werden. Dazu legt man in der Fritzbox erstmal einen Benutzer mit den nötigen Rechten an.
Auch die IP der Fritzbox steht im Programm (Standard: 192.168.178.1).
Als Zielrufnummer ist **799 eingetragen, im Telephonbuch der Fritzbox kann man hier beliebige Ziele eintragen (z.B. **9 für Rundruf). Wählhilfe muss in der Fritz!Box aktiviert und auf ein Telephon eingestellt werden.
In der Arduino-IDE muss man nur noch "hochladen" klicken, das Programm wird dann kompilliert und auf die NodeMCU geschrieben.
Das war es auch schon. Als Taster habe ich den D3-Pin gewählt, auf der NodeMCU ist damit intern bereits der "Flash"-Taster verbunden. Drückt man diesen Taster, startet die Wahlhilfe. Man kann also gleich ausprobieren, ohne weitere Hardware anzuschließen.
Im Einsatz macht es natürlich Sinn, einen externen Taster anzuschließen. Einfach mit einer Taste D3 und Masse verbinden.
Will man an eine vorhandene Türklingel anknüpfen, nimmt man einen Optokoppler mit Vorwiderstand oder wahlweise ein Relais.
Ich habe das ganze erst seit einer Stunde fertig, kann zur Langzeitfunktion also noch nichts sagen. Einen Neustart der Fritzbox überlebts aber. Ich werde es erstmal ein-zwei Wochen ins Regal stellen (eingeschaltet) und dann testen, obs noch läuft.
Erweiterungsmöglichkeiten:
Zu letzerem Punkt bietet sich geradezu das Gewinnerprojekt aus der ct´hacks als Vorlage an, der Frizbox Callmonitor für Wählscheibentelefone. Im Sourcecode auf Github findet man ein Beispiel, wie man die Callmonitorschnittstelle der Fritzbox auswertet. Der Trick wäre nun, dass man mit dem hier vorgestellten Wähbutton eine Verbindung über eine externe Rufnummer hestellt, die auf der Callmonitorschnittstelle signalisiert wird und intern auf fon2 klingelt. An fon2 kommt das Lineinterface aus einem alten Analogmodem. Dies signalisert "ring", wenn das Ziel abgenommen hat. Dies wird mit dem Microcontroller verbunden, der entsprechend "Hook" auslöst und das Relais für die Stromversorgung der FTZ123D12-Türsprechstelle aktiviert. Es wird weiter die Callmonitorschnittstelle überwacht, wenn die Verbindung von einem Ende getrennt wird, wird hook und Strom für die TFE wieder deaktiviert. Auch zum Türöffnen wird der Callmonitor verwendet: Wird versucht, eine ungültige extertene Nummer (z.B.000123) anzurufen, erscheint schon der Versuch der Verbindung im Callmonitor. Daraufhin kann der Microcontroller ein TÖ-Relais schalten. Man löst also das Türöffnen durch eine "Rückfrage" an die ungültige Nummer aus.
es gibt hier ja schon einige Threads dazu, wie man die Fritzbox dazu bringen kann, auf Knopfduck ein Ziel zu wählen - z.B. mit modifizierter Firmware und USB-Druckerkabel, was zwar billig ist, aber bei jedem Firmwareupdate neu eingerichtet werden muss. Auch Wahlgeräte für den Anschluss an einen fon-Port sind bisher als Lösung vorgeschlagen worden, was zwar firmwareunabhängig funktioniert, aber nicht ganz billig ist.
Inspiriert vom Who-ist-home-indicator und unter Nutzung der zugehöhrigen TR-064 Library auf GitHub habe ich ein einfaches Programm für die NodeMCU geschrieben, welches auf Knopfdruck die Wählhilfe der Fritzbox nutzt, um einen Anruf auszulösen. Dies funktioniert über die reguläre API der Fritzboxen, bedarf also keiner Firmwareanpassungen. Es ist die gleiche Methode, mit der auch Desktopprogramme die Wahlhilfe verwenden.
Basis ist die NodeMCU, ein stromsparender Microcontroller mit WLAN für ca. 3,20€ (über eBay einschließlich Versand aus China) bzw. 7,99 auf Amazon (wenn man nicht 4-6 Wochen auf die Lieferung warten möchte). Der Strombedarf ist dabei so gering, dass man die NodeMCU auch an älteren Fritzboxen direkt aus deren USB-Buchse versorgen kann.
Nähere Informationen über die NodeMCU und wie man diese mit der ArduinoIDE programiert, findet man hier.
Hat man die ArduinoIDE installiert und wie dort beschrieben den Boardmanager für ESP8266 (das ist der eigentliche WLAN-Controller auf der NodeMCU) nachinstalliert, so muss man nur noch die oben genannte TR-064 Library herunter laden und installieren. Direkt kann man die Zip nicht als Library in der ArduinoIDE importieren, ich habe das Archiv deshalb entpackt und nur den Inhalt des library-Unterverzeichenes gezippt. Das lies sich dann importieren.
Schießt man die NodeMCU an den PC an, so muss ggf. noch der Treiber für den integrierten USB-Seriellwandler installiert werden (ja, auch der ist bei den 3,20€ on board). Danach schaut man im Gerätemanager, welche COM-Port hinzu gekommen ist. In der Arduino-IDE wählt man nun die NodeMCU und den COM-Port.
Jetzt kann man auch schon in der IDE programmieren - z.B. mit Copy/Paste folgendes Programm rein kopieren:
Code:
/**
* caller.ino
* Oliver-André Urban
* based on
* home-indicator.ino
* by René Vollmer
* Example code for the home-indicator-project
*
* many thanks to René for his TR-064 library
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <tr064.h>
#define USE_SERIAL Serial
#define TASTER D3
// Flash Taster - you can connect a seperate button to D3 or an opto-coupler
// for example: use a resistor and an opto-coupler to connect to a doorbell
ESP8266WiFiMulti WiFiMulti;
//Put your router settings here
//Wifi network name (SSID) and WLAN-Password
const char* wifi_ssid = "WLANSID";
const char* wifi_password = "12345678901234567890";
//The username and password you created for login (Anmeldung aus dem Heimnetz mit Benutzername und Passwort)
const char* fuser = "meinbenutzername";
const char* fpass = "meinpasswort";
//IP address of your router. This should be "192.168.178.1" for most FRITZ!Boxes
const char* IP = "192.168.178.1";
//Port of the API of your router. This should be 49000 for all TR-064 devices.
const int PORT = 49000;
//Do not mess with these :)
//TR-064 connection
TR064 connection(PORT, IP, fuser, fpass);
void setup() {
//Wait a few secs for warm-up (dunno why, was in the default code for http connections).
delay(5000);
//Connect to wifi
WiFiMulti.addAP(wifi_ssid, wifi_password);
//Wait for the wifi to connect
while ((WiFiMulti.run() != WL_CONNECTED)) {
delay(100);
}
pinMode(TASTER, INPUT); // Port as input
}
void loop() {
int taste = digitalRead(TASTER);
if (digitalRead(TASTER)== LOW)
{
USE_SERIAL.println();
USE_SERIAL.printf("Taste gedrückt");
callWahlhilfe();
delay(20000);
}
else
{
USE_SERIAL.println();
USE_SERIAL.printf("Taste nicht gedrückt");
delay(50);
}
//delay(100);
}
int callWahlhilfe() {
// Maybe the WLAN connection is lost, so testing an reconnect if needed
if ((WiFiMulti.run() != WL_CONNECTED)) {
WiFiMulti.addAP(wifi_ssid, wifi_password);
while ((WiFiMulti.run() != WL_CONNECTED)) {
delay(100);
}
}
// (Re-) Initialize the TR-064 library - it is done every time, as maybe the connection has lost before
connection.init();
String params[][2] = {{"NewX_AVM-DE_PhoneNumber", "**799"}};
String req[][2] = {{}};
connection.action("urn:dslforum-org:service:X_VoIP:1", "X_AVM-DE_DialNumber", params, 1, req, 0);
}
In dem Code muss man eine WLAN-SSID und Passwort eintragen. Dass muss nicht von der Fritzbox sein, deren Wählhilfe man aufrufen möchte, es kann auch eine andere im heimischen Netz sein. Hauptsache, man kommt über das WLAN zu der IP der fernzusteuernden Box.
Ebenfalls muss ein Benutzername und Passwort für das Web-Login eingetragen werden. Dazu legt man in der Fritzbox erstmal einen Benutzer mit den nötigen Rechten an.
Auch die IP der Fritzbox steht im Programm (Standard: 192.168.178.1).
Als Zielrufnummer ist **799 eingetragen, im Telephonbuch der Fritzbox kann man hier beliebige Ziele eintragen (z.B. **9 für Rundruf). Wählhilfe muss in der Fritz!Box aktiviert und auf ein Telephon eingestellt werden.
In der Arduino-IDE muss man nur noch "hochladen" klicken, das Programm wird dann kompilliert und auf die NodeMCU geschrieben.
Das war es auch schon. Als Taster habe ich den D3-Pin gewählt, auf der NodeMCU ist damit intern bereits der "Flash"-Taster verbunden. Drückt man diesen Taster, startet die Wahlhilfe. Man kann also gleich ausprobieren, ohne weitere Hardware anzuschließen.
Im Einsatz macht es natürlich Sinn, einen externen Taster anzuschließen. Einfach mit einer Taste D3 und Masse verbinden.
Will man an eine vorhandene Türklingel anknüpfen, nimmt man einen Optokoppler mit Vorwiderstand oder wahlweise ein Relais.
Ich habe das ganze erst seit einer Stunde fertig, kann zur Langzeitfunktion also noch nichts sagen. Einen Neustart der Fritzbox überlebts aber. Ich werde es erstmal ein-zwei Wochen ins Regal stellen (eingeschaltet) und dann testen, obs noch läuft.
Erweiterungsmöglichkeiten:
- Mehrere Tasten für mehrere Rufziele
- Ein-/Ausschalten von Rufumleitungen auf Tastendruck
- Zweiter NodeNCU, der den Callmonitorport überwacht: Damit ließe sich ein Lineinterface aus einem alten Analogmodem so steuern, dass man für fast kostenfrei ein FTZ123D12 realisieren kann (aber Umweg über externe Verbindung erforderlich, damit der Callmonitor funktioniert).
Zu letzerem Punkt bietet sich geradezu das Gewinnerprojekt aus der ct´hacks als Vorlage an, der Frizbox Callmonitor für Wählscheibentelefone. Im Sourcecode auf Github findet man ein Beispiel, wie man die Callmonitorschnittstelle der Fritzbox auswertet. Der Trick wäre nun, dass man mit dem hier vorgestellten Wähbutton eine Verbindung über eine externe Rufnummer hestellt, die auf der Callmonitorschnittstelle signalisiert wird und intern auf fon2 klingelt. An fon2 kommt das Lineinterface aus einem alten Analogmodem. Dies signalisert "ring", wenn das Ziel abgenommen hat. Dies wird mit dem Microcontroller verbunden, der entsprechend "Hook" auslöst und das Relais für die Stromversorgung der FTZ123D12-Türsprechstelle aktiviert. Es wird weiter die Callmonitorschnittstelle überwacht, wenn die Verbindung von einem Ende getrennt wird, wird hook und Strom für die TFE wieder deaktiviert. Auch zum Türöffnen wird der Callmonitor verwendet: Wird versucht, eine ungültige extertene Nummer (z.B.000123) anzurufen, erscheint schon der Versuch der Verbindung im Callmonitor. Daraufhin kann der Microcontroller ein TÖ-Relais schalten. Man löst also das Türöffnen durch eine "Rückfrage" an die ungültige Nummer aus.
Zuletzt bearbeitet: