Главная
Главная Руководства Asterisk › FreeBSD. Модем Huawei E1550 в Asterisk 13.



Автор:

Статья опубликована: 2016-06-01 19:58:49
Последние правки: 2021-11-29 00:30:23

FreeBSD. Добавляем модем Huawei E1550 в Asterisk 13.

В этой статье я не буду останавливаться на выборе и настройке самого модема, в интернете об этом есть куча статей, гугль вам в помощь. Запомните только следующее: в 4G(LTE) модемах нет голоса (нам такие не подходят) и модем необходимо подключать либо напрямую в usb-порт либо через активный хаб, никаких удлинителей.
После успешного подключения модем появится в /dev.
# ls -la | grep cua
crw-rw----   1 uucp  dialer    0x80 Feb 16 21:49 cuaU0.0
crw-rw----   1 uucp  dialer    0x81 Feb 16 21:49 cuaU0.0.init
crw-rw----   1 uucp  dialer    0x82 Feb 16 21:49 cuaU0.0.lock
crw-rw----   1 uucp  dialer    0x87 Feb 16 21:49 cuaU0.1
crw-rw----   1 uucp  dialer    0x88 Feb 16 21:49 cuaU0.1.init
crw-rw----   1 uucp  dialer    0x89 Feb 16 21:49 cuaU0.1.lock
crw-rw----   1 uucp  dialer    0x90 Feb 16 21:49 cuaU0.2
crw-rw----   1 uucp  dialer    0xac Feb 16 21:49 cuaU0.2.init
crw-rw----   1 uucp  dialer    0xad Feb 16 21:49 cuaU0.2.lock
crw-rw----   1 uucp  dialer    0x25 Feb 21 23:43 cuau0
crw-rw----   1 uucp  dialer    0x26 Feb  9 09:13 cuau0.init
crw-rw----   1 uucp  dialer    0x27 Feb  9 09:13 cuau0.lock
Добавляем пользователя asterisk в группу dialer
# pw groupmod dialer -m asterisk
  • chan_dongle
    Теперь необходимо добавить в астериск модуль chan_dongle. С помощью него возможно подключение и использование GSM модемов для входящих/исходящих звонков и СМС.
    Рабочий chan-dongle для asterisk13
    https://github.com/oleg-krv/asterisk-chan-dongle/tree/asterisk13
    Качаем zip-файл, распаковываем, затем в папке выполняем команды:
    # aclocal
    # autoconf
    # automake -a
    # ./configure
    # make install
    
    Файл chan_dongle.so должен появиться в /usr/local/lib/asterisk/modules

    Копируем dongle.conf из etc в папке с исходниками модуля в /usr/local/etc/asterisk. Поправляем. Я собираюсь использовать мегафоновскую симку. Редактируем /usr/local/etc/asterisk/dongle.conf (описания параметров можно посмотреть в этом же файле)
    [general]
    interval=15
    
    [megafon]
    context=megafon-incoming
    exten=+1234567890
    audio=/dev/cuaU0.1
    data=/dev/cuaU0.2
    group=1
    rxgain=2
    txgain=2
    resetdatacard=yes
    u2diag=0
    usecallingpres=yes
    callingpres=allowed_passed_screen
    disablesms=no
    
    • context=megafon-incoming - этот контекст будем указывать в extensions.conf для входящей связи
    • exten=+1234567890 - номер телефона сим-карты

    Заходим в шелл астериска и пробуем загрузить модуль, должно получиться что то вроде этого:
    # asterisk -rv
    CLI> module load chan_dongle
    Loaded chan_dongle
    [xxx xx xx:xx:xx] NOTICE[101526]: chan_dongle.c:1584 reload_config: [megafon] Loaded device
     Loaded chan_dongle.so => (Huawei 3G Dongle Channel Driver)
    
    Если при попытке загрузить модуль выскакивает ошибка:
    CLI> module load chan_dongle
    Unable to load module chan_dongle
    Command 'module load chan_dongle' failed.
    [xxx xx xx:xx:xx] WARNING[100846]: loader.c:595 load_dynamic_module: Error loading module 'chan_dongle': /usr/local/lib/asterisk/modules/chan_dongle.so: Undefined symbol "libiconv"
    [xxx xx xx:xx:xx] WARNING[100846]: loader.c:1079 load_resource: Module 'chan_dongle' could not be loaded.
    
    то вручную правим Makefile в папке с исходниками модуля
    LIBS = /usr/local/lib/libiconv.so
    
    Затем выполняем
    # make install
    
    Модуль установили, астериск его принял, проверяем из шелла:
    CLI> dongle show devices
    ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI             Number        
    megafon      1     GSM not re 10   5    4       NONE           E1550      11.608.12.00.143  XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX  Unknown
    

  • Исходящая связь
    /usr/local/etc/asterisk/extensions.conf Добавляем в [default] или в заданный вами контекст (у меня это [from-internal]). Самый простой диалплан:
    [from-internal]
    
    ; out call from mobile
    exten => _7XXXXXXXXXX,1,Dial(dongle/megafon/+${EXTEN},240,tT)
    
    
    • dongle/megafon - megafon - название нашего модема из /usr/local/etc/asterisk/dongle.conf
    • все звонки на номера, начинающиеся с 7 и содержащие после неё десять цифр, будут осуществляться через модем


  • Входящая связь
    /usr/local/etc/asterisk/extensions.conf
    [megafon-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.log)
    exten => sms,n,Hangup()
    
    [megafon-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} - ${CALLERID(num)}: ${BASE64_DECODE(${USSD_BASE64})}' >> /var/log/asterisk/ussd.log)
    exten => ussd,n,Hangup()
    
    [megafon-incoming]
    include => megafon-incoming-sms
    include => megafon-incoming-ussd
    exten => +1234567890,1,Set(${CALERID(num)})
    exten => +1234567890,n,Dial(SIP/NUMBER,60)
    exten => h,1,Hangup()
    
    • [megafon-incoming-sms] - принимаем SMS
    • [megafon-incoming-ussd] - принимаем USSD
    • [megafon-incoming] - диалплан, указанный в файле /usr/local/etc/asterisk/dongle.conf (context=megafon-incoming)
    • +1234567890 - номер, указанный в файле /usr/local/etc/asterisk/dongle.conf (exten=+1234567890)
    • NUMBER - номер из /usr/local/etc/asterisk/sip.conf, на который будут приходить все входящие звонки


  • Полезные вещи

    • [device] имя девайса dongle (поле ID из вывода команды "dondle show devices")


    -- Отправка sms из консоли:
    # asterisk -rx "dongle sms [device] [number] [message]"
    
    • номер телефона получателя смс
    • текст смс


    -- Если буфер модема переполнен (в логах появится сообщение "SMS storage is full"), то необходимо его очистить из консоли asterisk при помощи команд:
    - память SIM:
    > dongle cmd [device] AT+CPMS=\"SM\",\"SM\",\"SM\" 
    > dongle cmd [device] AT+CMGD=1,4
    
    - память модема:
    > dongle cmd [device] AT+CPMS=\"ME\",\"ME\",\"ME\" 
    > dongle cmd [device] AT+CMGD=1,4
    

    -- Перезапустить модем из консоли:
    > dongle restart now [device]