Ansagen an Fritzbox-Nebenstellen abspielen

Hallo,

nachdem es mich gewurmt hat, dass ich nach Umstellung auf VOIP mit Fritzbox keine Telefonanlage mit S0 mehr habe (umgebaut wegen Stromverbrauch der Anlage > 60 Watt; FB läuft ja sowieso;)) und somit das ISDN-Modul für mich so nicht mehr nutzbar ist, mußte eine andere Lösung her. Lange habe ich probiert und getestet.

Hier meine Lösung. Sicherlich geht es auch anders oder sogar einfacher, ab es funktioniert erstmal. Über Tipps freue ich mich.

Ziel

Es soll bei bestimmten Ereignissen aus dem IPS (hier Gefrierschrank ist zu lange offen) ein oder mehrere Telefon(e) der Fritzbox angerufen und ein Sprachfile vorgespielt werden.

Was brauchen wir?

[ul]
[li]Raspberry Pi[/li][li]Fritzbox[/li][li]IPS (bei mir auf Windows)[/li][/ul]

Wie einrichten?

• Asterisk auf Raspi installieren

apt-get update
apt-get upgrade
apt-get install asterisk

• Teilnehmer anlegen (/etc/asterisk/sip.conf)
(z.B. 32 später für Fritzboxanbindung; 30 und 31 zum Testen mit SIP-Client z.B. mit PhoneLite oder 3CX, um Gespräche innerhalb von Asterisk zu führen)

nano /etc/asterisk/sip.conf
[general]
context=default
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
language=de


[30]
callerid=Phone 1 <30>
host=dynamic
domain=192.168.2.45
user=30
secret=geheim
type=friend
mailbox=30
nat=yes
canreinvite=no
language=de

[31]
callerid=Phone 1 <31>
host=dynamic
domain=192.168.2.45
user=31
secret=geheim
type=friend
mailbox=31
nat=yes
canreinvite=no

[32]
callerid=Phone 1 <32>
host=dynamic
domain=192.168.178.45
user=32
secret=geheim
type=friend
mailbox=32
nat=yes
canreinvite=no

• Wählplan anlegen (/etc/asterisk/extensions.conf)

nano /etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=no

; --------------------------------------------------------------------
; Es hat sich als gute Praxis erwiesen, die Inhalte der Datei
; extensions.conf modular aufzubauen. Diese Praxis wollen
; wir auch hier anwenden
;

[callfiletest]
exten => 10,1,Answer()
exten => 10,n,Wait(1)
exten => 10,n,Playback(/etc/asterisk/call/gefrierschrank) 	
exten => 10,n,Wait(1)
exten => 10,n,Hangup()

[lokal]
; Erreichbarkeit der Nebenstellen 30-39
; untereinander herstellen

exten => _3X,1,NoCDR()
exten => _3X,n,Dial(SIP/${EXTEN},10)
exten => _3X,n,VoiceMail(${EXTEN})

; --------------------------------------------------------------------
;
; hier kommt der default-Context, in dem alle Geraete in der
; Grundkonfiguration erstmal laufen.
; Alle Geraete koennen sich gegenseitig anrufen

[default]
include => lokal
include => callfiletest

• neues Verzeichnis anlegen (/etc/asterisk/call)

mkdir /etc/asterisk/call

• Datei mit diesem Inhalt anlegen (/etc/asterisk/call/call)

nano /etc/asterisk/call/call
cp /etc/asterisk/call/call.muster /etc/asterisk/call/call.call
chown asterisk:asterisk /etc/asterisk/call/call.call
mv /etc/asterisk/call/call.call /var/spool/asterisk/outgoing

• Datei (call) ausführbar machen

chmod a+x /etc/asterisk/call/call

• Datei mit diesem Inhalt anlegen (/etc/asterisk/call/call.muster)

nano /etc/asterisk/call/call.muster
Channel: SIP/32		; ruft Nst. 32 an
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Context: callfiletest	; spielt den Context aus der extensions.conf vor
Extension: 10
Archive: yes

• wav-Datei in das Verzeichnis (/etc/asterisk/call/call) kopieren (-> WinSCP)

• in passendes Format konvertieren

sox -V /etc/asterisk/call /gefrierschrank.wav -r 8000 -c 1 /etc/asterisk/call /gefrierschrank.raw

• in der Fritzbox eine neue Internetrufnummer anlegen (Telefonie → Eigene Rufnummern)

• neue Rufnummer min. einem Teilnehmer zuordnen (Telefonie → Telefoniegeräte), damit es bei Anrufen klingelt

• Hinweise und Download auf http://phpseclib.sourceforge.net/

• den entpackten Ordner „phpseclib“ samt Inhalt nach \scripts kopieren

• im IPS ein neues Script anlegen

<?
// Quelle:
// http://www.ip-symcon.de/forum/threads/6657-SSH-m%C3%B6glich?p=195087#post195087
// http://phpseclib.sourceforge.net/

$ip = '192.168.178.45';
$user = 'root';
$pass = 'passwort';
$befehl = '/etc/asterisk/call/call';


set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
//echo get_include_path () . "
";

include('Net/SFTP.php');

$ssh = new Net_SSH2($ip);
if (!$ssh->login($user, $pass)) {
    exit('Login Failed');
}

echo $ssh->exec($befehl)."

";
echo "Datei wird abgespielt.";

?>

• Durch das Ausführen des IPS-Scriptes wird nun einen SSH-Verbindung zum Pi aufgebaut und das Script „call“ aufgerufen, was dazu führt, dass der Asterisk die Datei call.call inhaliert, daraufhin den Teilnehmer 32 (-> Fritzboxteilnehmer) anruft und die Datei gefrierschrank abspielt.

Ich hoffe, ich habe rückblickend nichts vergessen. War schon wieder etwas später heute. Nun wird die Familie wieder telefonisch hingewiesen, bevor die große Pfütze am Gefrierschrank entsteht.

Hallo,

und danke für die tolle Anleitung.

Werde das jetzt für externe Anrufe umsetzten.

Danke. Nach extern will ich auch noch. Ansatz ist ein Trunk im Aserisk mit einem SIP-Teilnehmer der FB, über den man dann rauswählt. Muss ich noch machen. Habe ich noch nicht probiert.

Habe ich bereits umgesetzt und funktioniert. IPS und Asterisk laufen auf meinem Pi und lasse mich bei einem bestimmten Ereignis anrufen und eine WAV-Datei abspielen.

Rufst du auch über den Pi das IPS an? Z.B. um per Telefon das Licht einzuschalten?

Hi, nein ich nutze VPN und die iPhone App :smiley:

Könnte aber auch noch ein Projekt werden.

Will das jetzt mit Geofency lösen und da kämpfe ich gerade bei der Installation, bzw. Konfiguration.

Irgendwie passiert da nix :mad:

Scheiße, wenn man Newbie ist :eek: