Beiträge zu “Asterisk”

Cisco SIP Telefone für Asterisk mit Ansible verwalten

Ich verwende seit kurzem wieder ausschließlich Asterisk als Telefonanlage und dazu Cisco 7960 SIP Telefone.

Generell ist diese Konfiguration in diesem Privathaushalt mit Homeoffice recht einfach. Jeder darf mit jedem telefonieren und ich lege zentral fest welches Telefon bei welcher externen Nummer klingel soll. Also keine Benutzer mit Kennwörtern sondern nur Geräte mit Nummern. Das macht es mir möglich einen Großteil der Konfiguration in Ansible zu verwalten.

Die Konfiguration ist im Prinzip nicht schwer, geschieht aber an verschiedenen Stellen und ist deshalb etwas fusselig.

Telefongeräte

Für jedes Telefongerät muss eine Konfiguration erstellt werden die sich das Telefon beim Booten von einem TFTP Server zieht. Dort stehen also schon mal Namen und Kennwörter. Diese Konfigurationsdatei muss in dem Namen die MAC Adresse des Telefons haben.

Asterisk

Auch hier wird für jedes Telefon ein “Account” angelegt und es muss festgelegt werden unter welcher Nummer es extern erreichbar ist, welche Nummer es beim telefonieren verwenden soll und das man es intern erreichen kann.

Neuanlage eines Telefons

Man trägt also für jedes Telefon zuerst die Nummer in der SIP Configuration ein, legt einen Eintrag für die Extension an und dann noch mal diese SIP Konfiguration auf dem FTP Server.

Und überall stehen im wesentlichen nur ein paar Informationen wiederholt drin.

Automatisierung mit Ansible

(Der folgende Text setzt schon Ansible Wissen voraus.)

Das Playbook besteht aus folgenden Dateien

 roles/asterisk/
 ├── handler
 │   └── main.yml
 ├── tasks
 │   └── main.yml
 └── templates
     ├── interne-erreichbarkeit-sip-conf.j2
     ├── sip-config-xml.j2
     └── sip-conf.j2

In der Konfiguration des Asterisk Servers sind folgende Variablen für jedes Telefon enthalten

- sipname: "311"
  name: "311"
  callerid_name: "Familie Bauer"
  callerid_num: "+49222xxxx"
  logo_url: "http://server.domain.lcl/eigenes-cisco-logo.bmp"
  mac: "0016Cxx228E"

Asterisk Extensions

Es wird für jedes Telefon eine Datei angelegt in der steht unter welcher Nummer ein Telefon erreichbar ist

  - name: create config directory in asteriskdir
    file:
      path: "/etc/asterisk/my/"
      state: directory
      mode: 0750
  - name: Create a rule for internal-calls.conf
    template:
      src=interne-erreichbarkeit-sip-conf.j2
      dest=/etc/asterisk/my/internal-calls-{{ item.name }}.conf
      owner=asterisk
      group=asterisk
      mode=0750
    with_items: "{{ sipphones }}"

Das Template sie so aus und enthält nur eine Zeile.

 exten =>  {{ item.name }} ,1,Dial(SIP/{{ item.name }})  

In der extension.conf werden alle diese Konfigurationen eingebunden

  #include "my/internal-calls-\*.conf"

Damit ist gibt es für jedes Telefon eine Anrufmöglichkeit.

Telefon Definition

Ähnlich baue ich die SIP Definitionen

Task:

  - name: Create a sip1.conf
    template:
    src=sip-conf.j2
    dest=/etc/asterisk/my/sip-{{ item.name }}.conf
    owner=asterisk
    group=asterisk
    mode=0750
    with_items: "{{ sipphones }}"

Template:

 [{{ item.name }}] ; Name

 type=friend
 username = {{ item.name }}
 secret = {{ item.name }}
 pickupgroup = 1
 callgroup = 1
 context=mycontext;
 setvar=EXTERNAL_CALLERID=”{{ item.callerid_name }}” <{{ item.callerid_num }}>;
  ....
  .....
  .....
 {% if item.mailbox is defined %}
 mailbox= {{ item.mailbox }}
 {% endif %}

In der /etc/asterisk/sip.conf steht dann

   #include /etc/asterisk/my/sip-\*.conf

Telefonkonfiguraton

Bleibt noch die Konfiguration der Telefone selbst. Auch die ist recht einfach gehalten aber mit etwas Logik kann man das auch komplizierter machen.

Tasks:

 - name: Create a Phone XML Configuration
   template:
    src=sip-config-xml.j2
    dest=/opt/tftp/diskless/SIP{{ item.mac }}.cnf
    owner=asterisk
    group=asterisk
    mode=0750
  with_items: "{{ sipphones }}"

Template:

 phone_label: "{{ item.name }}"
 proxy_register: 1
 line1_name: "{{ item.name }}"
 line1_displayname: "{{ item.name }}"
 line1_shortname: "{{ item.name }}"
 line1_authname: "{{ item.name }}"
 line1_password: "{{ item.name }}"
 {% if item.logo_url is defined %}
 logo_url: "{{ item.logo_url }}"
 {% endif %}

Ergebniss

Jetzt trage ich nur noch in der Ansible Server Konfiguration ein neues Telefon mit der gewünschten Nummer und der Mac Adresse ein und mit einem Befehl wird der Account definiert, die Nummer eingerichtet und die Telefonkonfiguration erstellt.

ansible-playbook asterisk.yml -b
10.9.18
Weitere Beiträge zu: Ansible   Asterisk   Cisco7960  

Wie eine Türklingel Telefonanrufe auslösen kann

Ein echtes Vater / Sohn Projekt das echt viel Spaß gemacht hat. Die Löt- und Arduinokenntnisse von meinem Sohn wurden kombiniert mit meine bescheidenen MQTT Kenntnissen und meiner Asterisk Anlage.

Das Problem

Wenn jemand in unserem Haus klingelt und man sich oben in einem der Zimmer mit geschlossener Zimmertür aufhält dann hört man nichts. Das Ziel war das es ein einem bestimmten Zimmer eine Benachrichtigung gibt. Das Zimmer ist auch mit einem Telefon ausgestattet.

Der Wunsch

Schon seit langem wollte ich die Klingel “irgendwie” mit dem LAN verbinden hatte aber noch nicht die richtige Idee.

Dann kam dieser Heise Artikel. Dort sollte zwar eine Fritzbox angeschlossen werden aber es gab auch die Möglichkeit eine MQTT Nachricht zu versenden.

Das Netz für die ganzen IOT Geräte ist vollkommen abgeschottet. Das Netz für Telefonanlage ist ebenfalls abgeschottet darf aber in das IOT Netzwerk. In jedem Netzwerk ist ein RaspberryPi mit einem MQTT Server

Die Bauteile waren meinem Sohn aufgrund seiner Arduino Workshop schon bekannt. Die Kosten waren im 10 Euro Bereich. Der Bauplan war für Ihn recht einfach und sieht gemäß CT so aus

Das ganze wurde noch etwas provisorisch an der Klingel angeschlossen

Das Programm für den ESP8266 ist recht simpel.

  #include <ESP8266WiFi.h>
  #include <PubSubClient.h>
  #define WLAN_SSID "wlan-it"
  #define WLAN_PASSWORD "xxxxxx"
  #define MQTT_HOST "iot-mqtt.yourlan.lcl"
  #define MQTT_USER "doorbell"
  #define MQTT_PASSWORD "geheim"
  #define MQTT_PORT 1883
  #define MQTT_TOPIC "doorbell/ring"
  #define MQTT_MESSAGE "true"

  WiFiClient wifiClient;
  PubSubClient mqtt_client(wifiClient);

  void setup_wifi() {
    WiFi.begin(WLAN_SSID, WLAN_PASSWORD);
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
    }
  }

  void connect_mqtt() {
    while (!mqtt_client.connected()) {
      if (mqtt_client.connect("Klingelanlage", MQTT_USER, MQTT_PASSWORD)) {
      } else {
        delay(5000);
      }
    }
  }

  void setup() {
    setup_wifi();
    mqtt_client.setServer(MQTT_HOST, MQTT_PORT);
    if (!mqtt_client.connected()) {
      connect_mqtt();
    }
    mqtt_client.loop();
    mqtt_client.publish(MQTT_TOPIC, MQTT_MESSAGE);
    delay(4000);
    ESP.deepSleep(0);
  }

  void loop() {
  }

Es meldet sich im unsicheren IOT WLAN an und versendet eine MQTT Nachricht an den dortigen MQTT Broker.

Die Asterisk Telefonanlage befindet sich auf einem weiteren Rapsberri Pi. Dort läuft der MQTT-Launcher von jpmens und immer wenn das relevante Topic im IOT VLAN erscheint kopiert dieser eine sogenannte Call Datei in das richtige Verzeichnis für die Telefonanlage. In der Call Datei steht welche Telefonnummer für wie lange angerufen werden soll:

 Channel: SIP/Wunschummer
 Callerid: Pforte
 MaxRetries: 0
 WaitTime: 14
 Context: internercontext
 Extension: Wunschnummer
 Priority: 2

Wenn es also klingelt “wacht” der Doorbellbaustein auf und sendet eine MQTT Nachricht. Der Asteriskserver “hört” das und ruft die richtige Nummer an.

Bis jetzt läuft das die ersten Tage schon recht stabil

Weitere Ideen:

  • V2 Ich möchte im Urlaub benachrichtigt werden wenn jemand klingelt und ein Bild der Videokamera zu gesendet bekommen.
  • V3 die alte Gegensprechanlage wird an Telefon angeschlossen und kann angerufen werden.
2.9.18
Weitere Beiträge zu: MQTT   Asterisk  

Asterisk klingelt nur bei bestimmten Anrufern

