Archivo de la etiqueta: ElastixWorld

ElastixWorld 2015: De SIP a WebRTC y vice versa

Si, si hace un mes del tema, ¡lo se! Pero he estado de vacaciones hasta el pasado domingo 🙂

El ElastixWorld 2015 ha sido increíble, como de costumbre, estos chicos consiguen seguir superándose año a año. No voy a poder comentarlo tan elocuentemente como Elio lo ha hecho en su blog, asi que mejor vais allí a leer todo sobre como fue el ElastixWorld 2015.

A continuación os dejo mi presentación “De SIP a WebRTC y vice versa”. En ella comente cual es nuestra idea sobre WebRTC y como aplicarlo en redes SIP tradiciones. Presentamos SylkServer 3, que incluye un gateway a WebRTC.


Podéis leer mas acerca del gateway aquí, y probarlo directamente con una cuenta de SIP2SIP aquí.

¡Nos vemos en Buenos Aires para el ElastixWorld 2016!

Añadiendo soporte de GPIO a Asiri

Si tuviste la suerte de recibir una placa Asiri en ElastixWorld, y seguiste la guía que escribí ayer, deberías tener una placa Asiri con uElastix funcionando sin problemas. Mola y todo eso, pero hoy en día los puertos GPIO son la moda, y como Asiri no tiene pues tenemos que hacer algo al respecto.

Antes de empezar, y para que quede claro, ¿qué es GPIO? La Wikipedia nos ayuda:

GPIO (General Purpose Input/Output = Entrada/Salida de Propósito General) es un pin genérico en un chip, cuyo comportamiento (incluyendo si es un pin de entrada o salida) se puede controlar (programar) por el usuario en tiempo de ejecución.

Vamos al lío. Lo primero que hice al recibir mi Asiri fue ir a la página web para ver que clase de puertos y conectores tenía, y me llevé una agradable sorpresa al ver que disponía de un puerto I2C:

asiri-board

 

La placa Asiri que me tocó a mi no tenía soldado un header en el puerto I2C, así que lo primero que tenemos que hacer es soldar un header de 4 pines para facilitar las conexiones:

asiri-header1

 

Así quedará con los cables conectados:

asiri-header2

 

I2C es un bus de comunicaciones en serie, y gracias a mis aventuras con el hardware ya conocía la manera de utilizarlo para GPIO, con la ayuda de un chip MCP230xx.

Los chips MCP23008 y MCP23017 son unos circuitos integrados muy baratos (menos de $2) que nos ofrecen 8 y 16 puertos GPIO respectivamente y se conectan a otro circuito mediante I2C, así que parece que estamos de suerte. Yo tengo un MCP23017 (el de 16 puertos GPIO) así que usaré ese para los ejemplos aquí expuestos. Veamos el chip:

mcp23017-pinout

 

Para funcionar con él, realizaremos las siguientes conexiones en nuestro breadboard:

  • A0, A1, A2: GND. Con estos pines se controla la identificación del chip en el bus I2C, ya que es posible encadenar varios. En éste caso conectamos todos a GND porque solo tenemos un chip.
  • RESET: +3.3V. La línea reset ha de estar conectada a voltaje positivo.
  • VDD: +3.3V.
  • VSS: GND.
  • SDA: conectado al pin SDA del puerto I2C de Asiri.
  • SCL: conectado el pin SCL del puerto I2C de Asiri.

Los 16 puertos GPIO del chip se reparten en 2 bancos de 8, numerados GPA0-7 y GPB0-7.

Una vez hemos realizado las conexiones necesarias, vamos a ver si el sistema detecta el chip. Para ello vamos a cargar el módulo del kernel necesario e instalar el paquete de herramientas de manejo del puerto I2C:

modprobe i2c-dev
yum install i2c-tools

 

Vemos si el kernel ha creado el dispositivo I2C en /dev:

[root@uelx ~]# ls -l /dev/i2c*
crw------- 1 root root 89, 1 Dec 31  1999 /dev/i2c-1
[root@uelx ~]#

 

¡Parece que si! A ver si vemos el chip…

[root@uelx ~]# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[root@uelx ~]#

 

Yeah, ahí está, en la dirección 0x20. Ahora vamos a montar un pequeño circuito con un LED para probar si la cosa realmente funciona:

Asiri-MCP23017_bb

Vamos a utilizar la herramienta i2cset del paquete i2c-tools que instalamos antes para encender y apagar el LED:

# configurar GPB0 como salida
i2cset -y 1 0x20 0x01 0x00
# activar GPB0, encender el LED
i2cset -y 1 0x20 0x13 0x01
# apagar el LED
i2cset -y 1 0x20 0x13 0x00

 

Si todo ha ido bien, deberíais ver que el LED se enciende con la segunda instrucción y se apaga con la tercera.

Como manejar el asunto así es un poco tedioso, he hecho una pequeña librería para el manejo de GPIO en Asiri con Python: python-asiri.

La librería depende del módulo smbus, que desafortunadamente no está disponible en los repositorios de Fedora Core 17, pero no pasa nada, vamos a compilarlo a mano:

wget http://dl.lm-sensors.org/i2c-tools/releases/i2c-tools-3.1.0.tar.bz2
tar jxvf i2c-tools-3.1.0.tar.bz2
cd i2c-tools-3.1.0
export CFLAGS="-I`pwd`/include"
cd py-smbus
python setup.py build
python setup.py install

 

Y ahora ya podemos instalar python-asiri:

yum install git
git clone https://github.com/saghul/python-asiri
cd python-asiri
python setup.py install

 

En el directorio examples podéis encontrar un ejemplo de LED que parpadea y otro con un botón. Si habéis creado el circuito igual que en el diagrama de arriba, tendréis el LED conectado el puerto GPB0, es decir, el 8, por lo que el ejemplo funciona sin modificaciones:

cd examples
python blink.py

 

Si todo ha ido bien deberíais ver el LED parpadeando a intervalos de 1 segundo, hasta que pulséis Ctrl-C. ¡Lo hemos conseguido!

Y ahora os toca, ¿qué vais a construir con Asiri?

Instalando uElastix en Asiri

Uno de los regalitos que me traje del ElastixWord fue una placa Asiri, la placa utilizada en el appliance Elastix microUCS. El hardware no es extremadamente potente, tiene un procesador a 450 MHz con juego de instrucciones ARMv5 y 256 MB de RAM, pero aguanta el tirón, así que vamos a meterle mano 🙂

La única opción disponible a día de hoy es instalar uElastix, que está basado en Fedora 17, así que vamos a ello. Las instrucciones incluidas son bastante precisas, pero tuve un problemilla que no esperaba, así que espero que este post ayude a aquellos que hayan podido tener el mismo problema.

Antes de comenzar, necesitaremos una tarjeta SD de 4GB. No me seáis cutres y uséis una de los chinos, que sea de clase 10.

Paso 1: Particionar la tarjeta SD

Es necesario crear 2 particiones, una en formato FAT con al menos 16 MB, y otra EXT3 con el resto. Yo por si acaso he creado la FAT de 128 MB, que tampoco pasa nada.

Para este paso podemos usar fdisk, asumiendo que el dispositivo ha sido detectado como /dev/sdd:

fdisk /dev/sdd

Así es como quedaría tras crear las particiones:

Disk /dev/sdd: 3965 MB, 3965190144 bytes
4 heads, 16 sectors/track, 121008 cylinders, total 7744512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device      Boot    Start    End      Blocks    Id    System
/dev/sdd1   *       2048     264191   131072    e     W95 FAT16 (LBA)
/dev/sdd2           264192   7744511  3740160   83    Linux
[root@uelx ~]#

 

Paso 2: Formatear las nuevas particiones

Tenemos que formatear las particiones con su sistema de ficheros correspondiente:

mkfs.vfat -n BOOT /dev/sdd1
mkfs.ext3 -L rootfs /dev/sdd2

 

Paso 3: Copiar los ficheros de sistema

Primero vamos a descargar la versión correspondiente a Asiri de la página de uElastix.

A continuación descomprimimos el fichero, que contiene 2 ficheros comprimidos, y los descomprimimos en las particiones correspondientes:

mkdir elastix-arm
tar -C elastix-arm xvf elastix-arm-2013-10-25.tar
cd elastix-arm
mount /dev/sdd1 /mnt
tar -C /mnt -xzf BOOT.tar.gz
umount /mnt
mount /dev/sdd2 /mnt
tar -C /mnt -xzf rootfs.tar.gz
umount /mnt

En este momento ya podemos introducir la tarjeta SD en Asiri y conectar el cable ethernet y el de corriente. No guardéis muy lejos el lector de tarjetas SD, puede que nos haga falta de nuevo.

 

Paso 4: Acceso por SSH

Por defecto Asiri viene configurada en la IP 192.168.1.251. Si vuestra red no es la 192.168.1.0/24 podéis crear un alias:

ifconfig eth0:0 192.168.1.123/24 up

Aquí es posible que tengáis un problema: no funciona el acceso SSH. De hecho, al hacer un nmap no muestra ni el puerto abierto:

Host is up (0.0037s latency).
Not shown: 989 closed ports
PORT     STATE SERVICE
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap
443/tcp  open  https
993/tcp  open  imaps
995/tcp  open  pop3s
2000/tcp open  cisco-sccp
3306/tcp open  mysql
4445/tcp open  upnotifyp

Nmap done: 1 IP address (1 host up) scanned in 1.61 seconds

Tras analizar el syslog, el problema parece ser que SSH tarda demasiado en crear las claves en su primera ejecución, y systemd decide matarlo, así que decidí copiar las mías de manera temporal, para que al menos el demonio arranque y podamos entrar. Para ello sacamos la tarjeta SD y la volvemos a colocar en el host donde hemos estado preparándola anteriormente:

mount /dev/sdd2 /mnt
cp /etc/ssh/ssh_host* /mnt/etc/ssh/
umount /mnt

Volvemos a poner la tarjeta SD en Asiri, y ya debería funcionar. A partir de este momento podemos acceder a la interfaz web de configuración para cambiar la configuración de red, instalar módulos adicionales, etc:

uelastix

Si aún así no funciona lo mejor es correr en círculos un rato y posteriormente sentarse en un rincón a llorar 😛

En el siguiente post veremos cómo añadir soporte GPIO a nuestra placa Asiri, ¡estad atentos!

ElastixWorld: OpenSIPS Workshop

Además de nuestras respectivas presentaciones, Adrian y yo tuvimos la ocasión de impartir un workshop sobre OpenSIPS.

OpenSIPS no es precisamente fácil de aprender, ya que ofrece control a muy bajo nivel, por lo que nos esperábamos una asistencia bastante reducida. Cual fue nuestra sorpresa cuando vimos que no paraba de venir gente y que muchos incluso estaban de pie escuchando, ¡gracias a todos los asistentes!

opensips_workshop

Para los que no pudieron estar, aquí está la presentación que utilizamos, en la que comentamos algunas buenas prácticas para la administración de OpenSIPS, seguridad, etc.


De nuevo, gracias a todos los asistentes y a la organización, ¡el año que viene habrá más!

ACTUALIZACIÓN: Gracias a Eternal por grabar el vídeo, aqúi lo tenéis en YouTube:

ElastixWorld: Proyecto Open Pi Phone

Acaba de terminal la edición de 2013 de ElastixWorld y no podría estar más contento (ni más cansado), el evento ha sido increíble y la respuesta a las presentaciones que he tenido la oportunidad de compartir ha sido abrumadora.

Ayer prenseté el proyecto en el que he estado trabajando junto a mi compañero de trabajo Tijmen: Proyecto OP^2: Open Pi Phone.

El proyecto Open Pi Phone ha consistido en el desarrollo de un firmware basado en Debian para dispositivos embebidos con el que poder hacer un terminal SIP hardware. El primer prototipo lo hemos llamado Falcon y está basado en una placa Raspberry Pi, con un diseño un tanto peculiar 😉

El código esta disponible en GitHub.

Aqui tenéis las transparencias:


El prototipo Falcon en acción:

Y por ultimo, el video de presentación:

Espero volver a acudir el año que viene, si no habéis estado en ElastixWorld anteriormente id buscando una excusa para ir en 2014 🙂

¿Qué hace falta para construir un Skype?

Aquí os dejo las transparencias que utilicé para mi charla en el VoIP2day + ElastixWorld: ¿Qué hace falta para construir un Skype?

Espero que pronto tengamos disponibles los vídeos, ya que ver las transparencias por si solas no son tan divertidas como verme contarlo 🙂 Y por supuesto que iba con traje.


 

ElastixWorld 2011

Ya ha terminado ElastixWorld 2011. Han terminado dos intensos días de interesantes charlas y he de decir que ha sido una de las mejores conferencias a las que he tenido la ocasión de asistir.

Organizar un evento así tiene que ser complicado, y desde aquí mis felicitaciones a todo el equipo de PaloSanto Solutions porque desde mi punto de vista todo ha salido a la perfección. El auditorio siempre lleno, los expositores siempre ocupados, y todo el mundo encantado.

Y la gente. Me he sentido como en casa, el trato ha sido exquisito y si el año que viene tuviera la oportunidad, volvería al ElastixWorld sin pensarlo. Me llevo muy buenos recuerdos y un puñado de amigos a los que espero volver a ver.

Tambien me gustaria animar a empresas e integradores Españoles a participar en futuras ediciones, creo que lo encontrarán muy interesante.

Como ya comenté anteriormente, he dado una charla titulada Blink: SIP beyond VoIP, a continuación os dejo las transparencias. Parece que también tendremos el video pronto 🙂


Por último, me gustaría agradecer especialmente a Paul, Edgar, Boris, Marta, Nicolas, Joao y los demás lo bien que me han hecho sentir en este inolvidable viaje.

A los que no habéis estado en ElastixWorld, os animo a asistir a la 4K Conference, éste mismo mes en Buenos Aires, promete estar a la altura.

ElastixWorld y 4Kconference, ¡allá vamos!

Cuando parecía que éste año no iba a cruzar el Atlántico, va y resulta que lo voy a cruzar 2 veces… ¡el mismo mes!

ElastixWorld: 3-4 de Noviembre, Mexico

Supongo que casi todos sabréis qué es Elastix, así que no necesita demasiada introducción. Por segundo año consecutivo se celebra ElastixWorld, un evento de 2 días donde integradores, partners, usuarios y demás gente relacionada con Elastix se encuentran unos a otros. ¿Y yo qué pinto ahí? He de agradecer a Paul Estrella la oportunidad de participar en éste evento, en el que hablaré sobre Blink (por supuesto) y cómo podemos hacer uso de tecnologías que van más allá de la voz con SIP.

4Kconference: 23-24 de Noviembre, Argentina

En su primera edición, la 4Kconference atraerá público de todas partes de latinoamérica relacionadas con la tecnología IP y la industria a su alrededor. He de agradecer a Nicolas Gudiño la oportunidad de participar en éste evento junto a otros grandes como Olle Johanson o Flavio Goncalves, entre otros. El tema de mi charla será, por supuesto, Blink, pero desde un punto de vista ligeramente distinto, ya que éste evento no está asociado a ningún software de comunicaciones en concreto.

La verdad es que me hace mucha ilusión poder acudir a estos 2 eventos, además aprovecharé para quedarme unas semanas de vacaciones por Argentina con mi novia, un poco de SIP-detox no vendrá mal 🙂

Si estáis por allí cualquiera de las 2 fechas, ¡nos vemos!