Подключение GSM-модема USB Huawei E1550 к Asterisk 13 + chan_dongle на Debian.
Появилась интересная задача, которая заключается в том что нужно подключить 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 в режим работы «только модем».
"только модем"
, то пропускайте данный пункт и переходите к установке модуля 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, должен вернутся результат — "ОК"
.
После успешного выполнения команды 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
. Создаем файл /etc/udev/rules.d/92-dongle.rules
со следующим содержимым:
cat << EOF > /etc/udev/rules.d/92-dongle.rules
KERNEL=="ttyUSB*", MODE="0666", OWNER="asterisk", GROUP="dialout"
EOF
Перезапустим службу 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
В консоли 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
/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
Здравствуйте. Спасибо за пост, вроде всё по делу. Не подскажете ли, в чем может быть дело, если мне не удается получить смски с помощью донгла (у меня модем E173) в процессе работы Asterisk?
Имею в виду, что если отправить устройству смс, астериск увидит её только если его перезапустить, видимо, при инициализации модема. Отправка при этом работает нормально..
сложно сказать почему у вас так, но на тот момент когда я реализовал, вроде все работало нормально. А сейчас даже не могу подсказать.
Зачем делать контекст для входящих для проигрывания демо-теста и ложить трубку? Так круто?
[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()
Очевидно же что это просто для примера было так написано, если не догадались..
Привет всем. У меня такой вот вопрос. Звонит человек извне на номер, привязанный к аналоговому транку DAHDI (Openvox A800p). Еще существует транк chan_dongle на основе модема Huawei E171. Возможно ли его звонок перенаправить каким-либо образом с DAHDI в билайновский chan_dongle, по определенным временным условиям?
ситуация простая, здесь, где я нахожусь, нет возможностей интернета абсолютно, SIP гуляет только от поднятого FreePBX13+Asterisk11 и только внутри. Наружу работают только аналоговая плата OpenVox (один FXO) и усб-модем вышеуказанный. Хотелось бы сделать, чтобы все входящие после восьми часов вечера на основной телефон, который включен в DAHDI инициировал бы дозвон по определенному сотовому номеру донгловский транк и потом как-то их контачил между собой. Звонки c внутренних sipовских экстеншнов нормально проходят по условиям исходящей маршрутизации на chan_dongle. Но , возможно ли осуществить вот такой коннекшн транков ?
простите, я новичок. начал изучение с FreePBX, а не с астера :'( может быть поэтому — туплю
Похоже вы что-то не договариваете в заметке
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#
Похоже что вы пытаетесь сделать на Asterisk 15.7.2 + Debian 9, хотя в заметке явно указано что все описанное применимо к Asterisk 13 + Debian 8 Jessie!
Лично у меня на Asterisk 13 + Debian 8 Jessie, все прекрасно заводится, делая в точности по шагам заметки. На других версиях не пробовал и не могу знать что там за подводные камни могут быть.
К примеру указанный в статье модуль chan_dongle поддерживает Asterisk 13, поддержку Asterisk 15, насколько я знаю никто не делал..