Asterisk & Huawei E1550 (VoIP GSM Gate)


Захотелось на досуге завести VoIP — GSM шлюз, дабы экономить на звонках на сотовые и иметь возможность переключать на сотовые входящие звонки.

После прочтения интернетов выяснилось, что 100% рабочий вариант это модем Huawei E1550. Под теми же циферками продающийся операторами большой тройки. Желательно иметь модем от МТС, т.к. на нем не заблокированы голосовые функции, но после выполнения квеста по поиску в радиусе 1 км от офиса, модем нашелся только в Мегафоне, где и был куплен.

После чего началось…
Проблема №1: Модем залочен по самое немогу. На активацию голоса были потрачены еще 4 Euro через сайт dc-unlocker, есть и бесплатные способы (заливка прошивки от МТС, прекрасно заливается после патча патча, заливка прошивки от E1553), но мне больше по душе было однокнопочное решение, а 170 рублей не такие большие деньги. После чего модем был подцеплен к астериску и выяснилась
Проблема №2: звонки проходят, а голоса нет. Вдумчивое вчитывание показало, что это косяк пошивки 11.608.12.10.209 и лечется он перешивкой на 11.608.14.15.311. Для перепрошивки потребовалось:
1. Прошивка
2. Калькулятор анлок-кодов
В калькулятор скармливаем IMEI модема (написан на коробке или модеме или в прошиваторе или dc-unlocker client) получаем два кода, нас сейчас интересует flashcode. Именно его и попросит ввести прошиватор.
После проделанных действий модем готов к работе и можно переходить к настройке asterisk

Версия ядра должна быть старше 2.6.33, поэтому я не особо размышляя поставил 2.6.35-23-generic-pae из бэкпортов для ubuntu-server 10.04LTS
так же потребуется пакет usb-modeswitch для работы модем и build-essential для сборки модуля канала chan_datacard

После установки usb-modeswitch можно воткнуть модем и посмотреть, что получилось:
$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 2011-04-21 19:08 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 2011-04-21 19:08 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 0 2011-04-21 19:08 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 0 2011-04-21 19:08 /dev/ttyUSB3

Это все порты модема, нам потребуются только ttyUSB2 и ttyUSB3, это audio и data-порты. С помощью udev их можно привести в более понятный вид, но об этом потом.

Далее в программе сборка модуля канала для астериска. Проста как три копейки: выкачиваем свежую ревизию http://code.google.com/p/datacard/
в моем случае это была r310
tar xfv chan_datacard-1.0.r310.tgz
cd chan_datacard-1.0.r310
./configure
make && make install

я знаю, что систему захламлять не хорошо, это не слака, но возиться с сборкой DEB-пакета ради одного файла это чересчур. Если потребуется удалить make install копирует только /usr/lib/asterisk/modules/chan_datacard.so
после чего копируем файл настроек etc/datacard.conf астериску и начинаем настройку
я поменял только контекст, язык и порты:

[general]
context=gsm
language=ru
group=0
[datacard0]
audio=/dev/ttyUSB2
data=/dev/ttyUSB3

после чего перезагружаем астериск и заходим в консоль:
$ sudo asterisk -r
и смотрим на устройство:
my*CLI> datacard show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
datacard0 0 Free 30 3 3 MegaFon E1550 11.608.14.15.311 XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX Unknown

Если устройсво не появилось — 90% что перепутаны порты.

Как звонить:
Звонки приходят на экстеншен s контекста gsm, а звонить как с dahdi:
Dial(Datacard/g0/+71234567890);
где g0 — группа 0 и режим распределения линий (может быть gGrR — подбробнее в описании chan_dahdi.conf)

В следующей серии: адекватные называния портов через UDEV и что-нибудь еще