In unserem Haushalt sind die Anforderungen an “Telefon” aufgrund von zwei Heimarbeitsplätzen etwas größer als in einem normalen Haushalt. Deshalb habe ich seit einiger Zeit Cisco Sip Telefone an einer Fritzbox angeschlossen. Vor Jahren habe ich das alles mit einem Asterisk Server machen müssen. Seit es Sip in der Fritzbox gibt wollte ich den eigentlich abschalten. Leider habe ich festgestellt, dass die Anforderungen an den Anrufbeantworter nicht durch die Fritzbox gedeckt wurden so das auch weiterhin der Asterisk Server den Anrufbeantworter bereitstellt.

So weit so gut.

Jetzt gibt es auch seit dem Umzug in dem Haus zwei Telefone die zwar für die internen Telefonate angeschlossen sind aber im Prinzip nicht von außen erreichbar sein sollen (Die Gründe dafür lasse ich hier mal beiseite).

Ich schreibe “im Prinzip” weil es doch nicht schlecht wäre wenn diese Apparate von den mobilen Telefonen der Erwachsenen angerufen werden könnten.

Das kann man mit dem Asterisk aber sehr schön einrichten und da er ja sowieso im Einsatz ist….

Deswegen gibt es jetzt folgende Konfiguration:

  • Alle Telefone sind an der Fritzbox registriert
  • Class1 Telefone können von außen angerufen werden
  • Class1 Telefonnummern haben eine Mailbox auf der Fritzbox
  • Class1 und Class2 Telefone können über die Fritzbox intern telefonieren
  • Class2 Telefone sind zusätzlich noch am Asterisk registriert
  • Class2 Telefonnummern werden auf den Asterisk Server geleitet und nur bei 2 bestimmten Telefonnummern klingelt es an den Class2 Telefonen.

In der Asterisk Extension.conf habe ich das so konfiguriert

 [macro-incoming-class2]
 exten => s,1,GotoIf($[${CALLERID(num)} = <Nr VIP1>  | ${CALLERID(num)} =     <Nr VIP2> ]?allow:reject)
 exten => s,n(allow),Dial(SIP/xxx,20,tT)
 exten => s,n,Hangup()
 exten => s,n(reject),Hangup()

Wahrscheinlich wäre es einfacher wieder alles auf den Asterisk Server zu legen aber dazu hab ich gerade keine Lust.

24.6.17
Weitere Beiträge zu: Asterisk   Fritzbox   Telefon  

Einen bestehenden Asterisk Server auf einen Raspberry Pi umziehen.

Die “overkill” Lösung des Anrufbeantworters auf einem Asterisk Server ist jetzt auf meinen Raspberry Pi migriert worden.

Dazu waren im wesentlichen drei Schritte notwendig. Zuerst die Basissoftware installieren

apt-get install asterisk

Dann die Konfiguration kopieren von hier

/etc/asterisk/ die alten Nachrichten aus 

/var/spool/asterisk/ kopieren und der [deutschen Sprachdateien](/2011/04/asterisk-mit-deutscher-sprache-ohne-piepton.html) von hier

/usr/share/asterisk/sounds kopieren.

Dabei kam es noch zu folgendem Fehler:

