По роду своей работы в сфере IT мне достаточно часто приходится сталкиваться с проблемами не всегда стандартными для IT сферы. Так же заметки со ссылками на статьи которые очень часто на практике выручали, держать на своем компе стало не удобно. По этой причине создан этот блог — записная книжка статей и заметок. Авторов статей прошу не обижаться если местами забыл сделать на них обратную ссылку. Пишите в комментариях все обязательно поправлю..
Поиск по моему блогу
VoIP-GSM шлюз для Asterisk на USB модеме HUAWEI E1550
Голосовой модуль по умолчанию активирован только в модемах МТС.
Рекомендованное ядро Linux 2.6.33+
Asterisk 1.6.+
Заведомо рабочие прошивки (firmware — не путать с dashboard):
МТС 11.608.12.00.143
11.608.14.15.311
Нерабочая firmware:
Мегафон 11.608.12.10.209 -при активированном голосе из под винды звонит, из под Linux — нет.
Активировать голосовую функцию можно программой DC-UNLOCKER за 4 кредита — 4 евро.
Вандальный ремонт USB 3G модема Huawei E1550
Установка 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=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
Проверим состояние модема из командной строки Asterisk (CLI).
Полный обзор 3G USB модема Huawei E1550
Перегрузить 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 $ $) exten => sms,n,System(echo ‘$,,%Y-%m-%d %H:%M:%S)> — $ — $: $’ >> /var/log/asterisk/sms.txt) exten => sms,n,Hangup() exten => ussd,1,Verbose(Incoming USSD: $) exten => ussd,n,System(echo ‘$,,%Y-%m-%d %H:%M:%S)> — $: $’ >> /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 => _X.,1,Dial(Datacard/datacard0/$)
Отключение функций 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 https://911ua.blogspot.com/2010/09/voip-gsm-asterisk-usb-huawei-e1550.html» target=»_blank»]911ua.blogspot.com[/mask_link]
myasterisk
Querying signal strength
+CSQ
Returns two comma separated numbers. The first number is the signal strength (RSSI), the second number is unused. Here’s how to interpret RSSI: 0 ⇐ -113dBm 1 -111dBm 2 – 30 -109dBm to -53dBm 31 >= -51dBm 99 Unknown
Setting operating mode
+CFUN=x 0 Low power mode 1 Online 4 Offline 6 Reset device 7 Turn off radio
Get manufacturer information
+CGMI
Get software version
+CGMR
Get SIM IMSI number
+CIMI
Get device IMEI
+CGSN
Get hardware version
Change PIN
+CPWD=SC,old pin, new pin
Enable PIN
+CLCK=SC,mode,pin Mode: 0=unlock, 1=lock, 2=query state
Query system information
Returns: status, domain, roaming status, mode, SIM state Status 0 No service. 1 Restricted service 2 Valid service 3 Restricted regional service. 4 Power-saving and deep sleep state Domain 0 No service. 1 Only CS service 2 Only PS service 3 PS+CS service 4 CS and PS not registered, searching Roaming 0 Non roaming state 1 Roaming state Mode 0 No service. 1 AMPS mode (not in use currently) 2 CDMA mode (not in use currently) 3 GSM/GPRS mode 4 HDR mode 5 WCDMA mode 6 GPS mode SIM state 0 Invalid USIM card state or pin code locked 1 Valid USIM card state 2 USIM is invalid in case of CS 3 USIM is invalid in case of PS 4 USIM is invalid in case of either CS or PS 255 USIM card is not existent
Источник: myasterisk.livejournal.com
perl скрипт производящий голосовой обзвон (оповещение) через usb модем huawei e1550
В свое время, так как я много времени проводил в командировках, мной была приобретена замечательная игрушка — usb модем Huawei e1550. Но времена лихой молодости прошли, и необходимость в использовании данного девайса по прямому назначению отпала. Так он и пылился у меня на полке в течении нескольких лет. И пылился бы и дальше, но возникла задача сделать систему оповещения.
Тут я и вспомнил про модем. Рассмотрев поставленную задачу — был вынужден отказаться от SMS оповещения в пользу голосового дозвона по причине невозможности получить уведомление о прочтении SMS. Решения на базе Asterisk показались мне несколько громоздкими, и почитав доку по модему я решил написать звонилку самостоятельно.
Причина публикации.
Несмотря на обилие статей по работе с USSD и SMS запросами, я не нашел ни одной реализации голосовых вызовов на скриптовых языках (таких как Perl, PHP, Node.js). Надеюсь данная статья будет для Вас хорошим подспорьем.
Среда разработки
операционная система: Linux
Дистрибутив: openSUSE 12.3
Ядро: 3.7.10-1.16-desktop #1 SMP PREEMPT Fri May 31 20:21:23 UTC 2013 (97c14ba) i686 i686 i386 GNU/Linux
Язык программирования: Perl
usb модем: Huawei e1550
Немного теории.
В большинстве дистрибутивов Linux, при подключении данного модема в /dev создаются 3 usb интерфейса. обычно это:
/dev/ttyUSB0 — командный интерфейс модема
/dev/ttyUSB1 — голосовой(при включенном голосовом режиме) интерфейс модема
/dev/ttyUSB2 — командный интерфейс модема. Отличается от /dev/ttyUSB0 тем что с него можно читать не только ответы модема на команды, а также служебные сообщения. Такие как данные о качестве сигнала, вывод ^CEND и прочее.
Для начала работы с модемом достаточно открыть как файл один из командных интерфейсов на чтение и запись.
Чтобы отправить модему команду — нужно записать ее в открытый файл интерфейса.
Чтобы получить ответ модема на данную команду — нужно прочесть его из открытого файла интерфейса.
Команды которые можно подавать модему — это AT команды
Команды для модема Huawei e1550 и ответы которые на них можно получить описаны в его спецификации:
HUAWEI CDMA Datacard Modem AT Command Interface Specification
HUAWEI UMTS Datacard Modem AT Command Interface Specification
Для того чтобы активировать голосовые функции модема нужно подать команду AT^CVOICE=0
Голосовые функции будут активированы до тех пор пока не будут отключены командой AT^CVOICE=1
Для того чтобы начать прием/передачу в модем аудио информации нужно при каждом звонке переключать режим работы аудио порта модема командой AT^DDSETEX=2
Аудиоданные для передачи модему должны иметь формат:
частота оцифровки: 8000 Герц.
количество каналов: 1 (mono).
бит на оцифровку: 16 signed.
Аудиоданные должны подаваться в аудио порт модема порциями по 320 байт каждые 0.02 секунды.
По завершении вызова модем через 2-й командный интерфейс выдает информацию о вызове в виде сообщения CEND
формат вывода ^CEND:call_index, duration, end_status, cc_cause
где:
call_index — уникальный идентификатор вызова
duration — длительность вызова в секундах
end_status — код статуса устройства после завершения вызова
cc_cause — код причины завершения вызова
Итак. Начнем.
звонилка будет состоять из 3-х файлов:
huawey_voice_call.pl — непосредственно сам скрипт голосового дозвона.
list.01.pl — файл с данными абонентов.
test.voice.raw — файл с голосовым сообщением записанным в нужном формате.
также в конце статьи будут представлены 2 дополнительных файла:
cc_cause.pl — содержит коды причин завершения вызова (cc_cause)
end_status.pl — содержит коды статуса устройства после завершения вызова (end_status)
все файлы одним архивом (выложил на своем компе, изредка комп бывает выключен)
# Список абонентов.
# Это массив хэш массивов в котором каждая запись содержит
# данные о абоненте:
# phone — телефон абонента
# name — ФИО абонента
# Также возможно хранение и других данных об абоненте
(
< phone =>’+79111234567′ , name => ‘Петров Петр Петрович’ > ,
< phone =>’+79117654321′ , name => ‘Васильев Василий Васильевич’ >
) ;
рассмотрим test.voice.raw
Для создания данного файла использовался аудиоредактор Audacity как показано на картинках:
Также привожу дополнительные файлы cc_cause.pl и end_status.pl. Они не используются в представленной версии скрипта, но в случае доработки будут полезны.
В завершение.
Данная версия скрипта голосового оповещения не претендует на полноту и правильность реализации, а является лишь демонстрацией, и для серьезного использования может быть и должна быть усовершенствована. Необходимо добавить более серьезную обработку состояний CEND, реализовать условия повторного дозвона до абонентов, если с первого раза не удалось оповестить. Также можно сделать web интерфейс включающий в себя планировщик задач, редактор списков абонентов, генерацию отчетов и многое другое.
Я надеюсь что эта статья окажется востребованной и полезной для Вас, а также постараюсь и впредь выкладывать интересные и полезные статьи.
Источник: habr.com