Настройка Huawei E173 на FreeBSD + Asterisk

GSM-модем Huawei E173Дорогие читатели, сегодня поделюсь инструкцией, как настроить GSM-модем Huawei E173 на программной АТС Asterisk, работающей под управлением FreeBSD. Настроим исходящие и входящие звонки. Не сказать, что это очень уж секретные сведения, но мне всё-таки пришлось наступить на некоторые грабли в процессе настройки, а значит, материал достоин публикации. Итак, начнем – у нас имеется FreeBSD 8.3, Asterisk 1.8.17.0 и GSM-шлюз Huawei E173, подключающийся к USB-порту.

Подключаем USB-модем. Сперва нужно проверить, что он определяется в системе…

Например, у меня при подключении модема появились следующие устройства в каталоге /dev:

crw-r----- 1 root  wheel        0, 125 15 ноя 16:04 da0
crw------- 1 root  wheel        0, 126 15 ноя 16:04 pass1
crw-r----- 1 root  wheel        0, 123 15 ноя 16:04 cd0
crw------- 1 root  wheel        0, 124 15 ноя 16:04 pass0
lrwxr-xr-x 1 root  wheel             9 15 ноя 16:04 ugen1.3 -> usb/1.3.0

Однако это ещё не всё, что нужно. Должны быть устройства вида cuaU* для взаимодействий с собственно GSM-модемом. Чтобы эти файлы устройств появились, необходимо загрузить модуль ядра u3g (он потянет за собой ucom):

kldload u3g

После этого я увидел новые файлы устройств вида cuaU0.* и ttyU0.* (у вас могут отличаться цифры после большой буквы U).

Разобравшись с аппаратной частью, приступим к программной. Скачиваем исходники проекта asterisk-chan-dongle (раньше он назывался chan-datacard) – http://code.google.com/. Список поддерживаемых устройств можно посмотреть на вики проекта.

Распаковываем в любой каталог, и собираем стандартным способом:

./configure
make

Получаем модуль chan_dongle.so, который нужно поместить в каталог с модулями Asterisk, например, в /usr/local/lib/asterisk/modules/chan_dongle.so. Также переносим файл-пример dongle.conf в каталог с конфигурационными файлами Asterisk, например, в /usr/local/etc/asterisk/dongle.conf и редактируем по своим нуждам:

[general]
interval=15

[defaults]
context=incoming
exten=79237777777
group=0
rxgain=0
txgain=0
autodeletesms=yes
resetdongle=yes
u2diag=-1
usecallingpres=yes
callingpres=allowed_passed_screen
disablesms=no

language=en
smsaspdu=yes
mindtmfgap=45
mindtmfduration=80
mindtmfinterval=200
callwaiting=auto

disable=no
initstate=start

dtmf=relax

[dongle0]
audio=/dev/cuaU0.2
data=/dev/cuaU0.3

imei=123456789012345
imsi=123456789012345

В основном это настройки по умолчанию, и многие из них описаны в самом конфиге, или на вики проекта. Нужно обратить внимание на настройки, выделенные жирным. Секция defaults определяет общие параметры для USB-устройств, если их у вас несколько, то для каждого устройства можно указать собственные параметры, в данном случае как у dongle0. Опции context и extension определяют, соответственно, контекст и добавочный номер, куда попадёт входящий звонок, поступающий на данную SIM-карту. Опции audio и data определяют файл устройства из каталога /dev, о которых я уже писал чуть выше. Название секции dongle0 также служит идентификатором канала, в который мы будем отправлять исходящий звонок из Asterisk. Сейчас мы увидим, как это делается.

Соответствующая настройка диалплана Asterisk, файл extensions.conf:

; Для входящих звонков. Например, звонок должен поступать на секретаря с добавочным 100.
[incoming]
exten = 79237777777,1,Dial(SIP/100,60,mt)

; Для исходящих звонков. Просто звоним через USB-девайс:
[outgoing]
exten = _X.,1,Dial(Dongle/dongle0/${EXTEN},,t)

Чтобы последний контекст срабатывал, нужно у соответствующего пользователя присвоить значение параметра context=outgoing. Наконец, загружаем модуль и перезагружаем диалплан, в консоли Asterisk:

module load chan_dongle
dialplan reload

Вот и все, ребята!

Похожие статьи

6 thoughts on “Настройка Huawei E173 на FreeBSD + Asterisk”

  1. sip.conf пожалуйста выложите сюда.
    При звонке на модем, можно донабрать другой номер? У меня не получается донабрать.

  2. Донабор не пробовал. Попробуйте указать опцию dtmfmode=inband

  3. у меня проблема с этим набираю номер в донаборе и идет отключение, в логе:
    [Apr 28 17:50:35] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘8’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:35] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘8’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:36] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘8’ received on Dongle/dongle0-0100000004, duration 191 ms
    [Apr 28 17:50:36] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘8’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:36] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘8’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:36] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘4’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:36] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘4’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:36] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘4’ received on Dongle/dongle0-0100000004, duration 229 ms
    [Apr 28 17:50:36] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘4’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:36] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘4’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:36] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘9’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:36] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘9’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:37] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘9’ received on Dongle/dongle0-0100000004, duration 191 ms
    [Apr 28 17:50:37] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘9’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:37] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘9’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:37] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘5’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:37] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘5’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:37] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘5’ received on Dongle/dongle0-0100000004, duration 191 ms
    [Apr 28 17:50:37] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘5’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:37] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘5’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:38] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘7’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:38] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘7’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:38] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘7’ received on Dongle/dongle0-0100000004, duration 178 ms
    [Apr 28 17:50:38] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘7’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:38] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘7’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:38] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘8’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:38] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘8’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:39] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘8’ received on Dongle/dongle0-0100000004, duration 191 ms
    [Apr 28 17:50:39] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘8’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:39] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘8’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:39] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘7’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:39] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘7’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:39] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘7’ received on Dongle/dongle0-0100000004, duration 178 ms
    [Apr 28 17:50:39] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘7’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:39] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘7’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:40] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘4’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:40] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘4’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:41] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘4’ received on Dongle/dongle0-0100000004, duration 191 ms
    [Apr 28 17:50:41] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘4’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:41] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘4’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:41] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘2’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:41] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘2’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:41] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘2’ received on Dongle/dongle0-0100000004, duration 191 ms
    [Apr 28 17:50:41] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘2’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:41] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘2’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:41] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘0’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:41] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘0’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:42] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘0’ received on Dongle/dongle0-0100000004, duration 178 ms
    [Apr 28 17:50:42] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘0’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:42] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘0’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:42] DTMF[1865]: channel.c:4062 __ast_read: DTMF begin ‘0’ received on Dongle/dongle0-0100000004
    [Apr 28 17:50:42] DTMF[1865]: channel.c:4072 __ast_read: DTMF begin passthrough ‘0’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:42] DTMF[1865]: channel.c:3977 __ast_read: DTMF end ‘0’ received on Dongle/dongle0-0100000004, duration 204 ms
    [Apr 28 17:50:42] DTMF[1865]: channel.c:4017 __ast_read: DTMF end accepted with begin ‘0’ on Dongle/dongle0-0100000004
    [Apr 28 17:50:42] DTMF[1865]: channel.c:4046 __ast_read: DTMF end passthrough ‘0’ on Dongle/dongle0-0100000004
    — Executing [s@dongle-incoming:5] Congestion(“Dongle/dongle0-0100000004”, “3”) in new stack
    == Spawn extension (dongle-incoming, s, 5) exited non-zero on ‘Dongle/dongle0-0100000004’

  4. @Alex
    а какой диалплан? есть ли добавочные для приема этих цифр? например:
    exten = _X.,1,NoOp(${EXTEN})

  5. Диалплан такой:
    [dongle-incoming]
    ; incoming from dongle
    exten => s,1,Answer()
    exten => s,2,Set(CALLERID(num)=18689)
    exten => s,3,Background(2)
    exten => s,4,Wait(20)
    exten => _X.,1,Set(CALLERID(num)=18689)
    exten => _X.,n,Dial(SIP/${EXTEN}@dongle-incoming)
    exten = >_X.,n,Hangup()
    exten => s,5,WaitExten(5)
    exten => s,6,Congestion(3)
    exten => s,7,Hangup()

  6. Характеристики Asterisk — chan_dongle — Modem E173

    Входящие проходят нормально, при исходящем звонке на моб (пример 89123456789) выходит ошибка:
    [2016-11-05 11:45:05] ERROR[1894][C-00000000]: channel.c:7910 ast_channel_start_silence_generator: Could not set write format to SLINEAR
    [2016-11-05 11:45:06] ERROR[1894][C-00000000]: channel.c:5424 set_format: Unable to set format because channel Local/FMGL-89123456789#@from-internal-00000001;2 supports no formats

    Настройки проверил, норм, возможно причина в прошивке модема? Прошивка 11.126.85.00.209

Leave a Reply

Your email address will not be published. Required fields are marked *