Появилась интересная задача, которая заключается в том что нужно подключить 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):
Выбираем пункт «Настройка последовательного порта»:
+——————[конфигурация]——————+ | Каталоги и файлы | | Протоколы | | Настройка последовательного порта | | Модем и дозвон | | Экран и клавиатура | | Сохранить настройки как dfl | | Сохранить настройки как... | | Выход | | Выход из Minicom | +——————————————————+ |
Нажимаем «A» для выбора имени устройства COM порта, вводим название устройства «/dev/ttyUSB0»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
+————————————————————————————————————+ | A — Последовательный порт : /dev/ttyUSB0 | | B — Размещение lock—файла : /var/lock | | C — Программа при выходе : | | D — Программа при запуске : | | E — Скорость/Чётность/Биты : 115200 8N1 | | F — Аппаратное управление потоком : Да | | G — Программное управление потоком : Нет | | | | Какую настройку изменить? | +————————————————————————————————————+ | Экран и клавиатура | | Сохранить настройки как dfl | | Сохранить настройки как... | | Выход | | Выход из Minicom | +——————————————————+ |
Нажимаем 2 раза ENTER и выбираем «Сохранить настройки как…»
+——————[конфигурация]——————+ | Каталоги и файлы | | Протоколы | | Настройка последовательного порта | | Модем и дозвон | | Экран и клавиатура | | Сохранить настройки как dfl | | Сохранить настройки как... | | Выход | | Выход из Minicom | +——————————————————+ |
Вводим название профиля, нажимаем ENTER и выбираем пункт «Выход из Minicom»
Подключаемся к сохраненному профилю (я сохранил профиль как e1550):
В терминале, вводим команду AT, нажимаем ENTER, должен вернутся результат — «ОК«.
Обратите внимание, что символы, которые вводим, могут не отображаться на экране! Однако, после ввода команды и нажатия Enter, GSM-модем должен отобразить результат.
После успешного выполнения команды AT, выполним команду, которая переключит режим работы GSM-модем, в режим работы «только модем»:
Доступные режимы работы 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) добавляем следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[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 |
Понравилась или оказалась полезной статья, поблагодари автора
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Загрузка…
I’m trying to add some shell commands to automatically search for Makefile.am in my project autoconf (so that I don’t have to worry about forgetting to add an entry next time when there’s a new Makefile.am). But it does not seem to work. I’ve tried to create a minimum project setup to illustrate the problem. The project directory contains:
├── AUTHORS
├── ChangeLog
├── common.mk.in
├── configure.ac
├── COPYING
├── INSTALL
├── install-sh
├── Makefile.am
├── missing
├── NEWS
├── proj1
│ ├── Makefile.am
│ ├── module1
│ │ └── Makfile.am
│ └── module2
│ └── Makfile.am
├── proj2
│ ├── Makefile.am
│ ├── module1
│ │ └── Makfile.am
│ └── module2
│ └── Makfile.am
└── README
Most files here are empty, except:
———configure.ac———
AC_INIT([TEST], [1.0])
found_makefile_am=`find . -name 'Makefile.am' | sed -e 's/.am$//g' -e 's/^.///g' | sed ':a;N;$!ba;s/n/ /g'`
found_mk=`find . -name '*.mk.in' | sed -e 's/.am$//g' -e 's/^.///g' | sed ':a;N;$!ba;s/n/ /g'`
AM_INIT_AUTOMAKE
#AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])
AC_CONFIG_FILES([${found_makefile_am}])
AC_CONFIG_FILES([${found_mk}])
AC_OUTPUT
———proj*/Makefile.am———
SUBDIRS = module1 module2
Note that the line:
AC_CONFIG_FILES([${found_mk}])
works perfectly but this one:
AC_CONFIG_FILES([${found_makefile_am}])
Failed with:
$autoreconf -i
automake-1.12: error: no 'Makefile.am' found for any configure output
automake-1.12: Did you forget AC_CONFIG_FILES([Makefile]) in configure.ac?
autoreconf-2.69: automake failed with exit status: 1
And I had to replace it with:
AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])
It just seems to me that the shell variable is not properly expanded right before autoconfig invokes automake. So is there any solution to this problem?
В предыдущей статье шла речь об установке системы Asterisk версии 11 на сервер под управлением Ubuntu. Основным поводом установки 11 версии было то, что под 13 версию не существовало модуля chan_dongle. Теперь такой модуль есть, поэтому есть смысл написать заново, теперь уже о Asterisk 13, Debian и некоторых других удобных полезных функциях.
Данная инструкция описывает процесс установки телефонной системы Asterisk с модулями DAHDI, LibPRI, PJSip, SpanDSP, chan_dongle и дополнительными кодеками Opus и g729. Никаких WEB-интерфейсов и прочих утилит для конфигурирования и мониторинга системы данная инструкция не предусматривает. Это связано с тем, что автору приходилось неоднократно разбираться с конфигурационными файлами, сгенерированными автоматически при помощи FreeBPX и прочих подобных систем, что вызывало у автора сильную ненависть к подобным оболочкам. Поэтому, друзья, настраивайте все руками в конфигурационных файлах. Это не так сложно, зато работает как часы и разобраться намного проще.
Disclamer
Автор предупреждает читателей, о тонкой грани между допустимым использованием телефонных систем подобного рода и уголовной ответственностью, которая может наступить при неправильной маршрутизации телефонного трафика (рефайлинг). Пожалуйста, ознакомьтесь с законодательством Вашей страны, чтобы избежать проблем. Автор снимает с себя ответственность за любые действия читателя, в которых ему может помочь материал данной статьи и возлагает ее целиком и полностью на читателя данной статьи. Информация, приведенная в данной статье, является справочной и не носит практического характера.
Входные данные
#
Для написания статьи я создал тестовый виртуальный сервер под управлением Debian 8.4. Во время установки было выбрано следующее программное обеспечение: SSH-сервер и Стандартные системные утилиты. В боевой конфигурации рекомендуется выделить отдельный раздел диска для файлов записей разговоров, если это необходимо.
Версия Debian
Важное замечание: производите все действия по установке под учетной записью суперпользователя root. Не используйте sudo, так как это вызывает ошибки в некоторых случаях. Пожалуйста, не игнорируйте это замечание. Вы можете использовать команду:
либо разрешите на время установки доступ пользователю root через ssh, для чего в файле /etc/ssh/sshd_config установите параметр:
и перезапустите ssh-сервер
Установка зависимостей
#
apt-get update && apt-get upgrade && apt-get dist-upgrade
Далее скопируйте и вставьте целиком:
apt-get install -y build-essential
autoconf
libncurses5-dev
libssl-dev
libxml2-dev
libsqlite3-dev
libmysqlclient-dev
curl
mpg123
libxml2
libxml2-dev
libaudiofile-dev
subversion
sox
libsox-fmt-all
uuid-dev
libjansson-dev
libiksemel-dev
libssl-dev
libtiff5-dev
mysql-client
libmyodbc
lame
linux-headers-`uname -r`
После этой процедуры желательно перезагрузить сервер.
Установка DAHDI
#
Внимание! В большинстве инсталляций Вам не пригодится этот модуль. Он необходим только если у Вас есть оборудование, подключенное к данному серверу, которое взаимодействует с телефонной сетью посредством E1, T1 и т.п. Это разного рода PSTN/DAHDI-платы.
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
tar xvfz dahdi-linux-complete-current.tar.gz
rm -f dahdi-linux-complete-current.tar.gz
cd dahdi-linux-complete-*
make all
make install
make config
Результаты выглядят следующим образом:
DAHDI make
DAHDI make install
DAHDI make config
Установка LibPRI
#
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz
tar xvfz libpri-current.tar.gz
rm -f libpri-current.tar.gz
cd libpri-*
make
make install
Результаты выглядят следующим образом:
libpri make
libpri install
Установка PJSip
#
PJSIP мультимедийная библиотека с открытым кодом, для реализации протоколов SIP, SDP, RTP, STUN, TURN и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями. Подходит практически для любого типа систем, начиная от компьютеров и заканчивая встраиваемыми системами (embedded systems) и мобильными телефонами. Подробнее.
Скопируйте ссылку на загрузку последней версии с сайта www.pjsip.org и используйте в команде wget ниже:
cd /usr/src
wget http://www.pjsip.org/release/2.6/pjproject-2.6.tar.bz2
tar -xjvf pjproject-*.tar.bz2
rm -f pjproject-*.tar.bz2
cd pjproject-*
CFLAGS='-DPJ_HAS_IPV6=1' ./configure --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr
make dep
make
make install
Результаты выглядят следующим образом:
pjsip configure
pjsip make dep
pjsip make
pjsip make install
Установка SpanDSP
#
Данный модуль необходим для работы с факсами. Если поддержка факсов не нужна, то можно смело пропустить установку этого модуля.
Так как последняя версия spandsp была выпущена достаточно давно, то можно без проблем установить его из репозитория Debian.
apt-get install -y libspandsp2 libspandsp-dev
Либо же загрузите последнюю версию для установки вручную:
cd /usr/src
wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6pre21.tgz
tar vxfz spandsp-*.tgz
rm -f spandsp-*.tgz
cd spandsp-*
./configure
make clean
make
make install
Результаты выглядят следующим образом:
spandsp configure
spandsp make
spandsp makeinstall
Установка Asterisk 13
#
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
tar xvfz asterisk-13-current.tar.gz
rm -f asterisk-13-current.tar.gz
cd asterisk-13*
contrib/scripts/get_mp3_source.sh
contrib/scripts/install_prereq install
./configure
make menuselect
Результаты выглядят следующим образом:
asterisk install_prereq
asterisk configure — заветная звёздочка
Далее в конфигурационном меню необходимо выбрать по необходимости следующие компоненты:
- Add-ons: format_mp3
- Core Sound Packages: CORE-SOUNDS-EN-(WAV, ALAW, GSM, G729, G722), CORE-SOUNDS-RU-(WAV, ALAW, GSM,G729, G722)
- Extras Sound Packages: WAV, ALAW, GSM, G729 и G722
Как это выглядит на скриншотах:
Addons
Core Sound Packages
Extras Sound Packages
Продолжаем установку (процесс make занимает достаточно много времени).
Saples
#
Если это первая установка или у Вас еще нет базовых конфигурационных файлов, Вы можете их установить, выполнив make samples. Если Вы не понимаете, о чем идет речь, однозначно устанавливайте.
make
make install
make config
make samples
ldconfig
Результаты выглядят следующим образом:
asterisk make
asterisk make install
Установка кодека G729
#
Если кодек g729 не нужен — смело пропускаем.
G729 — узкополосный речевой кодек (вокодер), который применяется для эффективного цифрового представления узкополосной телефонной речи (сигнала телефонного качества).
Для начала нужно узнать, какой процессор используется в Вашем сервере:
grep -E 'model name|flags' /proc/cpuinfo
Внимание! Перед тем, как скачивать кодек, откройте сайт asterisk.hosting.lv, выберите подходящий под систему и процессор кодек, скопируйте ссылку на его загрузку и используйте именно эту ссылку в команде ниже! Это крайне важно!
wget -P /usr/lib/asterisk/modules/ -O codec_g729.so ссылка_на_загрузку
После установочная настройка
#
На этом основная установка системы окончена. Запустите Asterisk и убедитесь, что все в порядке:
/etc/init.d/asterisk start
ps ax | grep asterisk
asterisk -rvvvvvvvvvvddddddddddc
quit
/etc/init.d/asterisk stop
Если планируется использовать USB-модемы, то Asterisk желательно запускать от имени группы dialout, чтобы он имел доступ к устройствам USB.
adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk
usermod -a -G dialout,audio asterisk
Задаем права на каталоги:
chown -R asterisk:asterisk /var/lib/asterisk
chown -R asterisk:asterisk /var/log/asterisk
chown -R asterisk:asterisk /var/run/asterisk
chown -R asterisk:asterisk /var/spool/asterisk
chown -R asterisk:asterisk /usr/lib/asterisk
chown -R asterisk:asterisk /etc/asterisk
chmod -R u=rwX,g=rX,o= /var/lib/asterisk
chmod -R u=rwX,g=rX,o= /var/log/asterisk
chmod -R u=rwX,g=rX,o= /var/run/asterisk
chmod -R u=rwX,g=rX,o= /var/spool/asterisk
chmod -R u=rwX,g=rX,o= /usr/lib/asterisk
chmod -R u=rwX,g=rX,o= /etc/asterisk
Если Вы установили базовые конфигурационные файлы, то по умолчанию в них сконфигурирован английский язык (это влияет на речевые информаторы). Если желаете, можете изменяем язык на русский во всех файлах:
sed -i 's/defaultlanguage = en/defaultlanguage = ru/' /etc/asterisk/asterisk.conf
sed -i 's/;language=en/language=ru/' /etc/asterisk/*.conf
В файле /etc/default/asterisk раскомментируем две строчки и изменяем название группы:
AST_USER="asterisk"
AST_GROUP="dialout"
Запускаем Asterisk и смотрим, от какого пользователя он запустился:
/etc/init.d/asterisk start
ps aux | grep asterisk
Должно быть:
asterisk ps aux
Установка chan_dongle
#
Модуль chan_dongle необходим для работы с USB-модемами Huawei:
- K3715
- E169 / K3520
- E155X
- E175X
- K3765
Описываемая в данной статье версия является форком основного проекта, но основной проект не развивается с 2013 года и поддерживает только Asterisk 11. Впрочем, есть еще один форк той версии, что используется в данной статье. В связи с этим гарантировать работу модуля невозможно. Со списком известных багов можно ознакомиться по этой ссылке, но не ожидайте, что автор их исправит, так как этот список не обновлялся с 2011 года. Даже сам автор предупреждает, что модуль работает как попало и может назвонить вам куда нибудь и тем самым сожрать все ваши деньги или натворить еще что-то. Так что пожалуйста, прежде чем читать дальше, еще раз подумайте, стоит ли связываться с этим модулем. На сегодняшний день это единственный модуль, способный заставить дружить недорогие GSM-модемы с Asterisk и, скорее всего, у Вас нет выбора.
This channel driver is in alpha stage.
I am not responsible if this channel driver will eat your money on your SIM card or do any unpredicted things.
Модемы должны быть разлочены, проверка PIN-кода на SIM-карте должна быть отключена. Также необходимо обязательно отключить на модемах функции CR-ROM
и CARDREADER
, оставив модем только в режиме модема. Для этого необходимо подключиться к модему консолью и дать следующую АТ-команду:
Также желательно отключить на модеме ожидание вызова:
Установите необходимые для сборки chan_dongle пакеты:
apt-get install -y unzip automake autoconf
Далее загружаем форк chan_dongle под Asterisk 13, разархивируем, собираем, устанавливаем. Не обращаем внимание на строчку “automake: error: no ‘Makefile.am’ found for any configure output” — это не является ошибкой:
cd /usr/src
wget https://github.com/oleg-krv/asterisk-chan-dongle/archive/asterisk13.zip
unzip asterisk13.zip
rm -f asterisk13.zip
cd asterisk-chan-dongle-asterisk13
aclocal && autoconf && automake -a
./configure
make
make install
Результаты выглядят следующим образом:
dongle configure
dongle make install
Копируем конфигурационный файл dongle.conf:
cp etc/dongle.conf /etc/asterisk/
chown asterisk:asterisk /etc/asterisk/dongle.conf
chmod u=rwX,g=rX,o= /etc/asterisk/dongle.conf
Перезапускаем Asterisk, смотрим, загрузился ли модуль:
/etc/init.d/asterisk restart
asterisk -rvvvvvvvvvvddddddddddc
dongle show devices
Далее необходимо сделать так, чтобы модемам при подключении назначался верный владелец (чтобы Asterisk имел к ним доступ). Для этого создадим файл /etc/udev/rules.d/92-dongle.rules со следующим содержимым:
KERNEL=="ttyUSB*", MODE="0666", OWNER="asterisk", GROUP="dialout"
Затем перезапустим службу udev:
Теперь при подключении устройства типа ttyUSB, система автоматически назначит ему владельца asterisk и группу dialout.
Идентификация по IMSI или IMEI
#
В Файле /etc/asterisk/dongle.conf описываются все устройства. Синтаксис файла — общепринятый в Asterisk. Например, я опишу модем, в котором установлена SIM-карта оператора «Киевстар»:
[Kievstar]
imsi=255012321232123
imei=345654898756548
context=from-dongle
Идентификация устройства производится по IMSI и IMEI. Можно идентифицировать устройство только по одному из параметров. IMSI — это идентификатор SIM-карты, IMEI — это идентификатор терминала. Если Вам важно идентифицировать устройства по SIM-картам, тогда Вы можете указать только IMSI номера этих SIM-карт (написаны на картах), если же важно идентифицировать по терминалам, тогда указывайте IMEI терминала (написан на модеме).
Все входящие вызовы с такого устройства будут обработаны контекстом from-dongle
из файла extensions.conf или extensions.ael.
Исходящие вызовы через данный модем необходимо направлять на Dongle/Kievstar
.
Также в описании устройства можно указать exten=+380123456789
. В таком случае все входящие вызовы будут иметь указанный exten. В некоторых случаях это возможно понадобится.
Если идентификация по IMEI / IMSI не работает
#
В последней версии chan_dongle обнаружение устройств выполняется либо по идентификатору терминала (модема) — IMEI, либо по идентификатору абонента (SIM-карты) — IMSI. Если же по каким-то причинам Вам необходимо идентифицировать устройство по порту USB-контроллера, то используйте расширенную конфигурацию udev для присвоения псевдонимов портам, а затем эти псевдонимы можно использовать для определения модемов в dongle.conf.
Для привязки модемов по номеру порта контроллера USB, нужно определить адреса этих портов. Извлеките все модемы из сервера, затем запустите:
Вставляйте по одному модему и записывайте адреса портов контроллера, которые относятся к каждому из них. Затем в файл /etc/udev/rules.d/92-dongle.rules допишите псевдонимы для каждого из модемов, указав адреса контроллеров в качестве ID, подобно следующему:
KERNEL=="ttyUSB[0-9]*", ID=="1-1:1.1", SYMLINK+="Kievstar-audio"
KERNEL=="ttyUSB[0-9]*", ID=="1-1:1.2", SYMLINK+="Kievstar-data"
KERNEL=="ttyUSB[0-9]*", ID=="1-2:1.1", SYMLINK+="Vodafone-audio"
KERNEL=="ttyUSB[0-9]*", ID=="1-2:1.2", SYMLINK+="Vodafone-data"
KERNEL=="ttyUSB[0-9]*", ID=="1-3:1.1", SYMLINK+="Lifecell-audio"
KERNEL=="ttyUSB[0-9]*", ID=="1-3:1.2", SYMLINK+="Lifecell-data"
Как видно из примера, необходимы только два порта, вместо четырех.
Теперь в файле /etc/asterisk/dongle.conf вместо идентификации по IMEI и/или IMSI укажите идентификацию по портам USB следующим образом:
[Kievstar]
audio=/dev/Kievstar-audio
data=/dev/Kievstar-data
context=from-dongle
Однако этот метод определения модемов не является рекомендуемым, т.к. при случайной смене USB-порта либо вообще ничего не будет работать, либо Ваши вызовы пойдут не туда куда планировалось. Настоятельно рекомендуется использовать идентификацию по IMEI / IMSI.
На этом установка полностью завершена.
The symptoms are:
In file included from app.c:21:0:
/usr/include/asterisk/version.h:1:2: error: #error «Do not include ‘asterisk/version.h’; use ‘asterisk/ast_version.h’ instead.»
app.c: In function ‘app_register’:
app.c:162:3: warning: passing argument 2 of ‘ast_register_application2’ from incompatible pointer type [enabled by default]
In file included from app.c:20:0:
/usr/include/asterisk/module.h:458:5: note: expected ‘int (*)(struct ast_channel *, const char *)’ but argument is of type ‘int (*)(struct ast_channel *, void *)’
make: *** [app.o] Error 1
Solution:
- Download patched sources
- autoconf and autmake should be installed
- uzip sources
- cd to unzipped folder
- issue commands: aclocal, autoconf, automake -a
- install chan_dongle as usual ./configure, make, make install.
then I got next error
# sudo make install
./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
strip chan_dongle.so
/usr/bin/install -c -m 755 chan_dongle.so
/usr/bin/install: missing destination file operand after `chan_dongle.so’
Try `/usr/bin/install —help’ for more information.
make: *** [install] Error 1
Error because on chan_dongle installed on 64 bit OS. In that case DESTDIR should be: DESTDIR=»/usr/lib64/asterisk/modules
after that you can run asterisk console and load module:
CLI> module load chan_dongle.so
but then next error comes:
WARNING[24644]: chan_dongle.c:218 opentty: unable to open /dev/ttyUSB2: Permission denied
that because of wrong permissions.
That usually happens when asterisk running in non root mode. Set the correct permissions to /dev/ttyUSB
#chmod 666 /dev/ttyUSB*
after all chan_dongle is up and runnin, but after adding second dongle, problem with permissions comes back. The silution is to set permission automatically. Create file in /etc/udev/rules.d/92-dongle.rules
and add
KERNEL==»ttyUSB*», MODE=»0666″, OWNER=»asterisk», GROUP=»uucp»
Я пытаюсь добавить некоторые команды оболочки для автоматического поиска Makefile.am в autoconf моего проекта (так что мне не нужно беспокоиться о том, чтобы забыть добавить запись в следующий раз, когда появится новый Makefile.am). Но, похоже, это не работает. Я попытался создать минимальную настройку проекта, чтобы проиллюстрировать проблему. Каталог проекта содержит:
├── AUTHORS
├── ChangeLog
├── common.mk.in
├── configure.ac
├── COPYING
├── INSTALL
├── install-sh
├── Makefile.am
├── missing
├── NEWS
├── proj1
│ ├── Makefile.am
│ ├── module1
│ │ └── Makfile.am
│ └── module2
│ └── Makfile.am
├── proj2
│ ├── Makefile.am
│ ├── module1
│ │ └── Makfile.am
│ └── module2
│ └── Makfile.am
└── README
Большинство файлов здесь пусты, кроме:
———configure.ac———
AC_INIT([TEST], [1.0])
found_makefile_am=`find . -name 'Makefile.am' | sed -e 's/.am$//g' -e 's/^.///g' | sed ':a;N;$!ba;s/n/ /g'`
found_mk=`find . -name '*.mk.in' | sed -e 's/.am$//g' -e 's/^.///g' | sed ':a;N;$!ba;s/n/ /g'`
AM_INIT_AUTOMAKE
#AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])
AC_CONFIG_FILES([${found_makefile_am}])
AC_CONFIG_FILES([${found_mk}])
AC_OUTPUT
———проект*/Makefile.am———
SUBDIRS = module1 module2
Обратите внимание, что строка:
AC_CONFIG_FILES([${found_mk}])
работает отлично, но этот:
AC_CONFIG_FILES([${found_makefile_am}])
Не удалось с:
$autoreconf -i
automake-1.12: error: no 'Makefile.am' found for any configure output
automake-1.12: Did you forget AC_CONFIG_FILES([Makefile]) in configure.ac?
autoreconf-2.69: automake failed with exit status: 1
И мне пришлось заменить его на:
AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])
Мне просто кажется, что переменная оболочки не расширяется должным образом прямо перед тем, как autoconfig вызывает automake. Так есть ли решение этой проблемы?