VoIP-GSM шлюз для Asterisk на USB модеме HUAWEI E1550
Голосовой модуль по умолчанию активирован только в модемах МТС.
Рекомендованное ядро Linux 2.6.33+
Asterisk 1.6.+
USB 2.0
Заведомо рабочие прошивки (firmware - не путать с dashboard):
МТС 11.608.12.00.143
11.608.14.15.311
Нерабочая firmware:
Мегафон 11.608.12.10.209 -при активированном голосе из под винды звонит, из под Linux - нет.
Активировать голосовую функцию можно программой DC-UNLOCKER за 4 кредита - 4 евро.
Установка asterisk из исходников
# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.6.2-current.tar.gz # tar zxvf asterisk-1.6.2-current.tar.gz # cd asterisk-1.6.2-current.tar.gz # apt-get install g++ libncurses-dev libxml2-dev subversion # ./configure # make install # make config # make samples
Установка модуля канала chan_datacard для Huawei
Файл datacard.conf из ~/chan_datacard/etc копируем в каталог /etc/asterisk
# svn co http://www.makhutov.org/svn/chan_datacard/trunk/ chan_datacard # cd ~/chan_datacard/ # ./configure # make install # cp ~/chan_datacard/etc/datacard.conf /etc/asterisk
Установите usb-modeswitch
Пакет исходного кода: usb-modeswitch применяется в Unix системах для подключения устройств через USB интерфейс
#apt-get install libusb libusb-dev # wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.1.4.tar.bz2 # tar -jxvf usb-modeswitch-1.1.4.tar.bz2 # cd ~/usb-modeswitch-1.1.4 # make install # wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20100826.tar.bz2 # tar -jxvf usb-modeswitch-data-20100826.tar # cd ~/usb-modeswitch-data-20100826 # make install
Убедимся что модем Huawei E1550 определился в системе
ls /dev | grep USB ttyUSB0 ttyUSB1 ttyUSB2
Настройка модулей
Канальный модуль 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
Проверим состояние модема из командной строки Asterisk (CLI).
Перегрузить asterisk можно командой core restart now,
а если система рабочая и идут вызовы, то core restart gracefully.
Запущенные модули каналов просмотрим командой module show like chan_
asterisk*CLI> datacard 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
Для входящих вызовов, 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})
Отключение функций CD-ROM и card reader
Отключим ненужные функции.
# minicom -s
+-----[configuration]------+
| Filenames and paths |
| File transfer protocols |
| Serial port setup |
| Modem and dialing |
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
| Exit from Minicom |
+--------------------------+
Выбираем Serial port setup и жмем ENTER. Жмем 'А' Редактируем порт:
+-----------------------------------------------------------------------+
| A - Serial Device : /dev/ttyUSB0 |
| B - Lockfile Location : /var/lock |
| C - Callin Program : |
| D - Callout Program : |
| E - Bps/Par/Bits : 115200 8N1 |
| F - Hardware Flow Control : Yes |
| G - Software Flow Control : No |
| |
| Change which setting? |
+-----------------------------------------------------------------------+
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
| Exit from Minicom |
+--------------------------
Жмем ENTER 2 раза и выбираем Exit.
После подключения вводим команду:AT^U2DIAG=0
Welcome to minicom 2.4
OPTIONS: I18n
Compiled on Jan 25 2010, 06:49:09.
Port /dev/ttyUSB0
Press CTRL-A Z for help on special keys
AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
OK
AT^U2DIAG=0
OK
Выходим Ctrl-A Q
AT^U2DIAG=0 (девайс в режиме только модем)
AT^U2DIAG=1 (девайс в режиме модем + CD-ROM)
AT^U2DIAG=255 (девайс в режиме модем + CD-ROM + Card Reader)
AT^U2DIAG=256 (девайс в режиме модем + Card Reader)
AT^CARDLOCK=«NCK-code» (разблокировка модема)
Ещё команды:




