Fortsetzung von (1) Idee
Widmen wir uns nun der praktischen Umsetzung. Ich setze voraus, dass ein paar Linux-Kenntnisse vorhanden sind, weshalb nicht alle Schritte ausführlich erklärt sind.
benötigte Hardware
- RaspberryPi (getestet mit Modell B)
- Gehäuse
- Netzteil
- MicroSD-Karte
- WLAN-Dongle
- SIP-Clients (Smartphone, VoIP-Telefon, alternativ Software-Client)
benötigte Software für den Raspberry
- Raspbian
- Asterisk
- Apache2
- PHP5
Grundeinrichtung
- Raspbian auf Speicherkarte übertragen und Installieren
In dieser Anleitung wird als Hostenamenotrufsim
angenommen - Installation auf den neusten Stand bringen
sudo apt-get update
sudo apt-get upgrade
- Installation von Asterisk, Apache2 und PHP5
sudo apt-get install asterisk apache2 php5
- Anlegen eines Ordners im Webserver für die Aufzeichnungen
sudo mkdir /var/www/doku
sudo chown 33:33 /var/www/doku
Konfigurieren von Asterisk
sudo nano /etc/asterisk/asterisk.conf
In dieser Datei braucht primär nichts geändert zu werden. In dieser Anleitung wird von dieser Grundversion ausgegangen …
[directories](!) astetcdir => /etc/asterisk astmoddir => /usr/lib/asterisk/modules astvarlibdir => /var/lib/asterisk astdbdir => /var/lib/asterisk astkeydir => /var/lib/asterisk astdatadir => /usr/share/asterisk astagidir => /usr/share/asterisk/agi-bin astspooldir => /var/spool/asterisk astrundir => /var/run/asterisk astlogdir => /var/log/asterisk [options] documentation_language = en_US [compat] pbx_realtime=1.6 res_agi=1.6 app_set=1.6
Die Endgeräte-Einstellung
sudo nano /etc/asterisk/sip.conf
Hier definieren wir unsere Telefone und ordnen sie verschiedenen Kontexten zu. Darauf basierend wird hinterher in der extensions.conf der Wählplan programmiert.
[general] allowguest=no port = 5060 bindaddr = 0.0.0.0 qualify = no ;disable = all allow = all videosupport = yes dtmfmode = rfc2833 srvlookup = yes localnet=10.0.0.0/255.255.255.0 directmedia = no nat = yes language=de [1000] callerid=Leitstelle AMT <19222> permit=10.0.0.0/255.255.255.0 type=friend context=lst-amt host=dynamic secret=1000 [1001] callerid=Leitstelle NOTRUF <112> permit=10.0.0.0/255.255.255.0 type=friend context=lst-not host=dynamic secret=1001 [2000] callerid=Anrufer1 <2000> permit=10.0.0.0/255.255.255.0 type=friend context=anrufer host=dynamic secret=2000 [2001] callerid=Anrufer2 <2001> permit=10.0.0.0/255.255.255.0 type=friend context=anrufer host=dynamic secret=2001
Der Wählplan
sudo nano /etc/asterisk/extensions.conf
Hier ist die meiste Arbeit erforderlich. Ich habe ein paar Makros für die Anrufverarbeitung erstellt. Hier werden u.a. die Aufnahmen gestartet, nach Gesprächsende in den Webserver kopiert und das Calllog gefüttert.
Weiterhin sind die entsprechenden Rufnummern definiert:
- Mit der 4-stelligen Nummer aus der sip.conf können alle Teilnehmer direkt angewählt werden. [direkt]
- Mit 112 wird ein Anruf auf den Client 1001 initiert. Zuvor wird eine kleine Ansage abgespielt und die Aufnahme gestartet und die CallerID modifiziert. [notruf]
- Mit 19222 wird ein Anruf auf den Client 1000 initiert. Hier wird nur die CallerID modifiziert. Eine Aufzeichnung findet nicht statt. [amt]
- Mit einer beliebigen mit 0 beginnden Rufnummer wird ein Anruf auf den Client 2000 initiert. [amt]
- Mit **112 bzw **19222 kann man sich auf ein bestehendes Gespräch aufschalten und lauschen. [amt]
- Versucht man vom Client 1001 (Notrufleitung) aus abgehende Gespräche zu führen, wird dies abgewiesen [block]
Im unteren Teil der Datei werden die Kontexte aus der sip.conf mit den hier beschriebenen Wählregeln verbunden.
[globals] [general] [macro-call] exten => s,1,Verbose(Anrufdaten merken) ;same => n,Set(MONITOR_FILENAME=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${MACRO_EXTEN}-${CALLERID(num)}) same => n,Set(MONITOR_EXTEN=${MACRO_EXTEN}) same => n,Set(cid=${CALLERID(num)}) same => n,Set(cname=${CALLERID(name)}) [macro-doku] exten => s,1,Verbose(starte Aufzeichnung) same => n,Set(MONITOR_FILENAME=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${MACRO_EXTEN}-${CALLERID(num)}) same => n,Playback(queue-youarenext) same => n,MixMonitor(${MONITOR_FILENAME}.wav) [macro-endcall] exten => s,1,Verbose(erstelle Info) same => n,TrySystem(echo "${STRFTIME(${EPOCH},,%Y%m%d)},${STRFTIME(${EPOCH},,%H%M%S)},${MONITOR_EXTEN},${cid},${cname},${DIALSTATUS},${ANSWEREDTIME},${REC_FILENAME}" >> /var/www/doku/calllog.csv) same => n,TrySystem(chmod 0664 /var/www/doku/*) [macro-enddoku] exten => s,1,Verbose(kopiere Aufzeichnung) same => n,System(lame -b 128 -m m -h /var/spool/asterisk/monitor/${MONITOR_FILENAME}.wav /var/www/doku/rec_${MONITOR_FILENAME}.mp3) same => n,Set(REC_FILENAME=rec_${MONITOR_FILENAME}.mp3) same => n,TrySystem(chmod 0664 /var/www/doku/*) [block] ; Anrufe über die Notrufleitungen sperren exten => _X.,1,PlayBack(conf-locked) exten => _X.,n,HangUp [direkt] ; Direkte Anwahl interner Teilnehmer exten => _XXXX,1,Macro(call) exten => _XXXX,n,Dial(SIP/${EXTEN}) [notruf] ; Routing für Notruf 112 exten => 112,1,Macro(call) exten => 112,n,Macro(doku) exten => 112,n,Set(CALLERID(all)=112: ${cid} ${cname} <${cid}>) exten => 112,n,Dial(SIP/1001,,g) [amt] ; Routing für Amtsanrufe ; 19222 => Leitstelle exten => 19222,1,Macro(call) exten => 19222,n,Set(CALLERID(all)=AMT: ${cid} ${cname} <${cid}>) exten => 19222,n,Dial(SIP/1000,,g) ; beliebige => 2000 exten => _0X.,1,Macro(call) exten => _0X.,n,Dial(SIP/2000) ; Mithören von 112 und 19222 exten => **112,1,ChanSpy(SIP/1001) exten => **19222,1,ChanSpy(SIP/1000) [hangup] ; Anrufdaten ins Log exten => h,1,ExecIf($["${MONITOR_FILENAME}" != "" & "${ANSWEREDTIME}" > "15"]?Macro(enddoku)) exten => h,n,Macro(endcall) [anrufer] ; Context für Anrufer include => direkt include => amt include => notruf include => hangup [lst-not] ; Context für Leitstelle Notrufleitung include => block [lst-amt] ; Context für Leitstelle Amtsleitung include => direkt include => amt include => notruf include => hangup
sudo /etc/init.d/asterisk restart
weiter mit (3) WLAN-AP MIT DHCP