Asterisk GSM-шлюз

Материал из Xgu.ru

Перейти к: навигация, поиск
USB-модем Huawei E1550. Этот модем подключается к Астериску, и через него передаётся голосовой трафик в GSM-сеть

GSM-шлюз на базе Asterisk — устройство на базе программной АТС Asterisk и аппаратных модулей, осуществляющих передачу звонка в GSM-сеть. Примером такого модуля может служить специализированная карта расширения от Digium или 3G-модем Huawei.

Ниже рассматривается как настроить Астериск для использования USB-модема Huawei E1550 (или модемов Huawei E169, K3520, K3715).

Содержание

[править] Введение

(несколько слов об идее)

[править] Инсталляция и настройка

Поддержка модема осуществляется через канал datacard. Пока что код этого канала не включен в состав Asterisk и должен инсталлироваться отдельно. Инсталляция выполняется непосредственно из репозитория проекта.

[править] Инсталляция драйвера устройства

$ lsmod
option                 20658  0 
usb_wwan               12950  1 option
usbserial              27298  2 option,usb_wwan
Apr 24 11:43:54 linux0 usb_modeswitch: switching 12d1:1446 (HUAWEI Technology: HUAWEI Mobile)
Apr 24 11:43:54 linux0 kernel: [86823.322530] usb 1-3: USB disconnect, device number 2
Apr 24 11:44:01 linux0 kernel: [86829.968038] usb 1-3: new high speed USB device number 3 using ehci_hcd
Apr 24 11:44:01 linux0 kernel: [86830.111258] usb 1-3: New USB device found, idVendor=12d1, idProduct=1001
Apr 24 11:44:01 linux0 kernel: [86830.111262] usb 1-3: New USB device strings: Mfr=2, Product=1, SerialNumber=0
Apr 24 11:44:01 linux0 kernel: [86830.111264] usb 1-3: Product: HUAWEI Mobile
Apr 24 11:44:01 linux0 kernel: [86830.111267] usb 1-3: Manufacturer: HUAWEI Technology
Apr 24 11:44:01 linux0 kernel: [86830.117037] scsi11 : usb-storage 1-3:1.3
Apr 24 11:44:01 linux0 kernel: [86830.118033] scsi12 : usb-storage 1-3:1.4
Apr 24 11:44:01 linux0 kernel: [86830.159312] usbcore: registered new interface driver usbserial
Apr 24 11:44:01 linux0 kernel: [86830.159326] USB Serial support registered for generic
Apr 24 11:44:01 linux0 kernel: [86830.159552] usbcore: registered new interface driver usbserial_generic
Apr 24 11:44:01 linux0 kernel: [86830.159554] usbserial: USB Serial Driver core
Apr 24 11:44:01 linux0 kernel: [86830.168853] USB Serial support registered for GSM modem (1-port)
Apr 24 11:44:01 linux0 kernel: [86830.169179] option 1-3:1.0: GSM modem (1-port) converter detected
Apr 24 11:44:01 linux0 kernel: [86830.169323] usb 1-3: GSM modem (1-port) converter now attached to ttyUSB0
Apr 24 11:44:01 linux0 kernel: [86830.169334] option 1-3:1.1: GSM modem (1-port) converter detected
Apr 24 11:44:01 linux0 kernel: [86830.169435] usb 1-3: GSM modem (1-port) converter now attached to ttyUSB1
Apr 24 11:44:01 linux0 kernel: [86830.169444] option 1-3:1.2: GSM modem (1-port) converter detected
Apr 24 11:44:01 linux0 kernel: [86830.169538] usb 1-3: GSM modem (1-port) converter now attached to ttyUSB2
Apr 24 11:44:01 linux0 kernel: [86830.169784] usbcore: registered new interface driver option
Apr 24 11:44:01 linux0 kernel: [86830.169786] option: v0.7.2:USB Driver for GSM modems

[править] Инсталляция модуля канала datacard

Для того чтобы собрать бинарный модуль канала, потребуются заголовочные файлы Asterisk. Если Asterisk установлен из бинарного пакета, необходимо добавить соответствующий пакет dev:

$ sudo apt-get install asterisk-dev

После этого можно приступить к установке модуля:

$ svn checkout http://chan-datacard.googlecode.com/svn/trunk/ chan-datacard-read-only
$ cd chan-datacard-read-only
$ ./configure
$ sudo make install

Модуль канала установлен.

[править] Настройка канала datacard

После того как модуль канала установлен, его необходимо настроить.

Пример конфигурационного файла канала входит в дистрибутив исходного кода канала. Этот файл можно использовать как основу конфигурационного файла:

$ cp etc/datacard.conf /etc/asterisk/datacard.conf

Конфигурационный файл:

[general]

interval=15                     ; Number of seconds between trying to connect to devices

;language=en                    ; Default language setting for all devices
                                ; This may also be set for individual device

;------------------------------ JITTER BUFFER CONFIGURATION --------------------------
;jbenable = yes                 ; Enables the use of a jitterbuffer on the receiving side of a
                                ; Datacard channel. Defaults to "no". An enabled jitterbuffer will
                                ; be used only if the sending side can create and the receiving
                                ; side can not accept jitter. The Datacard channel can't accept jitter,
                                ; thus an enabled jitterbuffer on the receive Datacard side will always
                                ; be used if the sending side can create jitter.

;jbforce = no                   ; Forces the use of a jitterbuffer on the receive side of a Datacard
                                ; channel. Defaults to "no".

;jbmaxsize = 200                ; Max length of the jitterbuffer in milliseconds.

;jbresyncthreshold = 1000       ; Jump in the frame timestamps over which the jitterbuffer is
                                ; resynchronized. Useful to improve the quality of the voice, with
                                ; big jumps in/broken timestamps, usually sent from exotic devices
                                ; and programs. Defaults to 1000.

;jbimpl = fixed                 ; Jitterbuffer implementation, used on the receiving side of a Datacard
                                ; channel. Two implementations are currently available - "fixed"
                                ; (with size always equals to jbmaxsize) and "adaptive" (with
                                ; variable size, actually the new jb of IAX2). Defaults to fixed.

;jbtargetextra = 40             ; This option only affects the jb when 'jbimpl = adaptive' is set.
                                ; The option represents the number of milliseconds by which the new jitter buffer
                                ; will pad its size. the default is 40, so without modification, the new
                                ; jitter buffer will set its size to the jitter value plus 40 milliseconds.
                                ; increasing this value may help if your network normally has low jitter,
                                ; but occasionally has spikes.

;jblog = no                     ; Enables jitterbuffer frame logging. Defaults to "no".
;-----------------------------------------------------------------------------------

[E1550_t](!)
context=incoming-datacard       ; context for incoming calls
rxgain=3                        ; increase the incoming volume
txgain=-3                       ; increase the outgoint volume
autodeletesms=yes               ; auto delete incoming sms
resetdatacard=yes               ; reset datacard during initialization
u2diag=0                        ; set U2DIAG parameter (0 = disable everything except modem function)

[datacard0](E1550_t)
audio=/dev/ttyUSB1              ; tty for audio connection
data=/dev/ttyUSB2               ; tty for AT commands
group=1                         ; calling group


[datacard1]
context=incoming-datacard       ; context for incoming calls
;language=de                    ; Use German as default language
audio=/dev/ttyUSB4              ; tty port for audio connection
data=/dev/ttyUSB5               ; tty port for AT commands
group=2                         ; calling group
rxgain=10                       ; increase the incoming volume
txgain=10                       ; increase the outgoint volume
autodeletesms=yes               ; auto delete incoming sms
resetdatacard=yes               ; reset datacard during initialization
u2diag=0                        ; set U2DIAG parameter (0 = disable everything except modem function)
usecallingpres=yes              ; use the caller ID presentation or not
callingpres=allowed_passed_screen ; set caller ID presentation
disablesms=yes                  ; chan_datacard has currently a bug with SMS reception. When a SMS gets in during a
                                ; call chan_datacard might crash. Enable this option to disable sms reception.
                                ; Default = no

[править] Настройка диалплана для использования канала datacard

[datacard-incoming] 
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS}) 
exten => sms,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} – ${DATACARD} – ${CALLERID(num)}: ${SMS}’ >> /var/log/asterisk/sms.txt) 
exten => sms,n,Hangup()

exten => ussd,1,Verbose(Incoming USSD: ${USSD}) 
exten => ussd,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} – ${DATACARD}: ${USSD}’ >> /var/log/asterisk/ussd.txt) 
exten => ussd,n,Hangup()

exten => s,1,Dial(SIP/2001@othersipserver) 
exten => s,n,Hangup()

[othersipserver-incoming]

exten => _X.,1,Dial(Datacard/r1/${EXTEN}) 
exten => _X.,n,Hangup

Другие идентификаторы каналов, которые можно использовать в datacard:

exten => _X.,1,Dial(Datacard/g1/${EXTEN})

Звонок через конкретную карточку datacard0:

exten => _X.,1,Dial(Datacard/datacard0/${EXTEN})

Звонок через карточку указанного провайдера:

exten => _X.,1,Dial(Datacard/p:PROVIDER NAME/${EXTEN})

Звонок через карточку с данным IMEI:

exten => _X.,1,Dial(Datacard/i:123456789012345/${EXTEN})

Звонок через карточку с данным IMSI-префиксом:

exten => _X.,1,Dial(Datacard/s:250976764489/${EXTEN})

[править] Переменные Datacard

Переменные, которые можно использовать в диалплане.

${DATACARD}
Текущая карта, через которую идёт звонок.
${IMSI}
IMSI текущей карты.
${IMEI}
IMEI текущей карты.
${PROVIDER}
PROVIDER текущей карты.
${SMS}
Входящее сообщение SMS.
${USSD}
Исходящее сообщение USSD.