Дискуссия
двет такой результат в ubuntu:
ttyUSB_utps_diag
ttyUSB_utps_modem
ttyUSB_utps_pcui
Как исправить ситуацию на ту, что указана выше?
Установлена утилита от мегафон, ну никак е не удалить! Подскажите пожалуйста.
root@asterisk:~/usb-modeswitch-1.1.4# make install
gcc -o usb_modeswitch usb_modeswitch.c -Wall -l usb
Спасибо
Как правило 3G модем это составное устройство. Модем+CD-rom иногда плюс CardReader.
Во многих статьях написано про использование usb_modeswitch. Данный модуль в связке chan_datacard+3G modem необходим только для корректного распознавания девайса как модема(бывает ОС определяет его как CD или CardReader). Если в составном устройстве отключены все устройства кроме модема, то usb_modeswitch использовать необязательно, все по идее должно работать и без usb_modeswitch
Так же модем может определяться вовсе не как ttyUSB а как ttyU0, как было в моем случае. У меня ни в какую не определось устройство как ttyUSB чтобы я ни делал. Отрубал устройства в модеме посредством AT команд, устанавливал и по разному конфигурировал usb_modeswitch перечитал все форумы данной тематики, но результата не было. Тогда я попробывал в datacard.conf вместо ttyUSB прописать устройство ttyU0
В итоге все в таком виде заработало. Может это кому то поможет разобраться быстрее, у меня например ушло на все эксперименты около двух недель, так как во всех статьях написано что модем должен быть как ttyUSB и не находя такого девайса я считал что у меня что то криво встало или что я что то сделал не так, а оказалось вот как=) Удачи!
FreeBSD 8.1
Asterisk 1.6.23
Huawei e1550(megafon)(с разлоченным голосом и отвязанный от оператора)
chan_datacard(Не могу сейчас посмотреть версию,сорри)
# ls -l /dev | grep USB
crw-rw---- 1 root dialout 188, 0 2010-10-08 20:08 ttyUSB0
crw-rw---- 1 root dialout 188, 1 2010-10-08 20:03 ttyUSB1
crw-rw---- 1 root dialout 188, 2 2010-10-08 20:03 ttyUSB2
Asterisk ругается:
chan_datacard.c:108 opentty: Unable to open '/dev/ttyUSB2'
модем насколько я понимаю определяется нормально:
ls /dev | grep USB
ttyUSB0
ttyUSB1
ttyUSB2
в 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
autodeletesms=yes ; auto delete incoming sms
resetdatacard=yes ; reset datacard during initialization
usecallingpres=yes ; use the caller ID presentation or not
callingpres=allowed_passed_screen ; set caller ID presentation
модем не хочет инициализироватся:
vik-VirtualBox*CLI> datacard show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
datacard0 1 Not initia 0 0 0 NONE Unknown
скажите в чём может быть проблема плз!
vik-VirtualBox*CLI> datacard show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
datacard0 1 Free 23 3 3 MTS RUS E1550 11.608.12.00.143 352965040999946 250012611005307 Unknown
в общем после ребута работает через раз, подскажите в чём может быть проблема ! :(
Ubuntu-10.04,
ядро-2.6.35
Asterisk-1.6.2.13
chan_datacard
Modem-Huawei(E1550)-Firmware (11.608.14.15.311)
datacard show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
datacard0 1 Free 11 5 4 UZB CSOCOM GSM E1550 11.608.14.15.311 353443048020189 434051815221309 Unknown
Звоню с двух сторон ЗВУКА НЕТ!
gcc -Wextra -fPIC -DAST_MODULE=\"chan_datacard\" -D_THREAD_SAFE -I. -I/usr/include -O2 -DICONV_CONST="" -D__DEBUG__ -D__MANAGER__ -D__APP__ -c chan_datacard.c
In file included from chan_datacard.c:73:
chan_datacard.h:263: error: unknown field ‘target_extra’ specified in initializer
chan_datacard.h:263: warning: excess elements in struct initializer
chan_datacard.h:263: warning: (near initialization for ‘jbconf_default’)
In file included from chan_datacard.c:89:
__channel.c: In function ‘channel_indicate’:
__channel.c:833: error: ‘AST_CONTROL_SRCCHANGE’ undeclared (first use in this function)
__channel.c:833: error: (Each undeclared identifier is reported only once
__channel.c:833: error: for each function it appears in.)
make: *** [chan_datacard.o] Error 1
Asterisk 2.6.2.13
Ubuntu 9.10
Ядро 2.6.31-22-generic
Модем определяется
ttyUSB0
ttyUSB1
ttyUSB2
При работе с Миником все команды проходять, модем определяется.
Версия прошивки 11.608.12.02.174, пин код снят, ожидание вызова выключено
Модем под виндой звонит
Однако Astersik, не определяет
D Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
datacard0 1 Not initia 0 0 0 NONE Unknown
– даёт в логах Unable to open ‘/dev/ttyUSB2’
При чём после попытки подключения к модему Asterisk, модем перестаеёт инициализироваться в миником.
Подскажите пожалусйста что делать
У меня аналогично Unable to open ‘/dev/ttyUSB2’ и никакие перезагрузки/удаление/установка не приводят к положительному результату...
Мои хуавейчики торчат в powered-хабах и месяцами безукоризненно трудятся. Всё обслуживание - дежурная смена снимает пылесосом пыль.
root@alexphp-home:~/chan_datacard# sudo make install
gcc -Wextra -fPIC -DAST_MODULE=\"chan_datacard\" -D_THREAD_SAFE -I. -I/usr/include -O2 -DICONV_CONST="" -D__DEBUG__ -D__MANAGER__ -D__APP__ -c chan_datacard.c
In file included from chan_datacard.c:73:
chan_datacard.h:263: error: unknown field ‘target_extra’ specified in initializer
chan_datacard.h:263: warning: excess elements in struct initializer
chan_datacard.h:263: warning: (near initialization for ‘jbconf_default’)
In file included from chan_datacard.c:89:
__channel.c: In function ‘channel_indicate’:
__channel.c:833: error: ‘AST_CONTROL_SRCCHANGE’ undeclared (first use in this function)
__channel.c:833: error: (Each undeclared identifier is reported only once
__channel.c:833: error: for each function it appears in.)
make: *** [chan_datacard.o] Ошибка 1
root@alexphp-home:~/chan_datacard#
Сделал полное удаление и поставил астер по этой инструкции. Модуль скомпилился Уряяя!!
Прошу помочь.
Ставил астериск 1.6 по этому мануалу. Все поставилось, скомпилировалось. Модем обнаруживается, переведен в режим только модем, голос активирован, из винды и звонит и принимает звонки.
Проблема с chan-datacard. Настроил datacard.conf и /etc/extensions.conf как указано в примере. По идее, должно быть так: при совершении звонка на модем происходит переадресация на sip (в моем случае хотелось бы sipnet). Но вот беда, при совершении звонка на модем тот просто сбрасывает звонок, на экране телефона пишет, что включена переадресация входящих звонков и номер занят. Подскажите, пожалуйста, куда копать-то.
Немного об оборудовании:
Ubuntu 10.04.1 Server, ядро 2.6.36-020636-generic , Asterisk-1.6.2, chan_datacard скачан из svn-репозитория недавно, т.е свежий. Вывод команды datacard show devices таков:
megaserv*CLI> datacard show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
datacard0 1 Free 28 0 0 life:) E1550 11.608.14.11.222 35296504105ХХХХ 255061063563401 +380636163ХХХ
Да, модем покупался у МТС-Украина, разлочен.
Спасибо.
exten => s,1,Dial(SIP/sipnet/74956553322)
Где sipnet - у меня это заголовок [sipnet] в файле sip.conf или users.conf, как указано в wiki настройках для SIPNET.
Номер 74956553322 - это номер на который хочу позвонить (т.е. код страны код города номер телефона без пробелов). Соответственно если звонить по Украине, то будет 38......
Только пока не решена проблема - меня слышно, а мой динамик молчит...!?
~# ip ad
Из AGI не могу вызвать команду "datacard sms operator1 1234567 hello", а chan_datacard сам не умеет общаться через AGI.
Кажется дописать нужный функционал не сложно, но я в C ничего не смыслю...
Создаем правило для удава:
office ~ # cat /etc/udev/rules.d/99-gsmgw.rules
KERNEL=="ttyUSB*", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1001", PROGRAM="/usr/local/at.pl %k", SYMLINK+="gsm/%c", GROUP="uucp", MODE="0660"
и сам скрипт тут: http://rghost.ru/3429399
п.с.
у меня шлюз под 4-х операторов, и модемы иногда сами перезагружаются и соответственно весь диалплан летит, так как порты у них становятся другими. У кого шлюз на меньшее кол-во модемов то подправить скрипт не сложно.
Use of uninitialized value $str in pattern match (m//) at ./at.pl line 7.
Еще вопрос куда его нужно поместить или симлинк куда бросить?
И еще у меня 2 модема одного опреатора то в поле ИМЕЙ указать "kyivstar1" и "kyivstar2", или одно имя в двух строках?
судя по ошибке вы пытаетесь просто запустить скрипт без параметров.
удав при запуске внешней программы передает ей параметр %k, в данном случае это "ttyUSB*", где * это цифра.
Попробуйте запустить скрипт с нужным параметром ttyUSB* и скрипт вернет значение оператора (естественно отредактировать скрипт нужно).
п.с.
а называть можно как угодно, это что бы просто были понятные симлинки в /dev/gsm, конечно пойдет и kyivstar1 kyivstar2
my %imei_name=("35881103*******","kyivstar1",
"35881103*******","kyivstar2");
иногда в /dev/gsm
появляется
вместо @life-at просто @at или же может появится life-audio, life-dev, но без life-at (аналогично и для других модемов)
У меня на этапе "Waiting for /dev..." при загрузке с правилом udev загрузка зависает, пока не вытащу модемы.
KERNEL=="ttyUSB*", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1001", PROGRAM="/etc/at.pl %k", SYMLINK+="gsm/%c", GROUP="uucp", MODE="0660"
===
PROGRAM is used for running programs which produce device names (and they shouldn't do anything other than that). When those programs are being executed, the device node has not yet been created, so acting upon the device in any way is not possible.
===
Смысл в том, что дерево драйверов не инициализировано, и то что у автора работает - это повезло.
В udev пишем:
KERNEL=="ttyUSB*", SYSFS{idVendor}=="12d1", SYSFS{idProduct}=="1001", RUN+="/usr/local/at.pl %k", GROUP="uucp", MODE="0666"
Последние строчки скрипта меняем на:
my $symroot = "/usr/local/"
if(grep{$_ eq $origin_port} @dev_usb){
print $imei_name{$imei} . "-dev";
unlink($symroot. $imei_name{$imei} . "-dev");
symlink("/dev/ttyUSB${origin_port}", $symroot . $imei_name{$imei} . "-dev");
}elsif(grep{$_ eq $origin_port} @audio_usb){
print $imei_name{$imei} . "-audio";
unlink($symroot . $imei_name{$imei} . "-audio");
symlink("/dev/ttyUSB${origin_port}", $symroot . $imei_name{$imei} . "-audio");
}elsif(grep{$_ eq $origin_port} @at_usb){
print $imei_name{$imei} . "-at";
unlink($symroot . $imei_name{$imei} . "-at");
symlink("/dev/ttyUSB${origin_port}", $symroot . $imei_name{$imei} . "-at");
}
ВОПРОС: а как сделать, чтобы входящие sms не записывались в текстовый файл а отправлялись на email.
Подскажите плиз...
PS: Забыл сказать - когда идёт разговор, то складываеться такое впечатление что разговариваешь сам с собой, т.е. всё что я говорю чётко слышно в динамике этой же трубки, как будто система редиректит мои пакеты мне же (надеюсь внятно описал ситуацию)
chan_datacard работает со следующими модемами:
* Huawei K3715
* Huawei E169 / K3520
* Huawei E1550
В этом и проблема )))
exten => s,1,Set(CHANNEL(language)=ru)
и заработало)
Это для того что бы астериск подхватил русскую озвучку)
http://asteriskpbx.ru/wiki/AstPbx/AdminGuide
конфиги
http://asteriskpbx.ru/browser/astpbx/etc/asterisk
только они старенькие, под 1.6 не везде подходят, нужно править...
http://asterisk-pbx.ru/wiki/doku.php/asterisk_dialplan7
и никаких скриптов не нужно.
# cd asterisk-1.6.2-current.tar.gz
мне кажется, что .tar.gz здесь лишнее
У меня тот самый слосчастный мегафоновкий модем 11.608.12.10.209 У меня обрываются с ним вызовы и он отваливается, а потом спустя секунд 30 вновь появляется в астериске. Вопрос: как можно поменять прошивку чтобы он корректно заработал или надо идти покупать модем от МТС с указанными версиями прошивок?