Подключение GSM-модема USB Huawei E1550 к Asterisk 13 + chan_dongle на Debian 8 Jessie.

Появилась интересная задача, которая заключается в том что нужно подключить GSM-модем USB HUAWEI E1550 к Asterisk 13 работающий на Debian 8 Jessie. Настроить возможность принимать/отправлять SMS, принимать/звонить с номера находящегося в GSM-модеме.

 

Рекомендуется чтобы GSM-модем HUAWEI E1550 работал на прошивке версии: 11.608.12.00.143, а так же чтобы работал только в режиме «только модем».

 

На момент написания статьи используемая версия Asterisk — 13.25.0, который развернут на Debian 8 Jessie (как развернуть Asterisk 13 на Debian 8 Jessie, можно по этой статье)

 

Настройка системы и GSM-модема

Обновляем систему до актуального состояния:

apt-get update && apt-get upgrade -y

 

Устанавливаем необходимые пакеты для работы с USB GSM шлюзом:

apt-get install usb-modeswitch minicom
usb-modeswitch необходима для автоматического переключения устройства из режима, minicom необходима для подключения к последовательным портам (COM).

 

Подключаем GSM-модем HUAWEI E1550, проверяем появились ли устройства ttyUSB*:

ls -al /dev | grep ttyUSB

crw-rw---- 1 root dialout 188, 0 фев 27 11:34 ttyUSB0
crw-rw---- 1 root dialout 188, 1 фев 27 11:33 ttyUSB1
crw-rw---- 1 root dialout 188, 2 фев 27 12:37 ttyUSB2

 

Теперь необходимо перевести GSM-модем HUAWEI E1550 в режим работы «только модем».

В случае если GSM-модем HUAWEI E1550, уже находится в режиме работы «только модем», то пропускайте данный пункт и переходите к установке модуля chan_dongle.

 

Запускаем утилиту для подключения к последовательным портам (COM):

minicom -s

Выбираем пункт «Настройка последовательного порта»:

            +-----------[конфигурация]-----------+
            | Каталоги и файлы                   |
            | Протоколы                          |
            | Настройка последовательного порта  |
            | Модем и дозвон                     |
            | Экран и клавиатура                 |
            | Сохранить настройки как dfl        |
            | Сохранить настройки как...         |
            | Выход                              |
            | Выход из Minicom                   |
            +------------------------------------+

Нажимаем «A» для выбора имени устройства COM порта, вводим название устройства «/dev/ttyUSB0»

    +-----------------------------------------------------------------------+
    | A - Последовательный порт          : /dev/ttyUSB0                     |
    | B - Размещение lock-файла          : /var/lock                        |
    | C - Программа при выходе           :                                  |
    | D - Программа при запуске          :                                  |
    | E - Скорость/Чётность/Биты         : 115200 8N1                       |
    | F - Аппаратное управление потоком  : Да                               |
    | G - Программное управление потоком : Нет                              |
    |                                                                       |
    |    Какую настройку изменить?                                          |
    +-----------------------------------------------------------------------+
            | Экран и клавиатура                 |
            | Сохранить настройки как dfl        |
            | Сохранить настройки как...         |
            | Выход                              |
            | Выход из Minicom                   |
            +------------------------------------+

Нажимаем 2 раза ENTER и выбираем «Сохранить настройки как…»

            +-----------[конфигурация]-----------+
            | Каталоги и файлы                   |
            | Протоколы                          |
            | Настройка последовательного порта  |
            | Модем и дозвон                     |
            | Экран и клавиатура                 |
            | Сохранить настройки как dfl        |
            | Сохранить настройки как...         |
            | Выход                              |
            | Выход из Minicom                   |
            +------------------------------------+

Вводим название профиля, нажимаем ENTER и выбираем пункт «Выход из Minicom»

 

Подключаемся к сохраненному профилю (я сохранил профиль как e1550):

minicom e1550

 

В терминале, вводим команду AT, нажимаем ENTER, должен вернутся результат —  «ОК«.

Обратите внимание, что символы, которые вводим, могут не отображаться на экране! Однако, после ввода команды и нажатия Enter, GSM-модем должен отобразить результат.

 

