|
Projekte rund um Elektronik, Server, Windows und mehr |
|
Raspberry und das Telefon über FritzBox
Nachdem ich meinen Pi in den Haussicherungskasten montiert habe möchte ich den Pi als Türklingelersatz mit erweiterten Funktionen nutzen. Da in dem Haus schon lange die Türklingel mehr schlecht als recht funktioniert, hege ich den Wunsch dies in Ordnung zu bringen. Leider ist auch der Vermieter nicht derjenige der das Problem mal in den Griff bekommt.
Nun muss ich mir Gedanken machen wie ich die Türklingel abgreife und wie ich ein Klingelsignal im Haus auslöse. Ideal wäre es, das sowohl die eigentliche Klingel klingelt, als auch die Telefon.Da ich eine FritzBox im Hause habe über die das WLAN, Telefon,.. läuft sollte es sicher eine Möglichkeit gebe!
... Und siehe da, es ist mehr als einfach! Nun die Klingel welche auf 12V Wechselspanung angesteuert wird, kümmere ich mich später. Die Türklingel über Telefon zu realisieren sollte schneller und einfacher gehen so wie ich das sehe.
Türklingelsignal über Telefone an der FritzBox
Vorbereitungen: Die Fritz Box kann Signale im Netzwerk empfangen um damit Telefone Klingeln zulassen. Um der Fritzbox jedoch mit zu teilen das diese Abfrage auch über das Lokale Hausnetzwerk abgefragt wird und nicht nur intern in der Box muss ich an der FritzBox zunächst Telnet aktivieren um diese Einstellungen konfigurieren zu können. Ich nehme also eines meiner Telefone und gebe ein:
#97*7* und hebe ab.
Ein kurzer Bestätigungston und, normalerweise eine Anzeige im FritzTelefon das Telnet aktiviert wurde , überzeugen mich um weiter zu machen. Nun könnte ich per Telnet weitere Konfigurationen vornehmen. Telnet steht sowohl am PC als auch auf dem Raspberry zur Verfügug. In beiden Fällen muss es jedoch erst installiert werden:
Telnet auf dem PC einrichten:
Unter “Sytemsteuerung / Programme/Programme und Features/Windows-Features aktivieren oder deaktivieren” die Liste der Windows Funktionen herunterscrollen bis Telnet-Client auftaucht. Hier ein Häkchen setzen und mit “OK” bestätigen. Nun wird Telnet auf dem PC installiert”. Nachdem dies erledigt ist, kann über das Startmenü “cmd” eingegeben werden. Sobald ich “cmd” ausführe öffnet sich das schwarze Befehlszeilen-Fenster. Auch als DOS-Fenster bekannt. Hier gebe ich nun ein:
Telnet 192.168.178.1 (Achtung, die IP-Adresse der Fritz!Box kann abweichen).
Telnet auf dem RaspBerry einrichten:
Fast einfacher als auf dem PC lässt sich Telnet auf dem Raspberry installieren:
sudo apt-get update
sudo apt-get install telnet
ist Telne tinstalliert, kann ich es diretk anwenden und gebe somit den Telnet Befhel ein mit der IP Adresse der FritzBox um eine Verbindung mit dieser auf zu bauen:
Telnet 192.168.178.1 (Achtung, die IP-Adresse der Fritz!Box kann abweichen).
FritzBox konfigurieren um das loakle Netzerk auf Rufsignale zu überwachen:
Nachdem ich nun eine Verbdindung mit meiner FritzBox aufgbaut habe und das Kennwort der Box eingegeben habe, kann ich die weiteren Befehele eingeben:
killall -15 telefon (Damit werden die Telefondienste auf der Box angehalten)
Folgende Meldungen müsste in Ähnlicher Form erscheinen:
telefon: SIGTERM received!
telefon: SIGTERM received!
# Aug 14 12:07 audiod[4415]: audiod exiting...
telefon: SIGCHLD PID 9998 received!
telefon: SIGCHLD PID 4389 received!
Mit dem weiteren Befehenl werden abhschließend alle weitere Prozesse beendet und die Box umkonfiguriert. Anshcließend werden die Telefondienste wieder gestartet:
killall -9 telefon
rm -f /var/run/telefon.pid
telefon
Nun müssten einige der angeschlossenen Telefone sich wieder an der Box anmelden un dich kann mein erstes Rufsignal an die Box senden:
echo “ATP1 ATD**9” | nc 192.168.178.1 1011
Dabei wird der Befehl ATP1 ATD**9” an die IP Adresse der Box über den Port 1011 gesendet:
Erklärung: “ATP1 ATD**9” ist der Befehl für ein Rufsignal an alle Teilnehmer. Dies Enstpricht also der Eingabe am Telefon **9 (Rundruf). Möchte ich dagegen ein Anruf gezielt an eine Nummer senden dann verwende ich: ATDT*124#01721234567” Also:
echo “ATDT*124#01721234567” | nc 192.168.178.1 1011
Somit habe ich also recht einfach den ersten Teil meiner Türklingel realisiert.
Alternative mit neueren AVM Routern
Mit neueren Routern von AVM funktioniert die obige Anleitung jedoch leider nicht mehr Di e Telnet-funktion lässt sich nicht mehr aktivieren. Zudem muss der Benutzername und Kennwort länger sein. Die Sicherheitskriterien wurden also erhöt. Daher kommt ein SIP-Client auf dem Raspberry zum Einsatz der auf Kommandozeilenebende funktioner. Dieser nennt sich sipcmd-master. Die Schlanke Installation ermöglicht eine einfache Umsetzung. Alternativ könnte man noch die Telefonanlage asterisk installieren. Jedoch muss hier erheblich mehr Aufwand betrieben werden. Daher hier die Anelitung per sipcmd-master.
Zunächst sollte sipcmd-master installiert werden:
Weitere Vorraussetzungen installieren:
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install libopal-dev libpt-dev -y
Herunterladen des Installationsimages:
Entpacken des Images:
unzip master.zip
Wechseln in das neue Unterverzeichnis:
cd sipcmd-master
Nun müssen zunächst einige Konfigurationen angepasst werden. Die Datei main.cpp liegt wiederum im Unterverzeichnis src und sollte bearbeitet werden. Entweder mit nano oder einem andren Editor. Hier das Beispiel mit nano um die Datei zu öffnen:
sudo nano ./src/main.cpp
In Zeile 268 kann die Reaktionszeit ein wenig angepasst werden. Abhängig vom Netzwerk und der Leistung des Telefonrouters kann die Zeit von 2000ms auf 500 oder evtl. sogar auf 200 reduziert werden. Dies sollte ein wenig ausprobiert werden. Ein guter Ausgangswert dürfte aber 700ms sein. Entsprechend sollte die Zeile 768 folgerndermaßen aussehen. hat sich die Datei main.cpp bereits geändert durch updates oder ähnliches, kann die zeilennummer sich auch ein wenig ändern.:
PThread::Sleep(500);
Ebenso sollte nach der Zeile 313 folgender Eintrag hinzugefügt werden wenn dieser nicht bereits enthalten ist: Es sollten ähnliche Kommandos folgen. Der Eintrag sollte an oberster Stelle dieser Befehblöcke hinzugefügt werden, obwohl das keine entscheiden Relevanz hat.
“a-alias:”
In Zeile 367 kommt ein wichtiger Eintrag wenn man am Telefon einen Text anzeigen lassen will um z.B. den grund für das Klingeln erkenn zu können. Da sipcmd die Textübergabe nicht direkt eingebaut hat, wird diese mit dieser Funktion nachgerüstet. So kann z.B eine Türklingel am Telefefon mit dem Text Haustür signalisiert werden. Zudem könnte dann im Telefonrouter oder der Telefonanlage ein gesonderter Klingelton für den Absender gesetzt werden. Doch nun erst einmal die Nachrüstung der Textübermittlung. Wir fügen also nach der Zeile 313 folgenden Code ein:
if (args.HasOption('a')) {
sipep->SetDefaultDisplayName(args.GetOptionString('a'));
}
So kann sipcmd später mit der Option “-a XXXX” einen Text an die Zielrufnummern übermitteln.Später dazu mehr.
Zuletzt sollte die Datei ./src/state.h noch angepasst werden:
sudo nano ./src/state.h
In Zeile 39 wird der die Sekunden bis zum Abbruch festgelegt. Passen Sie diesen wert Ihren Bedürfnissen an. Bei einem Sammelruf mit **9 sollte dieser Wert in jedem Fall erhöht werden.
#define DIAL_TIMEOUT 10
Die Datei sollte anschließend gespichert werden
Nun muss sipcmd noch Ausfühbar gemacht werden. für die ersten Test sollte man den Debug Modus aktiviert lassen. so lässt sich bei direkter Eingabe die entsprechende ausführliche Protokollierung einsehen mit der man diverse Fehler oder Problem erkennen kann. Wer ausreichen getestet hat deaktiviert in der Datei Makefile die Zeile mit DEBUg indem eine# davor gesetzt wird un kompiliert mit dem Befehl make neu, Wer möchte kann auch diesen Befehl verwenden um die Zeile DEBUG zu deaktivieren:
sed -i 's/^DEBUG/#DEBUG/' ./sipcmd/Makefile
Nun wird sipcmd kompliert und somit ausführbar gemacht. Die Ausführung wird ein wenig dauern:
make
Nachdem dies erledigt kann sipcmd noch in das bin Verzeichnis kopieren. So muss nicht bei jeder AQusführung der ganze Verzeichnispfad mit angegeben werden:
cp /home/BENUTZER/sipcmd-master/sipcmd /bin/sipcmd
Nun kann ein erster Test erfolgen.:
sipcmd -P sip -p 5061 -u Phone623 -c Kennwort -w fritz.box -a Haustür -x “c**9;w30000;h
Zu beachten ist das in der Fritzbox ein Telefongerät auf LAN / SIP Basis eingerichtet wurde. Als Benutzername für dieses Telefon wurde Phone610 hinterlegt. Enstrepchend ergibt aus der Beispiel Befehlszeie folgende Syntax:
-P sip > das zu verndende Telefonprotokoll
-u Phone610 > der Benutzername für die ausgehende Nummer des eingerichteten Telefons (Muss in der FritzBox eingerichtet sein!)
-c Kennwort > das Passwort zu der eingerichteten Nummer / Telefon
-a ____ > der Text welcher dem angerufenen im Display angezeigt werden soll (Alternativ kann dies weg gelassen werden)
-w fritz.box > der Netzwerkname des Telefonrouters oder die IP-Adresse
-x "____" > auszuführende Befehel auf der FritzBox. / Telefonrouter
c**9; > Sammelruf, Alternativ die Zielrufnummer
w30000; > Wartezeit 30 Sekunden (30 Sekunden klingeln)
h > Nach Ablauf der Befehle auflegen
; > dient als Trennzeichen zwischen den Befehlen
**611#612#613# > Beispiel für Gruppenruf (mehrere ausgwählte Ziele).
16.weitere zu Raspberry und Touchscreen >>