Linux(HunterTik)+Asterisk+Huawei 1550=GSM-gate

Автор: GAMER вкл. .

Попала мне в руки сборка HunterTik - MikroTik+Linux(debian).  Ядро там конечно урезано, но поднять на нем asterisk и SIP-GSM-шлюз все же захотелось.

Как прошивать и готовить модемы, читайте в других темах, я это описывал. Сейчас же опишу, как это делать на урезаном ядре и что с этого поучилось.

Плюс, хочу поставить asterisk-11, конечно же, с сорсов.

Основное руководство к действию взято здесь: https://wiki.asterisk.org/wiki/display/AST/Installing+Asterisk+From+Source

1. Ставим Астериск с исходников. 

# cd /usr/src
# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11.1.0-rc1.tar.gz # tar zxvf asterisk-11.1.0-rc1.tar.gz # cd asterisk-11.1.0-rc1 # aptitude install g++ libncurses-dev libxml2-dev subversion make libsqlite3-dev sqlite3-devel m2crypto openssl
# ./configure
# make menuconfig
В настройках конфигурирования я отключил только res_timing_timerfd (не поддерживается ядром).

# make install
# make config
# make samples

2. Установка модуля канала chan_dongle для Huawei.

chan_dongle: github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip для 11-го астериска о котором идет речь, (code.google.com/p/asterisk-chan-dongle/downloads/list для старых версий, он не собирается под 10-ку и выше). Это одна и та же версия драйвера, просто в тот который для 11-й версии интегрирован патч который подгоняет его под 11-й астериск с его измененными зависимостями.

# aptitude install unzip
# cd /usr/src
# wget  https://github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip --no-check-certificate # unzip asterisk11.zip
Переименовал полученую директорию попроще (chan_dongle).

# cd chan_dongle
# aptitude install autoconf automake
# aclocal
# autoconf
# automake -a
# ./configure # make
# make install # cp /usr/src/chan_dongle/etc/dongle.conf /etc/asterisk

3. Смотрим, видел ли наш модем в системе.

# ls /dev | grep USB
ttyUSB0
ttyUSB1
ttyUSB2

4. Настройка. Канальный модуль Huawei настраивается в datacard.conf.

[datacard0]
audio=/dev/ttyUSB1   ; tty for audio connection
data=/dev/ttyUSB2   ; tty for AT commands
context=datacard-incoming ; context for incoming calls
group=1 ; calling group
rxgain=3 ; increase the incoming volume
txgain=3 ; increase the outgoint volume
[datacard1]
context=datacard-incoming; context for incoming calls
audio=/dev/ttyUSB4 ; tty port for audio connection
data=/dev/ttyUSB5 ;tty port for AT commands
group=2 ; calling group
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)
usecallingpres=yes ; use the caller ID presentation or not
callingpres=allowed_passed_screen ; set caller ID presentation

5. Проверка.
Проверим состояние модема из командной строки Asterisk (CLI).
Перегрузить asterisk можно командой core restart now,
а если система рабочая и идут вызовы, то core restart gracefully.
Запущенные модули каналов просмотрим командой module show like chan_

asterisk*CLI> dongle show devices
ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI       Number        
datacard1    2     Free       13   3    3       MTS RUS        E1550      11.608.12.00.143  352......        25....... Unknown       
datacard0    1     Free       15   3    3       TELE2          E1550      11.608.14.15.311  359......        25....... Unknown 

6. Диалплан.

Для входящих вызовов, sms и ussd запросов настроим extensions.conf:

[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/100,,) exten => s,n,Hangup()

Для исходящих звонков:

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

Через некоторое время пользования одним шлюзом захотелось прикрутить еще один модем.

Все делается аналогично.

7. Настройка автозагрузки.

Так как HunterTik не совсем стандартный Линукс, то возникли проблемы с автозагрузкой.

Делаем так. В каталоге /tik/etc/rc.d/run.d создаем файл S80hunter с таким текстом:

#!/bin/sh
chroot /linux /etc/init.d/iaxmodem start
chroot /linux /etc/init.d/hylafax start
chroot /linux /etc/init.d/asterisk start

и даем права.

Все.

chan_dongle удобен тем, что можно привязывать девайс не только по номеру порта, а и по самой СИМ-ке либо ИМЕИ устройства. Для этого служат параметры: imsi, imei.

Отключал определение СД-рома другими средствами (Free_Huawei_Modem_Tool).

Внимание!

1. Отключить ввод пин-кода.

2. Отключить определение СД-рома.

3. Подключать в USB-порт без всяких шнурков либо через USB-switch.

4. Можно ребутнуть linux для профилактики :).