Serious Network Trouble; __sip_xmit returns error for pkt data<
chan_sip.c:&nbsp;&nbsp;&nbsp; -- Registration for '623@192.168.xx.xx' timed out, trying again (Attempt #7)

Dies konnte behoben werden i dem in der Asteriskkonfiguration die feste bind Adresse auf 0.0.0.0 umstellt wurde

vi /etc/asterisk/sip.conf
      bindaddr=0.0.0.0

Soweit scheint alles zu klappen.

1.4.14
Weitere Beiträge zu: raspberrypi   Asterisk  

Hallo Asterisk - so schnell werden wir den nicht los

Vor einiger Zeit wollte ich den Asterisk Server komplett abschalten und Fax und Anrufbeantworter auf der Fritzbox laufen lassen. Zumindestens für den Anrufbeantworter werde ich den Asterisk Server wieder in Betrieb nehmen (auch wenn das mit Sicherheit etwas overkill ist).

Warum? Die Fritzbox erlaubt zwar eine Klingelsperre aber leider gilt die für alle Telefonnummern. In unserem Fall brauchen wir einen Anrufbeantworter für unser Geschäft der am Wochenende und ausserhalb der "Geschäftszeiten" sofort anspringen soll. Auch möchten wir im Urlaub alle Anrufe sofort auf den AB schicken aber gleichzeitig die private Telefonnummer normal weiterverwenden. Das kann die Fritzbox nicht.

Zusätzlich habe ich es im Dialplan des Asterisk Servers eingerichtet das Anrufe von meiner eigenen Mobilnummer erheblich länger klingeln bevor der AB anspringt als bei allen anderen Nummern.

Diese zwei Funktionen kann der AB der Fritzbox nicht und deswegen.

# /etc/init.d/asterisk start


 

30.5.13
Weitere Beiträge zu: Fritz!Box   Asterisk  

Goodbye Asterisk

Nach gefühlten 20 Jahren und wahrscheinlich realen 6 Jahren hat die Linux basierende Asterisk Telefonanlage hier den Dienst eingestellt.

Am Anfang hat Asterisk hier sowohl kostenlose SIP Dienste als auch eine ISDN Telefonanlage mit Anrufbeantworter und Fax bereitgestellt.

Jetzt macht das alles eine Fritzbox 7270.

15.3.13
Weitere Beiträge zu: Asterisk  

Asterisk Voicemail auf einem DC Message Board anzeigen

An dieser Stelle hatte ich beschrieben wie man ein Dream Cheeky LED Message Board unter Debian betreiben kann. Meine Idee war es zuerst damit anzuzeigen ob Nachrichten auf dem Voicemails hinterlassen worden sind. Es gibt zwei Anrufbeantworter. Ziel war es einen Anrufbeantworter nur tagsüber anzuzeigen und für den zweiten Tageszeit unabhängig anzuzeigen. Ich wollte zwei Buchstaben durchlaufen lassen. Mit folgendem Script ist mir das gelungen. Das Script wird alle fünf Minuten gestartet.

#!/bin/bash
FILE=""
DIR_PRI="/var/spool/asterisk/voicemail/default/5/INBOX"
DIR_1b3="/var/spool/asterisk/voicemail/default/6/INBOX"
pkill dcled
file="$DIR_PRI/*.mp3"
if [ -e $file ]; then
        rm $DIR_PRI/*.mp3
        fi

file="$DIR_1b3/*.mp3"
if [ -e $file ]; then
        rm $DIR_1b3/*.mp3
        fi
if [ "$(ls -A /var/spool/asterisk/voicemail/default/5/INBOX/)" ]; then
                P="1"
     else
                P="0"
         fi
if [ "$(ls -A /var/spool/asterisk/voicemail/default/6/INBOX/)" ]; then
                B="1"
        else
                B="0"
      fi
# führende Nullen entfernen
TIME="$(echo `date +%H` | sed 's/^0//')"
if [ "$P" = "1" ] && [ "$B" = "1" ] ;
        then
                /opt/c/tools/dcled -r -s 200  -m 'B P' &
        else if [ "$P" = "1" ]  ;
                then
                        /opt/c/tools/dcled -r -s 200 -m P &
                else if [ "$B" = "1" ] && [ "$TIME" -lt "18" ] &&  [ $TIME -gt "9" ] ;
                        then
                                /opt/c/tools/dcled -r -s 200 -m B &
                fi
        fi
fi
9.9.11
Weitere Beiträge zu: Asterisk   DreamCheeky  

Asterisk mit zeitbasiertem Anrufbeantworter

Die Telefonanlage Asterisk bietet einem die Möglichkeit in Abhängigkeit von der Uhrzeit unterschiedlich zu reagieren. Aus gegebenem Anlaß wollte ich dann heute endlich mal die seit langem angedachte Möglichkeit einrichten, daß der Anrufbeantworter unserer Geschäftsnummer außerhalb der "Öffnungszeiten" direkt anspringt ohne das es klingelt.

Mit folgenden Zeilen im Dialplan kann man das realisieren

[macro-incoming]
exten => s,1,GotoIfTime(09:00-17:59,mon-fri,*,*?tagschaltung,s,1)
exten => s,n,Goto(closed,s,1)
 
[tagschaltung]
 exten => s,1,Dial(SIP/99,20,tT)
 exten => s,n,Answer
 exten => s,n,Wait(1)
 exten => s,n,VoiceMail(6,su)      
 exten => s,n,Hangup
 
[closed]
exten => s,1,VoiceMail(6,su)     
exten => s,n,Hangup

Jetzt ist Ruhe

11.5.11
Weitere Beiträge zu: Asterisk  

Telefonanlage Asterisk mit deutscher Sprache ohne Piepton

An dieser Stelle hatte ich beschrieben wie man mit den Sprachdateien von greenable.de der Asterisk Telefonanlage eine deutsche Stimme verleiht.

Leider fehlt in den Dateien der "beep" den man typischerweise nach der Ansage hört.

Nach den beschriebenen Schritten fehlt also noch ein

cp sounds-eng/beep.gsm sounds

1.4.11
Weitere Beiträge zu: Asterisk  

Asterisk mit deutscher Sprache

Die Telefonsoftware Asterisk wird standardmäßig nicht mit deutschen Sprachdateien ausgeliefert. Man kann sogenannte Voiceprompts kaufen, aber glücklicherweise gibt es auch Firmen die diese kostenlos zur Verfügung stellen. Greenable zum Beispiel

Die Installation geht recht einfach. (Basis ist ein Debian Server)

cd /usr/share/asterisk/
wget http://www.greenable.de/downloads/core-prompts-DE-greenable.tar.gz
tar xzvf core-prompts-DE-greenable.tar.gz
chmod 777 de -R
mv sounds sounds-eng
ln -s de sounds

(Die Rechtevergabe ist etwas "freizügig" aber ich bin der einzige auf dem Server)

Bei Updates von Asterisk daran denken das das Verzeichniß mit den Sounddateien überschrieben wird.

9.3.11
Weitere Beiträge zu: Asterisk  

Asterisk: Installation hylafax / iaxmodem auf Debian

Meine Schritte sind angelent an diese Beschreibung.  Zuerst installieren wir iaxmodem und dann die Faxsoftware hylafax. Danach konfiguriere ich Hylafax noch so das die Faxe an meine Adresse als PDF versendet werden

Installation iaxmodem

apt-get install iaxmodem

Die Konfiguration ist recht einfach.

vi /etc/iaxmodem/ttyIAX0

device          /dev/ttyIAX0
owner           uucp:uucp
mode            660
port            4570
refresh         50
server          yourasteriskserver.com
peername        iaxmodem
secret          98323
codec           alaw

und jetzt noch das Starten einrichten und die Änderungen in inittab übernehmen

vi /etc/inittab

IA00:23:respawn:/usr/bin/iaxmodem ttyIAX0
mo00:23:respawn:/usr/sbin/faxgetty ttyIAX0

kill -HUP 1

Die Konfiguration auf der Asteriskseite lasse ich hier weg. Vielleicht mache ich das ein anderes mal.

So jetzt kann man wenn alles gut ist auf der Asteriskconsole schauen ob sich das "Modem" über IAX angemeldet hat.

# asterisk -r
iax2 show peer iaxmodem

 * Name       : iaxmodem
  Secret       : <Set>
  Context      : fax-out
  Mailbox      :
  Dynamic      : Yes
  Callerid     : "" <>
  Expire       : -1
  ACL          : No
  Addr->IP     : (Unspecified) Port 0
  Defaddr->IP  : 0.0.0.0 Port 4570
  Username     :
  Codecs       : 0xe008 (alaw)
  Codec Order  : (alaw)
  Status       : Unmonitored
  Qualify      : every 60000ms when OK, every 10000ms when UNREACHABLE (sample smoothing Off
)

Installation von hylafax

Zuerst installierte ich die Basissoftware und dann startete ich das Konfigurationsprogramm. Meistens habe ich die Defaultwerte übernommen. Hier sind nur meine persönlichen Änderungen dokumentiert.

apt-get install hylafax-server
faxsetup

Do you want to run faxaddmodem to configure a modem [yes]?
Serial port that modem is connected to [ttyS0]? ttyIAX0
[....]

Country code [1]? 49
Area code [415]? dievorwahl
Phone number of fax modem [+1.999.555.1212]? dieganzenummer-ausgeschrieben

Die information werden in die folgende Datei geschrieben

/var/spool/hylafax/etc/config
   

jetzt noch festlegen an wen das Fax gemailt wird

vi /var/spool/hylafax/bin/faxrcvd

FILETYPE=pdf
SENDTO=hbauer@caserio.de

Und schon konnte ich meine Testfaxe in meinem Postkorb vorfinden



21.8.10
Weitere Beiträge zu: Asterisk   Hylafax  

Fritz Capi unter Debian

keine Ahnung warum es so schwer ist Capi unter Debian zum fliegen zu bekommen. Hier die Aufzeichnungen meiner Irrungen und Wirrungen.

apt-get install rpm patch pciutils capiutils
apt-get install linux-headers-$(uname -r

Die Quellen für den fcpci gibt es hier

wget http://dl.atrpms.net/all/fcpci-03.11.07-16.src.rpm
rpm2cpio fcpci-03.11.07-16.src.rpm > fcpci-03.11.07-16.cpio
cpio -i --make-directories < fcpci-03.11.07-16.cpio
mkdir fcpi
cd fcpci
cpio -i --make-directories <  ../fcpci-03.11.07-16.cpio
tar xzvf fcpci-suse93-3.11-07.tar.gz
wget http://134.93.168.49/~reiffert/fcpci-debian.diff
cd fritz/
patch -p1 < ../fcpci-debian.diff

Dann müssen alle patches von hier  übertragen werden. Damit man später nicht nur das Modul laden kann sondern auch Kanäle angezeigt bekommt muss man noch in der driver.c (zeile 197)

strncpy (ctrl->manu, "AVM GmbH", CAPI_MANUFACTURER_LEN);

durch :

lib_strncpy (ctrl->manu, "AVM GmbH", CAPI_MANUFACTURER_LEN);

ersetzen. Vielen dank an diese Adresse  Dann kompililieren und an die richtige Stelle kopieren. Den hisax Treiber entladen und den fcpci laden

make
cp src/fcpci.ko /lib/modules/2.6.26-2-686/kernel/
depmod -ae
rmmod hisax_fcpcipnp
modprobe fcpci

dmesg
[15051.084178] fcpci: Driver 'fcpci' detached
[15055.102176] fcpci: AVM FRITZ!Card PCI driver, revision 0.7.2
[15055.102187] fcpci: (fcpci built on Jun 30 2010 at 16:51:00)
[15055.102192] fcpci: -- 32 bit CAPI driver --
[15055.102237] fcpci: AVM FRITZ!Card PCI found: port 0x2000, irq 18
[15055.102242] fcpci: Loading...
[15055.102248] fcpci: Driver 'fcpci' attached to fcpci-stack. (152)
[15055.332008] fcpci: Stack version 3.11-07
[15055.332085] kcapi: Controller [001]: fcpci-2000-18 attached
[15055.332091] kcapi: card [001] "fcpci-2000-18" ready.
[15055.332153] fcpci: Loaded.

capiinit
capiinfo

Number of Controllers : 1
Controller 1:
Manufacturer: AVM GmbH
CAPI Version: 2.0
Manufacturer Version: 3.11-07  (49.23)
Serial Number: 1000001
BChannels: 2
Global Options: 0x00000039
   internal controller supported
   DTMF supported
   Supplementary Services supported

und dann noch in
    /etc/isdn/capi.conf
    fcpci

auskommentieren.

4.7.10
Weitere Beiträge zu: Debian   Capi   Asterisk  

Nagios: Capi Treiber für Asterisk überwachen

nagios.jpgIch wollte mit Nagios überwachen ob der CAPI Treiber geladen ist. Mein Asterisk Server ist an eine Fritzbox angeschlossen und stellt einen Anrufbeantworter bereit und verbindet mein Cisco 7960 SIP Telefon mit dem normalen Telefonnetz. Der Ansatz ist folgender; Prüfe ob capiinfo einen Fehler liefert. Wenn Fehler dann ist etwas falsch im Staate Dänemark. Ansonsten alles gut ;-) Zuerst das Script welches das prüft und dann den Eintrag in checkcommands.cfg und services.cfg. Capiinfo braucht root Rechte. Also immer daran denken

asterisklogo.jpgvi /opt/c/nagios/check-asterisk-capi.sh

#!/bin/bash
capi="`/usr/bin/capiinfo | grep -c CAPI`"
if [ $capi -eq 0 ] ; then
        echo "ISDN Critical: lines down"
        exit 2
fi
echo "ISDN: CAPI OK "
exit 0

vi /etc/nagios/checkcommands.cfg

define command{
        command_name    check_asterisk_capi
        command_line    sudo /opt/c/nagios/check-asterisk-capi.sh
  }

vi /etc/nagios/services.cfg

define service{
       use                             service-level-2
       host_name                       mail
       service_description             Asterisk-CAPI
       check_command                   check_asterisk_capi
       notes_url              /nagios/cgi-bin/wiki.cgi?host=$HOSTNAME$&srv=$SERVICEDESC$
     }
 

201005-nagios-asteriks.png

 
6.5.10
Weitere Beiträge zu: Asterisk   Nagios  

Anpassen von "Asterisk Voicemail for IPhone"

201004-customizing-ast4iphone-iphone-ipad-asterisk.gifAn dieser Stelle hatte ich beschreiben wie man das ganze installiert. Es tut auch das was soll. Man kann sich anmelden und bekommt seine Nachrichten angezeigt. Man kann verschieben und löschen. So weit so gut. Das Szenario in unserem Haushalt sieht nur etwas anders aus.

Bei uns gibt es auf dem Asterisk verschiedene Mailboxen die von allen abgehört werden können. Spezielle Anmeldung ist nicht erforderlich.  Ich möchte alle Nachrichten für alle Mailboxen mit dem Mailboxnamen angezeigt bekommen.

Mit folgenden Einschränkungen ist das Ziel erreicht: Kein löschen/verschieben/abhöhren der Nachrichten oder Rückrufen des Anrufers. Wegen des fehlenden Logins musste ich das erstmal abschalten.  Mailboxennummern und -namen sind im PHP code fest verdrahtet.

Vielleicht gehe ich später mal hin und versuche das wieder einzubauen. (ist aber unwahrscheinlich). Folgende Schritte habe ich durchgeführt.

Abschalten des logins

In index.php login_success auf true

    $login_message = "";
-   $login_success = false;
+   $login_success = true;
    $p_mailbox = ""; if (isset($_POST['mailbox'])) $p_mailbox = $_POST['mailbox'];

Nachrichten selektieren und mit Mailboxnahmen darstellen

Jetzt sind wir zwar angemeldet aber das Script weiss nicht welche Mailboxen. In der Main.php wird dazu der Aufrufe von GetMessagearray für jede Mailbox mit einem hartverdrahteten Mailboxnummer kopiert und es werden jeweils eine neue variable für Inbox und Saved Nachrichten eingefügt

     // Get messages (into an array)
-    $arr_messages_inbox = GetMessageArray("INBOX", $s_mailbox);
-    $arr_messages_old = GetMessageArray("Old", $s_mailbox);
-    $smarty->assign('messages_inbox', $arr_messages_inbox);
-    $smarty->assign('messages_old', $arr_messages_old);
+    $arr_messages_inbox1 = GetMessageArray("INBOX", "Mailbox1");
+    $arr_messages_inbox2 = GetMessageArray("INBOX", "Mailbox2");
+    $arr_messages_old1 = GetMessageArray("Old", "Mailbox1");
+    $arr_messages_old2 = GetMessageArray("Old", "Mailbox2");
+    $arr_messages_old = $arr_messages_old1 ;
+    $smarty->assign('messages_inbox1', $arr_messages_inbox1);
+    $smarty->assign('messages_old1', $arr_messages_old1);
+    $smarty->assign('messages_inbox2', $arr_messages_inbox2);
+    $smarty->assign('messages_old2', $arr_messages_old2);

   
Diese Daten werden dann im Template smarty/templates/main.tpl verwendet. Und zwar wird dort die Schleife mit zur Darstellung der einzelnen Nachrichten angepasst

z.B.

+{foreach from=$messages_inbox1 key=myId item=i}
+  <li id="li_old_{$i.file}"><img align="absmiddle" style="border:0px;width:16px;height:16px;padding-left:8px;padding-right:8px;margin-bottom:4px;" src="images/icons/email.png" /><span style="color:darkblue;">Mailbox2</span><br />
+<span style="padding-left:31px;">{$i.calleridnumber}</span><br/>
+<span style="padding-left:31px;">{$i.duration} Sekunden</span><br/>
+<span style="padding-left:31px;">{$i.datetimebetter}</span></a></li>
+{/foreach}


Hier kann man auch sehen das der Link auf die normalen Detailinfos entfernt worden ist und ich die Detailinformationen direkt hier eingebaut habe.

Messageseite als Startseite.

Momentan muss ich erst auf Messages drücken um dahin zukommen. Da ich den ganzen Rest nicht brauche muss ich jetzt noch die Message Seite als Startseite einrichten . Die Hauptstartseite brauche ich nicht mehr.

in smarty/templates/main.tpl

-    <ul id="home" title="Main" selected="true">
+    <ul id="home" title="Main" selected="false">

und

-    <ul id="messages" title="Messages">
+    <ul id="messages" title="Messages" selected="true">

Das wars schon.


 

24.4.10
Weitere Beiträge zu: Asterisk   Ipod-touch  

Installation "Asterisk Voicemail for IPhone" auf Gentoo

Da ich ja jetzt einen IPod Touch als Fernbedienung für mein Sonos habe und dieser auch nicht "durch die Gegend" getragen wird bietet es sich natürlich an diesen auch mit anderen Aufgaben zu betrauen. Meine Idee war es damit auch feststellen zu können welche Nachrichten auf dem Asterisk Server eingegangen sind ohne dazu alle Nachrichten abhöhren zu müssen. Asterisk Voicemail for IPhone schien die Lösung zu sein

Ausserdem wollte ich mal ein lernen wie man solche schicken IPhone Anwendungen mit PHP bauen kann :-)

Basis ist ein Server mit Gentoo. Die Installation der Packages wird auf anderen Distributionen anders aussehen. Gemäss Wiki  müssen Vorraussetzungen geschaffen werden: Curl support in PHP und Lame

 vi /etc/portage/package.use
    dev-lang/php mysql curl
emerge -av php lame

/etc/init.d/apache2 restart

Die Installation selbst ist einfach

mkdir tmp
cd tmp
wget http://asterisk-voicemail-for-iphone.googlecode.com/files/asterisk-voicemail-for-iphone-0.13.zip
mv asterisk-voicemail-for-iphone ast4iphone
mv ast4iphone/ /var/www/localhost/htdocs/
cd /var/www/localhost/htdocs/
chown apache ast4iphone -R

Und jetzt noch die Settings anpassen.

cd ast4iphone
cp i_settings.php.dist i_settings.php
vi i_settings.php

// The URL to your iphone web app      
$g_app_root = "http://yourserver:yourport/ast4iphone/";

Fertig. Browser auf den Server richten und Anmelden.

Folgendes ist meine persönliche Routine für alles was ich noch anpassen möchte. Einchecken in ein SVN Repository

cd /var/svn/
svnadmin create ast4iphone
cd /var/www/localhost/htdocs/ast4iphone/
svn co file:///var/svn/ast4iphone .
svn add *
svn ci -m "initialles einchecken"





22.4.10
Weitere Beiträge zu: Asterisk   Ipod-touch  

Asterisk: Sprachbausteine aufnehmen

201003-microfon.jpgFür eine interaktives Sprachmenü innerhalb von meiner Telefonanlage mit Asterisk brauche ich von mir gesprochene Texte. Über eine bestimmte Nummer wird ein Marcro aufgerufen das es mir erlaubt einen Text aufzunehmen.

exten => 721,1,Macro(sprachaufzeichnung)

Dann kann man den Text aufzeichnen. Die Aufzeichnung wird noch einmal abgespielt und dann wird aufgelegt. (Ja ich weiss sehr rustikal aber ich brauche das nicht häufig und werde das also nicht ausschmücken)
 

[macro-sprachaufzeichnung]
; Record voice file to /tmp directory
exten => s,1,Wait(2)
exten => s,n,Record(/tmp/asterisk-recording:gsm) ; # stops recording
exten => s,n,Wait(2)
exten => s,n,Playback(/tmp/asterisk-recording) ; Listen to your voice
exten => s,n,wait(2)
exten => s,n,Hangup

Die Datei wird dann in einem temporären Verzeichniss abgelegt. Von dort muss ich sie dann unter einem gewünschten Namen in das Verzeichniss mit den Sprachbausteinen ablegen. Zum Beispiel

mv /tmp/asterisk-recording.gsm /var/lib/asterisk/sounds/de/hb-menu-systembefehle.gsm

(Foto by : guitavares / CC BY 2.0)

28.3.10
Weitere Beiträge zu: Asterisk  

Darf ich vorstellen: Mifi01 oder "Moderne Anrufbeantworter Meldungen"

Niemand braucht es. Aber trotzdem ....


Der Nabaztag ist ein Gadget das man wirklich nicht braucht. Bei mir lag es in der Schublade (Herkunft nicht mehr nachvollziehbar aber Geld hatte ich dafür nicht ausgegeben).

In Anlehnung an eine Figur die bei "Sandmänchen" läuft hat es den Namen "Mifi"

Vorschaubild für mifi01.JPG



Wer mehr darüber wissen will kann hier was nachlesen. Oder hier ein Video. Kurz gesagt. Das Ding "redet" mit einem speziellen Server und kann so wichtige Dinge tun wie "Emails/RSS feeds" vorlesen oder mit ein paar Dioden lustig blinken. Außerdem kann es die Ohren bewegen. Man kann auch über eine API dem Nabaztag Befehle geben. z.B. Drehe das Ohr 3 mal und blinke rot grün. (oder so)


In meinem Fall hat es eine einfach Aufgabe bekommen. Es signalisiert uns, wenn  auf unsere Asterisk Telefonanlage eine Nachricht hinterlassen worden ist. (der letzte gravierende Fall von mangelndem WAF meiner Telefonanlage im Keller)


Hier die technischen Details:

Asterisk speichert seine Aufzeichnungen in bestimmten Verzeichnissen. Ein Dienst schaut alle 5 Minuten dort nach ob eine neue Datei abgelegt worden ist und wenn ja sendet es einen Befehl an den zentralen Nabaztag Server im Internet. Und von dort erfährt es mein "Hase".

Datei da=> Ohr hoch

Datei weg => Ohr runter.

Das ganze links und rechts für zwei verschiedene Anrufbeantworter im Hause.


#!/bin/bash
FILE=""
DIR_PRI="/var/spool/asterisk/voicemail/default/5/INBOX/"
DIR_1b3="/var/spool/asterisk/voicemail/default/6/INBOX/"
if [ "$(ls -A /var/spool/asterisk/voicemail/default/5/INBOX/)" ]; then
             # pos 0 ist senkrecht
                curl -o "/dev/null" -s "http://api.nabaztag.com/vl/FR/api.jsp?sn=seriennummer&token=geheim&posleft=0" &
     else
                curl -o "/dev/null" -s "http://api.nabaztag.com/vl/FR/api.jsp?sn=seriennummer&token=geheim&posleft=8" &
         fi
if [ "$(ls -A /var/spool/asterisk/voicemail/default/6/INBOX/)" ]; then
      curl -o "/dev/null" -s "http://api.nabaztag.com/vl/FR/api.jsp?sn=seriennummer&token=token&posright=0" &
        else
        curl -o "/dev/null" -s "http://api.nabaztag.com/vl/FR/api.jsp?sn=seriennummer&token=1260780059&posright=8" &
      fi

	

Eingetragen in crontab

*/5   *   * * *    /opt/c/tools/nabaztag-asterisk-voicemail-check.sh

27.1.10
Weitere Beiträge zu: Asterisk   Nabaztag  

Nagios für den Hausgebrauch

Ich verwende Nagios um verschiedene Dienste innerhalb meiner IT Landschaft zu überwachen. (IT Landschaft hört sich schon monströs an trifft es aber am besten.) Da sind zum Beispiel:

  • Ein Server im Internet mit Shop/Blogs/Kindergartenwebsite
  • Mein interner Hausserver mit Telefonanlage Asterisk, Videorecorder VDR und den anderen üblichen Dingen wie File/Print/Mail
  • Backup Server

Alles auf Basis von Linux (meistens Gentoo aber immer mehr Debian)

Ausschlaggebend war die Überwachung des Internet Servers um sicherzustellen das dort nix schiefgeht. Und wenn man es schon hat dann kann man auch noch einige andere nette Dinge tuen. Zum Beispiel kann man einstellen wann man eine Warnung über zu wenig Hauptspeicher oder Festplattenplatz bekommt. Man kann Schwellenwerte festlegen wann man eine SMS bekommt usw.

nagios-1.gif

21.1.10
Weitere Beiträge zu: Asterisk   Debian   Gentoo   Nagios   VDR  

Dies ist ein privater Blog von Hagen Bauer- berufstätiger Vater, Ehemann, Naturliebhaber, Läufer, Zelter, technikverliebt.


Creative Commons License
This blog is licensed under a Creative Commons License