HowTo: Usar el móvil de manera remota con Asterisk y chan_sebi

Supongamos que por alguna razón vamos a estar ausentes de nuestra tierra una temporada y no queremos gastarnos una pasta en roaming pero queremos que nuestra gente siga pudiendo llamarnos.

Lo primero que necesitamos es algo con lo que hacer y recibir llamadas y SMS. Ese algo es Asterisk con chan_sebi, un canal que ha desarrollado Odicha, un grande del bare metal.

Muchos modems USB soportan el envio de SMS, pero necesitamos uno que soporte tambien voz. En mi caso utilice el Huawei K3520, que puede encontrarse en eBay por unos 50-70 euros.

Manos a la obra!

Lo primero es descargar y compilar el codigo, que se encuentra en el repositorio RSP:

svn co http://asterisk-es-rsp.irontec.com/svn/asterisk-es-rsp/
cd branches/asterisk/1.4.24
./configure && make && make install
make samples && make config

ahora instalamos los asterisk-addons de Odicha, los que tienen chan_sebi 🙂

cd team/Odicha/1_4/asterisk-addons-1.4.9
./configure && make menuselect (marcamos chan_sebi)
make install && make samples

Una vez lo tenemos instalado vamos a configurar chan_sebi editando el fichero /etc/asterisk/sebi.conf:

[huawei1]
imei=3534xxxxxxxx ; imei of modem
;pin=12345678 ; pin (use only if sim card has pin request enabled)
csca=+34607003110 ; SMS centre number (Vodafone ES - example)
sms=yes ; Enable sms send/receive
voice=yes ; Enable voice for calls
context=from-sebi ; dialplan context for incoming calls
group=1 ; this phone is in channel group 1
volume=5 ; Modem Volume (1-5)
language=es ; Channel language
;nocallsetup=yes ; set this only if you want override call status notifications
;hidecid=#31# ; if you want outbound calls without caller id
;noincomingcalls=yes ; Reject all voice incoming calls

Solo tenemos que ajustar el IMEI, PIN, numero de servicio de SMS y contexto.

Ahora vamos a crear un sencillo dialplan para hacer/recibir llamadas y SMS:

[from-sebi]
; Incoming calls
exten => s,1,NoOp(Incoming call from ${CALLERID(num)})
exten => s,n,Dial(SIP/saghul,60))
exten => s,n,Hangup
; Incomming SMS
exten => sms,1,NoOp(Incoming SMS from ${SMSSRC})
exten => sms,n,System(/usr/local/bin/recvSMS.sh "${SMSSRC}" "${SMSTXT}")
exten => sms,n,Hangup
[from-ast16]
exten => _6XXXXXXXX,1,NoOp(Outgoing call through the SEBI device to ${EXTEN})
exten => _6XXXXXXXX,n,Dial(Sebi/g1/${EXTEN},60)
exten => _6XXXXXXXX,n,Hangup

Con esto ya podremos hacer y recibir llamadas, pero para los SMS vamos a hacer algo mas elegante:

Utilizaremos el script recvSMS.sh, que nos mandara un email con el asunto «SMS from 6123123123» a la dirección de email que le indiquemos. Y para rizar el rizo, utilizaremos el script readMail.py cada minuto en el cron,  para que si respondemos al email del SMS esa respuesta se convierta en SMS. How cool is that?!

Para finalizar, si no teneis instalado ningun servidor de correo podeis instalar ssmtp y utilizarlo con una cuanta de GMail por ejemplo. Es tan facil como esto:

remote-mobile:~# cat /etc/ssmtp/ssmtp.conf
root=tu_email@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=tu_email@gmail.com
UseSTARTTLS=YES
AuthUser=tu_usuario_de_gmail
AuthPass=tu_clave_de_gmail
FromLineOverride=YES

y esto:

remote-mobile:~# cat /etc/ssmtp/revaliases
root:saghul.movil@gmail.com:smtp.gmail.com:587

