Очередной пост в интернете на тему создания дешевого GSM-шлюза на основе 3G модема от Huawei и IP PBX Asterisk.
Мануалов по настройке данной связки в интернете предостаточно, поэтому дання заметка больше для себя, нежели для других.
Что мы имеем:
– 3g модем от Киевстара на базе Huawei 1550 разлоченый под все, что только можно (MMC+ голос + видео+ любой оператор …) и купленый на aukro.ua
– сервер на базе Gentoo x64, kernel 2.6.38
– Asterisk 1.8.4.1
Для корректной работы модема требуется ядро выше 2.6.33. В моем случае запаса хватает
В самом ядре необходимо отметить такие пункты
Device Drivers ->
USB support --->
<*> OHCI HCD support
<*> USB Serial Converter support --->
[*] USB Generic Serial Driver
<*> USB driver for GSM and CDMA modems
Теперь заставим наш udev находить наше устройство, для этого пересоберем его с USE-флагом extras
cat /etc/portage/package.use
sys-fs/udev extras
emerge -1 sys-fs/udev
Устанавливаем пакет sys-apps/usb_modeswitch для смены режима модема с флешки на модем:
emerge sys-apps/usb_modeswitch
* usb_modeswitch можно поставить через emerge либо собрать руками (см.ниже)
Теперь наш модем после присоединения определяется как Huawei 1550:
gentoo-voip ~$ lsusb
Bus 001 Device 005: ID 12d1:140c Huawei Technologies Co., Ltd.
Вывод dmesg
[ 776.242262] hub 1-0:1.0: state 7 ports 6 chg 0000 evt 0004
[ 776.242274] ehci_hcd 0000:00:12.2: GetStatus port:2 status 001803 0 ACK POWER sig=j CSC CONNECT
[ 776.242284] hub 1-0:1.0: port 2, status 0501, change 0001, 480 Mb/s
[ 776.347217] hub 1-0:1.0: debounce: port 2: total 100ms stable 100ms status 0x501
[ 776.398252] ehci_hcd 0000:00:12.2: port 2 high speed
[ 776.398258] ehci_hcd 0000:00:12.2: GetStatus port:2 status 001005 0 ACK POWER sig=se0 PE CONNECT
[ 776.449205] usb 1-2: new high speed USB device using ehci_hcd and address 5
[ 776.501200] ehci_hcd 0000:00:12.2: port 2 high speed
[ 776.501205] ehci_hcd 0000:00:12.2: GetStatus port:2 status 001005 0 ACK POWER sig=se0 PE CONNECT
[ 776.571184] usb 1-2: default language 0x0409
[ 776.575184] usb 1-2: udev 5, busnum 1, minor = 4
[ 776.575187] usb 1-2: New USB device found, idVendor=12d1, idProduct=140c
[ 776.575190] usb 1-2: New USB device strings: Mfr=2, Product=1, SerialNumber=0
[ 776.575193] usb 1-2: Product: HUAWEI Mobile
[ 776.575195] usb 1-2: Manufacturer: HUAWEI Technology
[ 776.575276] usb 1-2: usb_probe_device
[ 776.575280] usb 1-2: configuration #1 chosen from 1 choice
[ 776.580185] usb 1-2: adding 1-2:1.0 (config #1, interface 0)
[ 776.580237] usbserial_generic 1-2:1.0: usb_probe_interface
[ 776.580242] usbserial_generic 1-2:1.0: usb_probe_interface - got id
[ 776.580293] option 1-2:1.0: usb_probe_interface
[ 776.580296] option 1-2:1.0: usb_probe_interface - got id
[ 776.580311] option 1-2:1.0: GSM modem (1-port) converter detected
[ 776.580332] usb 1-2: link qh2-0001/ffff880028675800 start 1 [2/0 us]
[ 776.580422] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB0
[ 776.580452] usb 1-2: adding 1-2:1.1 (config #1, interface 1)
[ 776.580484] usbserial_generic 1-2:1.1: usb_probe_interface
[ 776.580487] usbserial_generic 1-2:1.1: usb_probe_interface - got id
[ 776.580513] option 1-2:1.1: usb_probe_interface
[ 776.580516] option 1-2:1.1: usb_probe_interface - got id
[ 776.580523] option 1-2:1.1: GSM modem (1-port) converter detected
[ 776.580538] usb 1-2: link qh2-0001/ffff880028675c00 start 0 [2/0 us]
[ 776.580592] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB1
[ 776.580625] usb 1-2: adding 1-2:1.2 (config #1, interface 2)
[ 776.580654] usbserial_generic 1-2:1.2: usb_probe_interface
[ 776.580657] usbserial_generic 1-2:1.2: usb_probe_interface - got id
[ 776.580683] option 1-2:1.2: usb_probe_interface
[ 776.580686] option 1-2:1.2: usb_probe_interface - got id
[ 776.580693] option 1-2:1.2: GSM modem (1-port) converter detected
[ 776.580752] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB2
[ 776.580770] usb 1-2: adding 1-2:1.3 (config #1, interface 3)
[ 776.580802] usbserial_generic 1-2:1.3: usb_probe_interface
[ 776.580804] usbserial_generic 1-2:1.3: usb_probe_interface - got id
[ 776.580830] option 1-2:1.3: usb_probe_interface
[ 776.580833] option 1-2:1.3: usb_probe_interface - got id
[ 776.580840] option 1-2:1.3: GSM modem (1-port) converter detected
[ 776.580898] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB3
[ 776.580916] usb 1-2: adding 1-2:1.4 (config #1, interface 4)
[ 776.581175] usbserial_generic 1-2:1.4: usb_probe_interface
[ 776.581175] usbserial_generic 1-2:1.4: usb_probe_interface - got id
[ 776.581213] usbtest 1-2:1.4: usb_probe_interface
[ 776.581216] usbtest 1-2:1.4: usb_probe_interface - got id
[ 776.581234] usb 1-2: adding 1-2:1.5 (config #1, interface 5)
[ 776.581264] usbserial_generic 1-2:1.5: usb_probe_interface
[ 776.581266] usbserial_generic 1-2:1.5: usb_probe_interface - got id
[ 776.581302] usbtest 1-2:1.5: usb_probe_interface
[ 776.581305] usbtest 1-2:1.5: usb_probe_interface - got id
[ 776.581349] drivers/usb/core/inode.c: creating file '005'
Ставим софт
mkdir work
cd work
svn co http://www.makhutov.org/svn/chan_datacard/trunk/ chan_datacard
cd chan_datacard/
./configure
make install
cp etc/datacard.conf /etc/asterisk
Ниже описана сборка usb_modeswitch руцями если кому не понравилось то, что собралось штатными средствами Gentoo 🙂
wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.1.8.tar.bz2
tar -jxvf usb-modeswitch-1.1.8.tar.bz2
cd usb-modeswitch-1.1.8
make install
wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20110705.tar.bz2
tar -jxvf usb-modeswitch-data-20110705.tar
cd usb-modeswitch-data-20110705
make install
Проверяем опознался ли наш модем:
ls /dev | grep USB
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2
/dev/ttyUSB3
Настраиваем модем под Asterisk…. громко звучит …. я оставил дэфолный конфиг поменяв только номер устройства на /dev/ttyUSB2
cat datacard.conf
......
[E1550_t](!)
context=incoming-datacard ; context for incoming calls
rxgain=3 ; increase the incoming volume
txgain=-3 ; increase the outgoint volume
autodeletesms=yes ; auto delete incoming sms
resetdatacard=yes ; reset datacard during initialization
u2diag=0 ; set U2DIAG parameter (0 = disable everything except modem function)
[datacard0](E1550_t)
audio=/dev/ttyUSB2 ; tty for audio connection
data=/dev/ttyUSB3 ; tty for AT commands
group=1 ; calling group
Перезапускаемся
asterisk*CLI> core restart now
Смотрим, что было найдено Asterisk’ом
asterisk*CLI>datacard show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
datacard0 1 SMS 23 0 0 UTEL3G E1550 11.608.14.11.174 35244504378**** 25507104005**** +38091999*****
Пробуем совершить тестовый звонок и оправить смс:
cat extensions.conf
exten => 1006,1,Dial(Datacard/g1/063598****)
exten => 1006,n,Hangup()
exten => 1007,1,Answer
exten => 1007,n,DatacardSendSMS(datacard0,063598****,hello world)
exten => 1007,n,Playback(beep)
exten => 1007,n,Hangup()
Настраиваем получение SMS и ussd
[incoming-datacard]
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD} - ${CALLERID(num)}: ${SMS}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()
exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD}: ${USSD}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()
Вот собственно и все
Сповіщення: chan_dongle + asterisk 10