После успешного выполнения команды AT, выполним команду, которая переключит режим работы GSM-модем, в режим работы «только модем»:

AT^U2DIAG=0
Доступные режимы работы GSM-модема HUAWEI E1550:

AT^U2DIAG=0 (режим только модем)
AT^U2DIAG=1 (режим модем + CD-ROM)
AT^U2DIAG=255 (режим модем + CD-ROM + Card Reader)
AT^U2DIAG=256 (режим модем + Card Reader)

Полезные AT-команды:

ATI — Информация о устройстве
AT+CIMI — IMSI модема
AT+CGSN — IMEI модема

 

Для выхода из программы нажмите Ctrl+A, затем нажмите Q и подтвердите выход нажатием Enter.

 

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

Скачиваем исходник модуля chan_dongle под Asterisk 13 и разархивируем его:

cd /opt
wget https://github.com/oleg-krv/asterisk-chan-dongle/archive/asterisk13.zip
unzip asterisk13.zip
cd asterisk-chan-dongle-asterisk13

 

Выполняем сборку модуля, компиляцию и установку модуля:

aclocal && autoconf && automake -a
./configure
make
make install
Не обращаем внимание на строчку «automake: error: no ‘Makefile.am’ found for any configure output» — это не является ошибкой

 

Копируем конфигурационный файл dongle.conf в каталог asterisk и назначаем ему нужные права:

cp etc/dongle.conf /etc/asterisk/
chown asterisk:asterisk /etc/asterisk/dongle.conf

 

Чтобы при подключении GSM-модема, Asterisk имел доступ к нему, необходимо устройству назначать владельца asterisk и группу dialout. Создаем файл (nano /etc/udev/rules.d/92-dongle.rules) со следующим содержимым:

KERNEL=="ttyUSB*", MODE="0666", OWNER="asterisk", GROUP="dialout"

 

Перезапустим службу udev и asterisk:

service udev restart
service asterisk restart

 

Для проверки, переподключим GSM-модем к системе и проверим назначенные права на него:

ls -al /dev | grep ttyUSB

crw-rw-rw- 1 asterisk dialout 188, 0 фев 27 11:34 ttyUSB0
crw-rw-rw- 1 asterisk dialout 188, 1 фев 27 11:33 ttyUSB1
crw-rw-rw- 1 asterisk dialout 188, 2 фев 27 13:09 ttyUSB2

 

Настройка обработки SMS, USSD, Входящих/Исходящих вызовов

В файле конфигурации (/etc/asterisk/dongle.conf) опишем параметры подключенного устройства HUAWEI E1550.

 

Для примера скорректируем имеющуюся секцию [dongle0]:

[dongle0]
audio=/dev/ttyUSB1 ; tty порт для audio соединений;
data=/dev/ttyUSB2 ; tty порт для AT команд; 

context=from-dongle ; используемый контекст
language=ru ; используемый язык

;imei=123456789012345
;imsi=123456789012345
Параметры imei, imsi должны автоматом подхватится при соединении asterisk c GSM-модемом. Если не этого не произошло, то можно в ручную их указать, в строках imei, imsi.

 

В консоли asterisk, перечитываем конфигурацию chan_dongle и проверяем состояние устройства. Если все было сделано правильно, то подключение к GSM-модему будет осуществлено и устройство будет отображаться в консоли asterisk:

asterisk -rv 

dongle reload now
dongle show devices

ID      Group State RSSI Mode Submode Provider Name Model  Firmware         IMEI     IMSI    Number
dongle0 0     Free  18   5    4       MTS-RUS       E1550  11.608.12.00.143 3588***  2500*** Unknown

 

Теперь когда соединение с GSM-модемом установлено, настроим dialplan обработки SMS, USSD, входящих и исходящих вызовов. В файле конфигурации (/etc/asterisk/extensions.conf) добавляем следующее:

[dongle-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()

[dongle-incoming-ussd]
exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()

[dongle-incoming-call]
exten => +7915*****13,1,Answer()
exten => +7915*****13,n,Playback(demo-echotest)
exten => +7915*****13,n,Echo
exten => +7915*****13,n,Playback(demo-echodone)
exten => +7915*****13,n,Hangup()

[dongle-outgoing-call] 
exten = _X.,1,Dial(Dongle/dongle0/${EXTEN},,t)
exten = _X.,n,Hangup()

[from-dongle] 
include => dongle-incoming-sms 
include => dongle-incoming-ussd 
include => dongle-incoming-call
include => dongle-outgoing-call
При поступлении SMS и USSD запросов, данные их будут сохранятся в тестовые файлы (/var/log/asterisk/sms.txt), (/var/log/asterisk/ussd.txt). При входящем звонке на номер который находится на GSM-модеме, будет запущен «ЭХО тест», при исходящем будет вызван набранный номер. 

 

 

Для наглядности работы модуля chan_dongle, приведу выводы из консоли asterisk.

 

Получение SMS:

[dongle0] <strong>Got SMS from +7985*****73: 'ТЕСТОВОЕ СООБЩЕНИЕ'</strong>
-- Executing [sms@from-dongle:1] NoOp("Local/sms@from-dongle-00000002;1", "Incoming SMS from +7985*****73 ТЕСТОВОЕ СООБЩЕНИЕ") in new stack
-- Executing [sms@from-dongle:2] System("Local/sms@from-dongle-00000002;1", "echo '2019-02-27 11:24:31 - e1550 - +7985*****73: ТЕСТОВОЕ СООБЩЕНИЕ' >> /var/log/asterisk/sms.txt") in new stack
-- Executing [sms@from-dongle:3] Hangup("Local/sms@from-dongle-00000002;1", "") in new stack
== Spawn extension (from-dongle, sms, 3) exited non-zero on 'Local/sms@from-dongle-00000002;1'

Пример отправки SMS:

dongle sms dongle0 +7917*****00 HELLO! THIS IS TEST MESSAGE!

[dongle0] SMS queued for send with id 0x7fc348000a90
-- [dongle0] Successfully sent SMS message 0x7fc348000a90
[Feb 27 11:30:22] NOTICE[852]: at_response.c:257 at_response_ok: [dongle0] Successfully sent SMS message 0x7fc348000a90

 

Пример отправки USSD запроса:

dongle ussd dongle0 *100#

[dongle0] USSD queued for send with id 0x2e44cc0
-- [dongle0] Successfully sent USSD 0x2e44cc0
[Feb 27 11:37:13] NOTICE[852]: at_response.c:267 at_response_ok: [e1550] Successfully sent USSD 0x2e44cc0
[dongle0] Got USSD type 0 'USSD Notify': 'Баланс:5676,62р '
-- Executing [ussd@from-dongle:1] NoOp("Local/ussd@from-dongle-00000004;1", "Incoming USSD: Баланс:5676,62р ") in new stack
-- Executing [ussd@from-dongle:2] System("Local/ussd@from-dongle-00000004;1", "echo '2019-02-27 11:37:15 - e1550: Баланс:5676,62р ' >> /var/log/asterisk/ussd.txt") in new stack
-- Executing [ussd@from-dongle:3] Hangup("Local/ussd@from-dongle-00000004;1", "") in new stack
== Spawn extension (from-dongle, ussd, 3) exited non-zero on 'Local/ussd@from-dongle-00000004;1'

 

Очистка SMS из памяти SIM и GSM-модема

Периодически рекомендуется очищать SMS из память SIM и GSM-модема.

 

Для очистки памяти SIM в консоли asterisk, вводим команды:

dongle cmd <dongle_name> AT+CPMS=\"SM\",\"SM\",\"SM\"
dongle cmd <dongle_name> AT+CMGD=1,4

Для очистки памяти GSM-модема в консоли asterisk, вводим команды:

dongle cmd <dongle_name> AT+CPMS=\"ME\",\"ME\",\"ME\"
dongle cmd <dongle_name> AT+CMGD=1,4
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА

БесполезноСлабоватоПриемлемоОтличноПревосходно (1 голос(ов), в среднем: 5,00 из 5)
Загрузка...

Всего комментариев: 7 Комментировать

  1. Kuzya /

    Похоже вы что-то не договариваете в заметке
    root@debian:/opt/dongle# aclocal && autoconf && automake -a
    aclocal: warning: autoconf input should be named ‘configure.ac’, not ‘configure.in’
    automake: warning: autoconf input should be named ‘configure.ac’, not ‘configure.in’
    configure.in:50: installing ‘./compile’
    configure.in:6: installing ‘./config.guess’
    configure.in:6: installing ‘./config.sub’
    configure.in:7: installing ‘./install-sh’
    configure.in:7: installing ‘./missing’
    automake: error: no ‘Makefile.am’ found for any configure output
    root@debian:/opt/dongle# lsb_release -a
    No LSB modules are available.
    Distributor ID: Debian
    Description: Debian GNU/Linux 9.8 (stretch)
    Release: 9.8
    Codename: stretch
    root@debian:/opt/dongle# uname -a
    Linux debian 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux
    root@debian:/opt/dongle# asterisk -rx «core show version»
    Asterisk 15.7.2 built by root @ debian on a x86_64 running Linux on 2019-03-01 13:11:50 UTC
    root@debian:/opt/dongle#

    1. Жаконда / Автор записи

      Похоже что вы пытаетесь сделать на Asterisk 15.7.2 + Debian 9, хотя в заметке явно указано что все описанное применимо к Asterisk 13 + Debian 8 Jessie!

      Лично у меня на Asterisk 13 + Debian 8 Jessie, все прекрасно заводится, делая в точности по шагам заметки. На других версиях не пробовал и не могу знать что там за подводные камни могут быть.

      К примеру указанный в статье модуль chan_dongle поддерживает Asterisk 13, поддержку Asterisk 15, насколько я знаю никто не делал..

  2. dioxine /

    Привет всем. У меня такой вот вопрос. Звонит человек извне на номер, привязанный к аналоговому транку DAHDI (Openvox A800p). Еще существует транк chan_dongle на основе модема Huawei E171. Возможно ли его звонок перенаправить каким-либо образом с DAHDI в билайновский chan_dongle, по определенным временным условиям?
    ситуация простая, здесь, где я нахожусь, нет возможностей интернета абсолютно, SIP гуляет только от поднятого FreePBX13+Asterisk11 и только внутри. Наружу работают только аналоговая плата OpenVox (один FXO) и усб-модем вышеуказанный. Хотелось бы сделать, чтобы все входящие после восьми часов вечера на основной телефон, который включен в DAHDI инициировал бы дозвон по определенному сотовому номеру донгловский транк и потом как-то их контачил между собой. Звонки c внутренних sipовских экстеншнов нормально проходят по условиям исходящей маршрутизации на chan_dongle. Но , возможно ли осуществить вот такой коннекшн транков ?
    простите, я новичок. начал изучение с FreePBX, а не с астера :'( может быть поэтому — туплю

  3. gpu /

    Зачем делать контекст для входящих для проигрывания демо-теста и ложить трубку? Так круто?

    [dongle-incoming-call]
    exten => +7915*****13,1,Answer()
    exten => +7915*****13,n,Playback(demo-echotest)
    exten => +7915*****13,n,Echo
    exten => +7915*****13,n,Playback(demo-echodone)
    exten => +7915*****13,n,Hangup()

    1. Жаконда / Автор записи

      Очевидно же что это просто для примера было так написано, если не догадались..

  4. Сергей /

    Здравствуйте. Спасибо за пост, вроде всё по делу. Не подскажете ли, в чем может быть дело, если мне не удается получить смски с помощью донгла (у меня модем E173) в процессе работы Asterisk?

    Имею в виду, что если отправить устройству смс, астериск увидит её только если его перезапустить, видимо, при инициализации модема. Отправка при этом работает нормально..

    1. Жаконда / Автор записи

      сложно сказать почему у вас так, но на тот момент когда я реализовал, вроде все работало нормально. А сейчас даже не могу подсказать.

Оставить ответ Жаконда Отменить ответ

12 + 17 =

© IT-блог Жаконды All Rights Reserved.
Яндекс.Метрика