Enjoy! 😉

PD: Manwe y amigos de la RAE: perdón por los acentos y tal, ando en precario a nivel de teclados y el autocorrector no es que mole mucho… 🙂

19 thoughts on “HowTo: Usar el móvil de manera remota con Asterisk y chan_sebi

  1. te acuerdas de lo que decía Julian?

    Y si te mando un sms que diga (comillas incluidas)?

    » > /etc/passwd && reboot && echo «

  2. Con esas comillas nada. Con comillas francesas igual colaria, pero bueno, que esto es un PoC, no la manera de salvar el mundo 🙂 Aunque buena cazada, habría que escapar el contenido del SMS para que no tuviera nada raro…

  3. Aupa Iker!

    Jeje, es cierto, pero para alertas txorras caseras el ssmtpd funciona en 1 minuto, y Postfix se me da fatal… 😉

  4. Hola

    Llevo bastantes horas peleándome con la compilación y no salgo de ahí.

    Me bajo las fuentes de svn export http://asterisk-es-rsp.irontec.com/svn/asterisk-es-rsp/team/Odicha/1_4/asterisk-addons-1.4.9 asterisk-addons

    Realizo el configure y menuselect sin problemas pero al empezar a compilar me da el siguiente error y de ahi no avanzo.
    # make
    menuselect/menuselect –check-deps menuselect.makeopts
    Generating embedded module rules …
    [CC] chan_sebi.c -> chan_sebi.o
    chan_sebi.c:169: warning: initialization from incompatible pointer type
    chan_sebi.c:169: warning: initialization from incompatible pointer type
    chan_sebi.c: In function ‘modem_read’:
    chan_sebi.c:646: error: incompatible types in assignment
    chan_sebi.c:648: error: incompatible type for argument 2 of ‘read’
    chan_sebi.c: In function ‘modem_write’:
    chan_sebi.c:700: error: incompatible type for argument 2 of ‘memcpy’
    chan_sebi.c:709: error: invalid operands to binary + (have ‘union ’ and ‘int’)
    chan_sebi.c: In function ‘modem_drv_config’:
    chan_sebi.c:1548: error: ‘ast_config_AST_CONFIG_DIR’ undeclared (first use in this function)
    chan_sebi.c:1548: error: (Each undeclared identifier is reported only once
    chan_sebi.c:1548: error: for each function it appears in.)
    chan_sebi.c:1668:45: error: macro “ast_config_load” requires 2 arguments, but only 1 given
    chan_sebi.c: In function ‘modem_load_config’:
    chan_sebi.c:1668: error: ‘ast_config_load’ undeclared (first use in this function)
    chan_sebi.c:1672:36: error: macro “ast_config_load” requires 2 arguments, but only 1 given
    chan_sebi.c:1773: error: ‘DSP_FEATURE_DTMF_DETECT’ undeclared (first use in this function)
    make[1]: *** [chan_sebi.o] Error 1
    make: *** [channels] Error 2

    Tengo la versión 1.6.1.9 de Asterisk, por si aclara algo.

    Gracias

  5. Y pregunta de novato novatisimo, ¿Que tengo que hacer para pasar a 1.4? ¿Tengo que desinstalar la 1.6? o ¿solo compilar la version 1.4 e instalarla?

    Gracias

  6. Bueno, tengo todo instalado pero algo me falla y no pordonde cojerlo.

    mi fichero sebi_devices.conf
    [2-2]
    data = /dev/ttyUSB1
    imei = 358192019xxxxxx

    Mi fichero sebi.conf
    huawei1]
    imei=358192019xxxxxx ; imei of modem
    ;pin=123456 ; pin (use only if sim card has pin request enabled)
    csca=+34644109030 ; SMS centre number (SIMYO)
    sms=yes ; Enable sms send/receive
    voice=yes ; Enable voice for calls
    context=from-sebi ; dialplan context for incoming calls
    group=1 ; this phone is in channel group 1
    volume=5 ; Modem Volume (1-5)
    language=es ; Channel language
    ;nocallsetup=yes ; set this only if you want override call status notifications
    ;hidecid=#31# ; if you want outbound calls without caller id
    ;noincomingcalls=yes ; Reject all voice incoming calls

    Arranco todo y si miro los devices me da esto:
    ID IMEI Group Provider Connected State Voice SMS
    huawei1 358192019xxxxxx 1 No Init No No

    Por lo que deduzco que no se ha conectado, se me ocurre que el OS (openSUSE 11.1) lo haya pillado.

    Si miro dmesg me da esto:
    usb 2-2: New USB device found, idVendor=12d1, idProduct=1003
    usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    usb 2-2: Product: HUAWEI Mobile
    usb 2-2: Manufacturer: HUAWEI Technologies
    usb-storage: device found at 10
    usb-storage: waiting for device to settle before scanning
    usb 2-2: USB disconnect, address 10
    usb 2-2: new full speed USB device using uhci_hcd and address 11
    usb 2-2: configuration #1 chosen from 1 choice
    usb-storage: probe of 2-2:1.0 failed with error -5
    option 2-2:1.0: GSM modem (1-port) converter detected
    usb 2-2: GSM modem (1-port) converter now attached to ttyUSB0
    usb-storage: probe of 2-2:1.1 failed with error -5
    option 2-2:1.1: GSM modem (1-port) converter detected
    usb 2-2: GSM modem (1-port) converter now attached to ttyUSB1
    scsi20 : SCSI emulation for USB Mass Storage devices
    usb 2-2: New USB device found, idVendor=12d1, idProduct=1003
    usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    usb 2-2: Product: HUAWEI Mobile
    usb 2-2: Manufacturer: HUAWEI Technologies
    usb-storage: device found at 11
    usb-storage: waiting for device to settle before scanning
    scsi 20:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2
    sr0: scsi-1 drive
    sr 20:0:0:0: Attached scsi CD-ROM sr0
    sr 20:0:0:0: Attached scsi generic sg2 type 5
    usb-storage: device scan complete

    Bueno, no se te dice algo, pero a mi no 🙁

    Gracias

  7. @Jose: Tienen que salirte 3 ttys… pregunta en Asterisk-ES, que bastante gente lo ha probado, alguno igual con openSUSE, yo solo con Debian 🙂

  8. Solo en el caso de los E169 que tienen voz salen los tres tty.
    En el caso de los E220 y los E270 solo saldrán dos puertos. Solo servirán para enviar sms.

  9. Muchas gracias saghul. Estoy trabajando en un proyecto personal que requiere una esta funcionalidad, y nunca había pensado que se podría hacer con asterisk.

    Mil gracias por abrirme los ojos 🙂

  10. Hola de nuevo,

    estoy intentando automatizar la instalación generando un ebuild para gentoo. Pero tengo un problemilla. La cosa está en que hay que realizar el make menuselect, lo cual requiere interacción con el usuario. ¿Sabríais decirme donde se guarda/genera el fichero que almacene el listado de modulos a instalar?

    Un saludo

  11. Me autocontesto:

    # If the file .asteriskaddons.makeopts is present in your home directory, you can
    # include all of your favorite menuselect options so that every time you download
    # a new version of Asterisk-addons, you don’t have to run menuselect to set them.
    # The file /etc/asteriskaddons.makeopts will also be included but can be overridden
    # by the file in your home directory.

  12. @Alex: la idea es dejar esto en tu pais y cuando estes en el extranjero recibir las llamadas por SIP… así si que no hay roaming.

  13. Ojo con el paquete ssmtp que tiene un bug no corregido desde hace mucho tiempo. Lo he sufrido en mis propias carnes al usar ssmtp para que un servidor enviase bastantes correos a través de un relay SMTP.
    Cuando el correo es muy grande ssmtp peta con «buffer overflow». Confirmado en Debian Lenny así como en otras distros.

  14. Amigos del blog, se me presento este problema y necesito de su ayuda.
    Estoy queriendo hacer unas pruebas con un discador predictivo, me decidí a usar elastix ya que no soy un experto en Asterik.
    Tengo un modem Huawei E176 que el linux me lo detectaba como 12d1:1003 y el chan_sebi (siguiendo esta magnifica guia) lo detectaba sin «Voice Features».

    [root@elastix ~]# lsusb
    Bus 001 Device 002: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem

    ___________________________________________
    [root@elastix ~]# ls /dev/ttyUSB* -la
    crw-r–r– 1 root root 188, 0 May 25 14:47 /dev/ttyUSB0
    crw-r–r– 1 root root 188, 1 May 25 14:47 /dev/ttyUSB1
    crw-r–r– 1 root root 188, 2 May 25 12:42 /dev/ttyUSB2

    ___________________________________________

    elastix*CLI> sebi show devices
    ID IMEI Group Provider Connected State Voice SMS
    huawei1 355851027XXXXXX 1 Personal Yes Free No Yes
    ____________________________________________

    [root@elastix ~]# vi /etc/asterisk/sebi_devices.conf
    [1-1]
    data = /dev/ttyUSB1
    imei = 355851027XXXXXX
    ___________________________________________

    Hasta acá todo bien, lo único que no podía era hacer llamadas de voz, pero leyendo en la web, encuentro que el E176 soporta Voice, y que estaba bloqueado por soft.
    Así que busco como desbloquearlo y después del desbloqueo….
    Ya no me lo detecta como 12d1:1003 sino que ahora lo detecta como 12d1:140c
    _____________________________________________________
    [root@elastix ~]# lsusb
    Bus 001 Device 003: ID 12d1:140c Huawei Technologies Co., Ltd.
    ______________________________________________________

    Y no veo ningún ttyUSB, entones corro los siguientes comandos y me lista 6 ttyUSB
    _________________________________________________________
    modprobe -r option
    modprobe -r usb_storage
    modprobe -r usbserial
    modprobe usbserial vendor=0x12d1 product=0x140c
    _________________________________________________________

    [root@elastix ~]# ls /dev/ttyUSB* -la
    crw-rw—- 1 root uucp 188, 0 May 25 15:06 /dev/ttyUSB0
    crw-rw—- 1 root uucp 188, 1 May 25 15:06 /dev/ttyUSB1
    crw-rw—- 1 root uucp 188, 2 May 25 15:09 /dev/ttyUSB2
    crw-rw—- 1 root uucp 188, 3 May 25 15:06 /dev/ttyUSB3
    crw-rw—- 1 root uucp 188, 4 May 25 15:06 /dev/ttyUSB4
    crw-rw—- 1 root uucp 188, 5 May 25 15:06 /dev/ttyUSB5

    Por lo que estuve leyendo el chan_sebi.so solo funciona con idProduct 1001 y 1003.
    Se me ocurrieron 2 ideas:
    1) Cambiar via udev el idProduct, cosa que todavía no pude hacer por falta de conocimientos,
    2) Modificar el source del chan_sebi.c y reemplazar todo lo que decia 1001 por 140c.
    Lo compile y lo carge en el asterisk

    Ahora pasa esto cuando edito el sebi_devices.conf

    [root@elastix ~]# vi /etc/asterisk/sebi_devices.conf
    [1-1]
    data = /dev/ttyUSB2
    imei = ERROR
    voice = /dev/ttyUSB1
    ______________________________________________________________

    Y ahí ya no se mas que hacer, necesito de su ayuda
    Gracias!

  15. se trata de una aplicación muy interesante, sin duda. Esto trae muchas ventajas directas en la constitución primaria de un servicio lógico y bien organizado de telefonía avanzada; recordemos por ejemplo los call center y las demás manifestaciones telefónicas solventes

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *