proyecto fin de grado - archivo digital upmoa.upm.es/55019/1/tfg_carlos_pinedo_pelaez.pdf ·...

117
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN DE GRADO TÍTULO: Diseño e implementación de sistemas telemáticos de comunicación como apoyo a la dependencia AUTOR: Carlos Pinedo Peláez TITULACIÓN: Grado en Ingeniería Telemática TUTOR: Ana Belén García Hernando DEPARTAMENTO: Ingeniería Telemática y Electrónica VºBº Miembros del Tribunal Calificador: PRESIDENTE: Nicolas López Pérez TUTOR: Ana Belén García Hernando SECRETARIO: Antonio da Silva Fariña Fecha de lectura: Calificación: El Secretario,

Upload: others

Post on 07-Mar-2021

2 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN

PROYECTO FIN DE GRADO

TÍTULO: Diseño e implementación de sistemas telemáticos de

comunicación como apoyo a la dependencia

AUTOR: Carlos Pinedo Peláez

TITULACIÓN: Grado en Ingeniería Telemática

TUTOR: Ana Belén García Hernando

DEPARTAMENTO: Ingeniería Telemática y Electrónica

VºBº

Miembros del Tribunal Calificador: PRESIDENTE: Nicolas López Pérez TUTOR: Ana Belén García Hernando SECRETARIO: Antonio da Silva Fariña Fecha de lectura:

Calificación:

El Secretario,

Page 2: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

2

Page 3: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Indice general

Indice de figuras 9

Indice de cuadros 11

1. Resumen 13

2. Abstract 15

3. Introduccion 17

3.1. Origen de la idea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4. Antecedentes 19

4.1. Aproximaciones similares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.1.1. Servicios de teleasistencia . . . . . . . . . . . . . . . . . . . . . . . . 19

5. Especificaciones y restricciones de diseno 21

5.1. Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.1.1. Requisitos de alto nivel . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.1.2. Requisitos funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5.1.3. Requisitos no funcionales . . . . . . . . . . . . . . . . . . . . . . . . 22

6. Descripcion de la solucion propuesta 23

6.1. Descripcion general de la propuesta . . . . . . . . . . . . . . . . . . . . . . . 23

6.2. Resolucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

6.2.1. Tecnologıas utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . 25

6.2.2. Diseno de alto nivel y arquitectura general del sistema . . . . . . . . 31

6.2.3. Nucleo de la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . 32

6.2.4. Capa de exposicion de servicios . . . . . . . . . . . . . . . . . . . . . 44

6.2.5. Interfaz de usuario y configuracion . . . . . . . . . . . . . . . . . . . 47

6.2.6. Aplicacion Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

6.2.7. Modulo de reconocimiento y sıntesis de voz . . . . . . . . . . . . . . 65

6.2.8. Boton cableado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

6.2.9. Boton inalambrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

6.2.10. Configuracion de Raspbian . . . . . . . . . . . . . . . . . . . . . . . 71

6.2.11. Configuracion del servidor VPS, instalacion y configuracion de Asterisk 72

6.2.12. Despliegue de los componentes . . . . . . . . . . . . . . . . . . . . . 72

3

Page 4: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

4 INDICE GENERAL

7. Pruebas y resultados 757.1. Pruebas en los modulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

7.1.1. Nucleo de la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . 757.1.2. Capa de exposicion de servicios . . . . . . . . . . . . . . . . . . . . . 757.1.3. Interfaz de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757.1.4. Aplicacion Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767.1.5. Modulo de reconocimiento y sıntesis de voz . . . . . . . . . . . . . . 767.1.6. Boton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

7.2. Pruebas de integracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767.3. Pruebas de Calidad del servicio . . . . . . . . . . . . . . . . . . . . . . . . . 77

8. Presupuesto 81

9. Conclusiones y trabajos futuros 839.1. Trabajos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

9.1.1. Interaccion con el televisor . . . . . . . . . . . . . . . . . . . . . . . 839.1.2. Boton inalambrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839.1.3. Mejoras del reconocimiento de voz . . . . . . . . . . . . . . . . . . . 849.1.4. Reduccion del sistema operativo . . . . . . . . . . . . . . . . . . . . 849.1.5. Mejoras en la interfaz grafica . . . . . . . . . . . . . . . . . . . . . . 849.1.6. Mejoras en la centralita . . . . . . . . . . . . . . . . . . . . . . . . . 84

Bibliografıa 85

10.Anexo I Manual de instalacion y uso 8910.1. Instalacion de raspbian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8910.2. Montaje de la pantalla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9110.3. Configuracion inicial de la Raspberry Pi . . . . . . . . . . . . . . . . . . . . 9210.4. Instalacion y configuracion inicial del Softphone . . . . . . . . . . . . . . . . 9410.5. Configuracion del altavoz Bluetooth . . . . . . . . . . . . . . . . . . . . . . 9610.6. Testeo del microfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10210.7. Instalacion y configuracion de la centralita . . . . . . . . . . . . . . . . . . . 104

10.7.1. Configuracion de la centralita . . . . . . . . . . . . . . . . . . . . . . 11010.7.2. Configuracion del Softphone de la Raspberry para la nueva centralita11210.7.3. Consideraciones de seguridad . . . . . . . . . . . . . . . . . . . . . . 11210.7.4. Verificacion de todo el sistema montado hasta el momento . . . . . . 11410.7.5. Configuracion DNS dinamico . . . . . . . . . . . . . . . . . . . . . . 116

Page 5: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Listings

6.1. Contenido de executeRegisterDaemon.sh . . . . . . . . . . . . . . . . . . . . 34

6.2. Daemon.py Extraido de [1] . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

6.3. Detalle de daemonize Extraido de [1] . . . . . . . . . . . . . . . . . . . . . . 35

6.4. Configuracion del sistema de logs . . . . . . . . . . . . . . . . . . . . . . . . 35

6.5. Metodo log message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

6.6. Funcion handle errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

6.7. Configuracion para handle errors . . . . . . . . . . . . . . . . . . . . . . . . 37

6.8. Ejecucion del script registerDaemon . . . . . . . . . . . . . . . . . . . . . . 38

6.9. Define el comportamiento si es el programa principal . . . . . . . . . . . . . 38

6.10. Comportamiento como demonio . . . . . . . . . . . . . . . . . . . . . . . . . 38

6.11. Metodo run() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

6.12. Archivo de configuracion del altavoz . . . . . . . . . . . . . . . . . . . . . . 43

6.13. RestClient.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

6.14. Codigo original para el manejo del boton extraido de [2] . . . . . . . . . . . 69

6.15. Codigo para el manejo del boton con las modificaciones necesarias extraidode [2] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

6.16. Codigo utilizado para capturar el trafico y detectar la pulsacion del botonAmazon Dash extraido de [3] . . . . . . . . . . . . . . . . . . . . . . . . . . 70

6.17. Final del fichero crontab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

6.18. Final del fichero /home/proycpp/.config/lxsession/LXDE-pi/autostart . . . 73

10.1. Descarga de raspbian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

10.2. Listado de unidades de almacenamiento . . . . . . . . . . . . . . . . . . . . 89

10.3. Desmontar la tarjeta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

10.4. Descompresion del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

10.5. Escritura del sistema en la tarjeta . . . . . . . . . . . . . . . . . . . . . . . 91

10.6. Creacion de un backup del sistema . . . . . . . . . . . . . . . . . . . . . . . 91

10.7. Eliminar el espacio en blanco de la imagen . . . . . . . . . . . . . . . . . . . 91

10.8. Comparacion de la imagen cargada en la Raspberry con la original . . . . . 91

10.9. Eliminar el backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

10.10.Extraccion de la SD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

10.11.Solucion sacada de [4] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

10.12.Acceso a la configuracion del sistema . . . . . . . . . . . . . . . . . . . . . . 92

10.13.Instalacion de vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

10.14.Resultado de la ejecucion de groups . . . . . . . . . . . . . . . . . . . . . . 92

10.15.Groups separado por comas . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

10.16.Creacion del usuario 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

10.17.Creacion del usuario 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

10.18.Creacion del usuario 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

10.19.Modificacion sobre /etc/ssh/sshd config . . . . . . . . . . . . . . . . . . . . 93

5

Page 6: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6 LISTINGS

10.20.Reinicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

10.21.Eliminacion del usuario pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

10.22.Permisos para el nuevo usuario . . . . . . . . . . . . . . . . . . . . . . . . . 93

10.23.Actualizacion del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

10.24.Modificaciones sobre /.profile . . . . . . . . . . . . . . . . . . . . . . . . . . 93

10.25.Login automatico 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

10.26.Login automatico 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

10.27.Login automatico 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

10.28.Instalacion de linphone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

10.29.Errores tras instalar el softphone . . . . . . . . . . . . . . . . . . . . . . . . 94

10.30.Configuracion de Linphone . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

10.31.Ejecucion de linphone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

10.32.Registro del softphone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

10.33.Verificacion del estado de registro . . . . . . . . . . . . . . . . . . . . . . . . 95

10.34.Modificaciones sobre la configuracion de Linphone . . . . . . . . . . . . . . 95

10.35.Modificaciones sobre el fichero hosts . . . . . . . . . . . . . . . . . . . . . . 95

10.36.Cancelacion del registro del softphone . . . . . . . . . . . . . . . . . . . . . 95

10.37.Registro del softphone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

10.38.Realizacion de una llamada . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

10.39.Colgar una llamada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

10.40.Version del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

10.41.Instalacion de pi-bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

10.42.Instalacion de modulos adicionales . . . . . . . . . . . . . . . . . . . . . . . 96

10.43.Modificaciones en el usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

10.44.Modificaciones sobre /etc/bluetooth/main.conf . . . . . . . . . . . . . . . . 97

10.45.Base de /etc/pulse/daemon.conf . . . . . . . . . . . . . . . . . . . . . . . . 97

10.46.Modificaciones sobre /etc/pulse/daemon.conf . . . . . . . . . . . . . . . . . 97

10.47.Configuracion de bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

10.48.Inicio de escaneo de dispositivos Bluetooth . . . . . . . . . . . . . . . . . . 98

10.49.Estado del escaneo Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . 98

10.50.Inicio del proceso de conexion . . . . . . . . . . . . . . . . . . . . . . . . . . 99

10.51.Terminal Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

10.52.Conexion Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

10.53.Inicio sincronizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

10.54.Conexion altavoz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

10.55.Proceso de conexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

10.56.Levantar el demonio pulseaudio . . . . . . . . . . . . . . . . . . . . . . . . . 100

10.57.Configuracion de /.asoundrc 1 . . . . . . . . . . . . . . . . . . . . . . . . . 101

10.58.Configuracion de /.asoundrc 2 . . . . . . . . . . . . . . . . . . . . . . . . . 101

10.59.Fichero /etc/bluetooth/main.conf . . . . . . . . . . . . . . . . . . . . . . . . 102

10.60.Instalacion de alsa-utils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

10.61.Grabacion de un audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

10.62.Error durante la grabacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

10.63.Instalacion de paquetes adicionales . . . . . . . . . . . . . . . . . . . . . . . 102

10.64.Lista de dispositivos de grabacion . . . . . . . . . . . . . . . . . . . . . . . . 102

10.65.Grabacion de un audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

10.66.Copiar fichero a PC desde la raspberry . . . . . . . . . . . . . . . . . . . . . 103

10.67.Reproduccion de archivo de audio . . . . . . . . . . . . . . . . . . . . . . . . 103

10.68.Archivo /usr/share/alsa/alsa.conf original . . . . . . . . . . . . . . . . . . . 103

Page 7: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

LISTINGS 7

10.69.Modificaciones sobre /usr/share/alsa/alsa.conf . . . . . . . . . . . . . . . . 103

10.70.Modificaciones en /.asoundrc . . . . . . . . . . . . . . . . . . . . . . . . . . 103

10.71.Instalacion de pavucontrol y padevchooser . . . . . . . . . . . . . . . . . . . 104

10.72.Modificaciones sobre /etc/rc.local . . . . . . . . . . . . . . . . . . . . . . . . 104

10.73.Comando correcto de grabacion . . . . . . . . . . . . . . . . . . . . . . . . . 104

10.74.Accaso al VPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

10.75.Actualizacion del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

10.76.Instalacion de dependencias . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

10.77.Reinicio del VPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

10.78.Conexion al VPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

10.79.Instalacion de dependencias de Pear . . . . . . . . . . . . . . . . . . . . . . 105

10.80.Instalacion de dependencias de google voice . . . . . . . . . . . . . . . . . . 105

10.81.Descarga de Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

10.82.Instalacion de Pjproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

10.83.Instalacion de Jansson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

10.84.Descompresion y configuracion de la compilacion de Asterisk . . . . . . . . 106

10.85.Compilacion de Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

10.86.Instalacion de los sonidos de alta calidad . . . . . . . . . . . . . . . . . . . . 107

10.87.Creacion del usuario Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . . 107

10.88.Modificaciones necesarias en Apache . . . . . . . . . . . . . . . . . . . . . . 107

10.89.Configuracion de ODBC 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

10.90.Configuracion de ODBC 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

10.91.Descarga e instalacion de FreePBX . . . . . . . . . . . . . . . . . . . . . . . 108

10.92.Ejecucion del servicio Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . 108

10.93.Configuracion adicional Apache . . . . . . . . . . . . . . . . . . . . . . . . . 109

10.94.Reinicio del servicio Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

10.95.Habilitar el modulo rewrite de Apache . . . . . . . . . . . . . . . . . . . . . 110

10.96.Reinicio de fwconsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

10.97.Actualizadion de firmas de Asterisk . . . . . . . . . . . . . . . . . . . . . . . 110

10.98.Modificaciones sobre el fichero de hosts . . . . . . . . . . . . . . . . . . . . . 112

10.99.Registro del softphone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

10.100.Descarga del fichero README-SERIOUSLY . . . . . . . . . . . . . . . . . 112

10.101.Instalacion de Python e IPTables . . . . . . . . . . . . . . . . . . . . . . . . 112

10.102.Instalacion de fail2ban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

10.103.Copia de seguridad del fichero jail . . . . . . . . . . . . . . . . . . . . . . . 112

10.104.Configuracion adicional del reistro de Asterisk . . . . . . . . . . . . . . . . . 113

10.105.Creacion del filtro de fail2ban para Asterisk . . . . . . . . . . . . . . . . . . 113

10.106.Reinicio del sistema de registro de Asterisk . . . . . . . . . . . . . . . . . . 113

10.107.Excluimos las ips de confianza . . . . . . . . . . . . . . . . . . . . . . . . . . 114

10.108.Habilitar filtro para Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

10.109.Habilitar el filtro para Asterisk . . . . . . . . . . . . . . . . . . . . . . . . . 114

10.110.Reinicio del servicio de fail2ban . . . . . . . . . . . . . . . . . . . . . . . . . 114

10.111.Incluir fail2ban en el arranque del sistema . . . . . . . . . . . . . . . . . . . 114

10.112.Conexion del altavoz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

10.113.Registro del softphone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

10.114.Modificaciones sobre /etc/modules . . . . . . . . . . . . . . . . . . . . . . . 115

10.115.Descolgar llamada desde el demonio de Linphone . . . . . . . . . . . . . . . 115

10.116.Listado de dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

10.117.Filtrado del nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

Page 8: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

8 LISTINGS

10.118.Establecer dispositivo como predeterminado . . . . . . . . . . . . . . . . . . 11610.119.Instalacion del cliente no-ip . . . . . . . . . . . . . . . . . . . . . . . . . . . 11610.120.Configuracion no-ip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11610.121.Ejecucion del cliente no-ip durante el arranque . . . . . . . . . . . . . . . . 117

Page 9: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Indice de figuras

6.1. Java icon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

6.2. SpringBoot icon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

6.3. Tomcat icon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

6.4. Python icon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

6.5. Angular6 icon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

6.6. Asterisk icon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

6.7. Raspbian icon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6.8. Linphone icon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6.9. Diagrama general del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 31

6.10. Diagrama de clases de la aplicacion REST . . . . . . . . . . . . . . . . . . . 47

6.11. Pantalla principal aplicacion Angular . . . . . . . . . . . . . . . . . . . . . . 53

6.12. Pantalla durante una llamada . . . . . . . . . . . . . . . . . . . . . . . . . . 54

6.13. Mensaje de error Softphone desconectado . . . . . . . . . . . . . . . . . . . 54

6.14. Pantalla de configuracion/mantenimiento . . . . . . . . . . . . . . . . . . . 55

6.15. Visualizador de registros con opciones desplegadas . . . . . . . . . . . . . . 56

6.16. Visualizador de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

6.17. Interfaz para llamar a una extension . . . . . . . . . . . . . . . . . . . . . . 57

6.18. Interfaz para enviar un ping . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

6.19. Interfaz para gestionar el altavoz . . . . . . . . . . . . . . . . . . . . . . . . 58

6.20. Interfaz para gestionar el softphone . . . . . . . . . . . . . . . . . . . . . . . 58

6.21. Interfaz principal de la aplicacion Android . . . . . . . . . . . . . . . . . . . 60

6.22. Interfaz de configuracion de la aplicacion Android . . . . . . . . . . . . . . . 61

6.23. Interfaz de configuracion de la extension desde la aplicacion Android . . . . 63

6.24. Diagrama general de clases del modulo de reconocimiento y sıntesis de voz . 66

6.25. Detalle del modulo de reconocimiento de voz . . . . . . . . . . . . . . . . . 67

6.26. Detalle del modulo de sıntesis de voz . . . . . . . . . . . . . . . . . . . . . . 68

7.1. Ejemplo de captura de trafico RTP . . . . . . . . . . . . . . . . . . . . . . . 78

10.1. Antes de insertar la tarjeta . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

10.2. Despues de insertar la tarjeta . . . . . . . . . . . . . . . . . . . . . . . . . . 90

10.3. Tarjeta desmontada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

10.4. Acceso a la consola de Linphone . . . . . . . . . . . . . . . . . . . . . . . . 94

10.5. Version del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

10.6. Estado del bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

10.7. Estado del bluetooth tras iniciar escaneo . . . . . . . . . . . . . . . . . . . . 98

10.8. Consola bluetoothctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

10.9. Salida de hcitool scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

10.10.Proceso de conexion Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . 101

9

Page 10: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10 INDICE DE FIGURAS

10.11.Listado de dispositivos de grabacion . . . . . . . . . . . . . . . . . . . . . . 10310.12.Listado de dispositivos de grabacion . . . . . . . . . . . . . . . . . . . . . . 10410.13.Pantalla inicial de FreePBX . . . . . . . . . . . . . . . . . . . . . . . . . . . 10910.14.Creacion de una extension configuracion basica . . . . . . . . . . . . . . . . 11110.15.Creacion de una extension configuracion avanzada . . . . . . . . . . . . . . 11110.16.Creacion del DNS dinamico en no-ip . . . . . . . . . . . . . . . . . . . . . . 116

Page 11: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Indice de cuadros

7.1. Medidas sobre el trafico RTP . . . . . . . . . . . . . . . . . . . . . . . . . . 79

8.1. Presupuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

11

Page 12: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

12 INDICE DE CUADROS

Page 13: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 1

Resumen

Diseno e implementacion de sistemas telematicos de comunicacion como apoyo a ladependencia. El avance de las tecnologıas de la informacion y las comunicaciones permiteel diseno y despliegue de sistemas que cada vez son capaces de facilitar mejor el dıa a dıade personas con cualquier tipo de capacidades, incluyendo a las personas en situacion dedependencia y sus allegados o familiares. Este trabajo surge para ofrecer una solucion queadapte los sitemas de comunicacion a las capacidades de cada individuo.

Uno de los primeros problemas a los que se enfrentan tanto las personas en situacionde dependencia como sus familiares es la dificultad a la hora de comunicarse. Con esteproyecto se pretende desarrollar un sistema de comunicacion modular y escalable quepermita paliar el problema sea cual sea el grado y el tipo de dependencia del usuario. Losdiferentes modulos se han pensado teniendo en cuenta limitaciones habituales en personasen situacion de dependencia, pretendiendo ası salvar las dificultades aprovechando lascapacidades del individuo.

Se ha disenado e implementado la base de un sistema con dichas caracterısticas, uti-lizando en su inmensa mayorıa elementos de software y hardware libres o propios. Se haimplementado con exito un sistema de telecomunicacion, con buenos resultados en laspruebas de usabilidad y resiliencia. Ademas, el sistema se ha disenado teniendo en cuen-ta la posibilidad de anadir funcionalidades en un futuro, por lo que la modularidad y laescalabilidad se han tenido en cuenta y han determinado todas las decisiones de diseno.

El resultado de este trabajo es un prototipo funcional que, si bien no es apto paraser comercializado de inmediato, sirve como base para un posible producto final con lapotencialidad de ser lanzado al mercado. Pese a que el resultado es una buena aproxima-cion, para conseguir el producto final, serıan necesarias unas mejoras que se proponen enel presente documento.

13

Page 14: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

14 CAPITULO 1. RESUMEN

Page 15: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 2

Abstract

Design and implementation of telematic communication systems as support for depen-dency. The improvement of information and communication technologies allows the designand deployment of systems that are increasingly able to better facilitate the day to dayof people with any type of capabilities, including people in situations of dependency andtheir relatives or family. This work arises to offer a solution that adapts the communicationsystems to the capabilities of each individual.

One of the first problems that both, dependent people and their families, have toface are communication problems. The aim of this project is to develop a modular andscalable communication system that reduces this problem whatever the degree and typeof dependence the user has. The different modules have been thought taking into accountusual limitations in dependent people, trying to save the difficulties taking advantage ofthe capacities of the individual.

The basis of a system with these characteristics has been designed and implemented,using open source and own software and hardware elements. A telecommunication sys-tem has been successfully implemented, obteining good results in usability and resiliencetests. In addition, the system has been designed taking into account the possibility ofadding functionalities in the future, so that modularity and scalability have been takeninto account and have determined all design decisions.

The result of this work is a functional prototype that, although it is not suitable to bemarketed immediately, serves as a basis for a possible final product with the potential tobe launched on the market. Although the result is a good approximation, improvementsthat are proposed in this document would be necessary to achieve the final product.

15

Page 16: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

16 CAPITULO 2. ABSTRACT

Page 17: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 3

Introduccion

3.1. Origen de la idea

Este proyecto surge como respuesta a una necesidad observada y analizada en la so-ciedad actual. La idea inicial de este proyecto procede de una necesidad real: son muchaslas personas en situacion de dependencia con habilidades reducidas para utilizar las he-rramientas comunmente disponibles para la comunicacion con sus familiares y amigos.

Hay muchas personas incapaces de moverse de una habitacion concreta de su casa,ancianos que no saben como utilizar sus telefonos, personas con trastornos psiquiatricoscon las que en ocasiones es complicado establecer contacto, personas con movilidad redu-cida que no pueden utilizar una pantalla o un marcador, etc. En estos casos, los sistemasactualmente disponibles son excesivamente caros o estan disenados exclusivamente paracasos de emergencia. Este proyecto pretende disenar una solucion economicamente asu-mible que no sirva exclusivamente para emergencias, sino que permita a casi cualquierpersona en esta situacion o a sus familiares realizar una llamada.

3.2. Objetivos

El objetivo de este proyecto, que sera descrito en profundidad mas adelante, es la im-plementacion de un sistema funcional y escalable que cumpla con unos requisitos mınimospara considerar que se han resuelto los principales problemas que pueden surgir a la horade implementar el sistema completo como producto comercial.

Se comenzara evaluando los antecedentes a este proyecto, es decir, comparando las al-ternativas existentes en el mercado. A continuacion se especificaran los requisitos mınimosdel proyecto tanto a alto nivel como especificando requisitos funcionales y no funcionalesconcretos. En el capıtulo 4 se explicara cada uno de los elementos de la solucion, expli-cando las partes fundamentales de la arquitectura y detallando cada elemento de softwareimplicado. Por ultimo se haran pruebas y extraeran conclusiones del trabajo realizado.

17

Page 18: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

18 CAPITULO 3. INTRODUCCION

Page 19: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 4

Antecedentes

La tecnologıa tiene como proposito mejorar la calidad de vida de las personas. Suaplicacion es multidisciplinar y aplicable en todos los ambitos de la vida. Uno de estosambitos en los que la tecnologıa ayuda a que las personas tengan una vida mejor y seintegren mejor en la sociedad es en el marco de las personas con discapacidades. En esteapartado se hace una breve descripcion de aproximaciones similares a las del proyectorealizado.

4.1. Aproximaciones similares

Actualmente existen servicios similares al aquı planteado, especialmente servicios deteleasistencia, que son los que mas se acercan al enfoque de este proyecto. Sin embargoestos se enfocan mucho mas a la atencion inmediata en caso de emergencia o de situacionesde riesgo, como en caso de caıda o de inactividad prolongada de la persona en situacionde dependencia o en soluciones practicas para la comunicacion entre personas sin facilitarespecialmente la situacion de dependencia de las mismas.

4.1.1. Servicios de teleasistencia

Algunos servicios de teleasistencia existentes actualmente en Espana son:

- Cruz roja https://www.cruzroja.es/principal/web/teleasistencia

- Teleasistencia de la Comunidad de Madrid http://www.madrid.org/cs/Satellite?

cid=1164183145688&pagename=PMAY/Page/PMAY_pintarContenidoFinal

- Teleasistencia Serviastel http://serviastel.es/residencias

- Atenzia Teleasistencia https://atenzia.com/es

- DomusVi http://www.domusvi.es/teleasistencia/

La mayorıa de estos servicios estan disponibles para las personas que tienen un gradode dependencia concreto demostrado. Existen distintos servicios que cuentan con un dis-positivo portatil que se puede pulsar en caso de emergencia o de necesidad de asistenciay controles periodicos comprobando que todo va bien por vıa telefonica de un modo muysimilar al planteado en este proyecto, pero contando con un equipo humano detras quemonitorizara en todo momento posibles riesgos.

19

Page 20: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

20 CAPITULO 4. ANTECEDENTES

Sin embargo, a pesar de tratarse de un enfoque similar los objetivos de este proyectono son los mismos, aunque sı podrıa llegar a integrarse con algunos de estos sistemas,permitiendo integrar sus funciones y anadirlas a las aquı planteadas.

Estos servicios suelen estar asociados a un coste de aproximadamente 1eal dıa, esdecir, en regimen de alquiler, sin la posibilidad de adquirir el producto y prescindir departe de la infraestructura. Ademas la mayorıa no cuentan con facilidades para contactarcon familiares, lo que es el principal objetivo de este proyecto.

Una ventaja significativa del proyecto respecto a los servicios de teleasistencia existen-tes en la actualidad es su naturaleza modular y su capacidad de adaptacion a distintosgrados y tipos de dependencia, permitiendo que se adapte a cualquier tipo de discapaci-dad. Otro punto fuerte respecto a estos sistemas es la independencia de la infraestructurapropia de un servicio, disponiendo el proyecto de una centralita propia que depende de laRDSI exclusivamente y permite escalar el sistema a todo tipo de servicios que se puedanutilizar.

Gracias a la arquitectura modular del sistema es posible integrarlo con dispositivos IoTy otros elementos capaces de incrementar la funcionalidad pudiendo ofrecerse una serie deventajas adicionales que mejoren el producto final.

Otros servicios

Existen otros servicios con funcionalidades que pueden ser consideradas similares enparte, pero con un enfoque mucho mas generalista y poco adaptados a las personas ensituacion de dependencia. Los asistentes de voz de Amazon, Google o Apple disponende reconocimiento y sıntesis de voz y permiten la realizacion de llamadas mediante estoscomandos. Pero como se ha mencionado no implementan un sistema especialmente sencillopara personas con ciertos tipos de discapacidad.

Page 21: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 5

Especificaciones y restricciones dediseno

En este apartado se comenta la idea principal del proyecto y se explican las necesidadestanto funcionales como no funcionales imprescindibles para realizar un buen diseno y unacorrecta arquitectura para desarrollar un piloto de un producto que se pueda llevar almercado.

5.1. Requisitos

El analisis de requisitos se ha llevado a cabo a traves de una vision global, teniendoen cuenta la variedad de barreras mencionadas en la introduccion. Partiendo de la ideade diversidad de dificultades y no limitandola exclusivamente a las barreras fısicas que sesuelen encontrar estas personas, sino, ademas, tratando de maximizar la usabilidad delsistema para sortear tambien las limitaciones propias de una capacidad de aprendizaje yadaptacion mermada, se han recogido los siguientes requisitos de alto nivel a cumplir porel sistema, de los que posteriormente se deducen los requisitos funcionales y no funcionalesque guıan el diseno de la solucion:

5.1.1. Requisitos de alto nivel

- Contacto inmediato: El sistema debera permitir que en cualquier momento tantola persona en situacion de dependencia como sus familiares establezcan contactopor telefono, no debe necesitar ningun dispositivo adherido al cuerpo ni adicionalal sistema en sı mismo una vez instalado, lo que permitira gran libertad y anadiraindependencia al usuario.

- Integracion en el entorno del usuario: No debe ser invasivo y la configuracion dirigidaal usuario debe ser clara y usable, debe estar dirigida a alguien no especializado.Ademas debe estar integrado en el entorno de la persona dependiente de modoque sea posible establecer contacto con ella con la mınima interaccion posible de lamisma, pero manteniendo ıntegro su derecho a la privacidad.

- Robustez e independencia: Una vez en funcionamiento el sistema no debe requeririnteraccion adicional para seguir funcionando con normalidad y se deben contemplaren su diseno todas las situaciones de error que sea posible.

21

Page 22: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

22 CAPITULO 5. ESPECIFICACIONES Y RESTRICCIONES DE DISENO

- Modularidad y escalabilidad: En cuanto al diseno, evidentemente, ha de ser modulary escalable; preparado en la medida de lo posible para ampliar su funcionalidad connuevas tecnologıas y funcionalidades. Al ser modular, se debe hacer el mejor esfuerzopara permitir que cada elemento de HW y SW sea sustituible por otro equivalentesin necesidad de modificar la base del sistema.

5.1.2. Requisitos funcionales

1. El sistema debe posibilitar el establecimiento de llamadas mediante VoIP entre elhogar de la persona dependiente e interlocutores externos.

2. Debe existir la posibilidad de realizar una llamada al hogar de la persona dependientedesde un dispositivo Android.

3. Debe existir una herramienta web de configuracion que permita operar remotamentecon el sistema.

4. Debe existir mas de un metodo de interaccion con el sistema por parte de la personaen situacion de dependencia. De forma que personas con distinto grado de depen-dencia puedan interactuar con el sistema sin necesidad de modificar su nucleo.

5. El sistema debe poder ser completamente transparente en caso de llegar una llamadaentrante de una de las extensiones conocidas.

6. El sistema debe permitir diferentes modos de interaccion para adaptarse a las nece-sidades particulares de la persona en situacion de dependencia. Por lo tanto serannecesarios elementos que permitan mostrar informacion tanto de forma visual comosonora.

7. Integracion en el entorno: En la medida de lo posible, los dispositivos necesarios parala comunicacion de la persona dependiente se ubicaran en su entorno.

5.1.3. Requisitos no funcionales

1. El sistema debe ser economicamente accesible.

2. El sistema debera responder a las interacciones con los usuarios en un tiempo razo-nable.

3. El diseno del sistema debe ser modular y escalable

4. El uso del sistema ha de ser sencillo, especialmente para la persona dependiente.

5. La configuracion inicial del sistema debe ser asequible para un tecnico y no deberequerir configuracion tecnica adicional por parte de ningun usuario del mismo.

6. El sistema debe ser razonablemente resiliente.

7. Se debe hacer el mejor esfuerzo para lograr una calidad aceptable en la comunicacionVoIP.

Page 23: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 6

Descripcion de la solucionpropuesta

6.1. Descripcion general de la propuesta

Para conseguir el objetivo principal del proyecto y teniendo en cuenta los requisi-tos mencionados anteriormente, para implementar el sistema se necesitaran los elementoshardware descritos a continuacion.

- Dispositivo de procesamiento y conectividad: Sera necesario un dispositivo que per-mita interconectar los diferentes elementos de entrada y salida, ası como permitirconexiones a internet, disponer de Bluetooth, ademas es necesario que permita ciertoprocesamiento. Para este componente se ha planteado desde el principio utilizar unaRaspberry Pi 3[5], por ser un dispositivo de bajo coste, facilmente adquirible y libre,permitiendo una gran flexibilidad para su configuracion y personalizacion.

- Elementos de entrada y salida: El diseno modular permite utilizar todo tipo decomponentes adicionales, en este caso se ha contemplado incluir una pantalla tactil,un microfono direccional, un altavoz inalambrico Bluetooth y un boton IoT AmazonDash ([6]).

- Escalabilidad y modularidad: Todo el software desarrollado esta disenado de maneramodular para permitir una buena escalabilidad del sistema y la adicion de futuroscomponentes y funcionalidades.

- Alojamiento del software: Ademas del equipo antes mencionado se ha utilizado unservidor VPS (Virtual Private Server) contratado en OVH para alojar la PBX As-terisk.

En cuanto a los elementos software, el objetivo del proyecto y de este documento esdesarrollar un diseno y una arquitectura para finalmente crear un piloto completamentefuncional del sistema. En este piloto quedaran resueltos los aspectos mas crıticos en cuantoa diseno y arquitectura, se satisfaran todos los requisitos mencionados anteriormente y seplantaran las bases del sistema. De esta forma, en el momento de disponer del tiempoy financiacion necesarios se podra llevar el piloto a un caso de produccion en el mundoreal haciendo pequenos anadidos pero sin necesidad de invertir mas tiempo en el diseno oarquitectura del mismo.

Combinando ambos ambitos, el resultado final sera desplegar en una Raspberry Pi unaserie de servicios que permitan mantener conectados y funcionales en todo momento un

23

Page 24: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

24 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

microfono, un altavoz y una serie de componentes adicionales que permitan interactuarcon el sistema de diferentes maneras. El sistema permitira en cada caso concreto uno ovarios modos de interaccion.

Por ejemplo:

- Una persona con alzheimer que tenga dificultades para reconocer a sus familiarespuede obtener informacion adicional cuando llega una llamada a traves de un sinte-tizador de voz, indicando quien llama y que relacion tiene con ella.

- Alguien cuya capacidad de movimiento en las manos estuviese reducida o que nopudiese levantarse de la cama podrıa interactuar con el sistema mediante comandosde voz.

- Una persona mayor con movilidad reducida, pero capacidades cognitivas funcionales,podrıa interactuar a traves de la interfaz ofrecida por la pantalla tactil o un botoncableado.

Dada esta descripcion del sistema, la complejidad es alta ya que son muchos los modulosque podrıan implementarse. Con el objetivo de acotar pero dejando la puerta abierta paraimplementaciones adicionales gracias a la modularidad y escalabilidad propia del sistema,para este piloto en concreto se ha seleccionado el desarrollo de los siguientes metodos deentrada:

Indispensables:

- Interfaz ofrecida por la pantalla tactil. Que permite la realizacion de llamadas ycolgar una llamada en curso.

- Boton cableado. Que permite realizar una llamada a una lista de extensiones demanera sucesiva hasta llegar al final de la lista o que alguna de las extensionesresponda.

- Aplicacion Android. Que permite realizar una llamada a la persona en situacion dedependencia sin necesidad de recordar la extension o saber manejar el Softphone.

- Aplicacion web. Que permite configurar y monitorizar ciertos aspectos del sistemaası como realizar llamadas desde el mismo.

Deseables:

- Comandos de voz. Que permiten realizar llamadas.

- Boton inalambrico. Que funciona exactamente igual que el cableado pero no requiereconexion cableada con el sistema.

En cuanto a los metodos de entrada anteriores, la interfaz mostrada en la pantallade la Raspberry Pi, los botones cableados y los comandos de voz son los metodos dis-ponibles para la persona en situacion de dependencia, el resto de metodos mencionadosestan dirigidos a las personas con permiso para realizar llamadas entrantes y realizar lasconfiguraciones permitidas a traves de la aplicacion web.

Respecto a la instalacion de la solucion, el sistema debe estar preparado para quesu instalacion y configuracion sean razonablemente sencillas para un tecnico, una vezcargada la imagen del sistema operativo solo sera necesario configurar las claves de accesoparticulares para el sistema concreto a configurar y anadir la configuracion especıfica del

Page 25: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 25

hardware que se va a utilizar. Adicionalmente es necesario configurar correctamente lacentralita para habilitar extensiones, tanto para la Raspberry como para las personas conlas que se va a querer establecer comunicacion.

6.2. Resolucion

En esta seccion se va a explicar la arquitectura del sistema, su diseno y a desarrollarlos motivos de cada una de las decisiones tomadas.

6.2.1. Tecnologıas utilizadas

Java

Figura 6.1: Java icon

Java es un lenguaje de programacion que sigue el paradigma de la Orientacion a Ob-jetos. Una de sus principales caracterısticas y ventajas es que su ejecucion se realiza enla maquina virtual de Java (JVM Java Virtual Machine), lo que permite desarrollar inde-pendientemente de la plataforma destino del codigo que se esta desarrollando.

Es una tecnologıa con una elevada penetracion en el mercado que esta avalada por masde 9 millones de desarrolladores. Gracias a la JVM es posible ejecutar el codigo Java en unamplio abanico de dispositivos. Existe una enorme comunidad que mantiene el lenguaje,esta dispuesta a generar documentacion y servir de apoyo al resto de la misma ası comoevolucionar el lenguaje y sus posibilidades.

Se ha decidido utilizar Java para desarrollar parte del backend de la aplicacion por seruna tecnologıa perfectamente probada e independiente de la plataforma en la que se utiliza,de modo que nos permite abstraernos tanto del sistema subyacente como del procesadorque va a ejecutar el codigo.

La maquina virtual correra sobre Raspbian, se utilizara Spring-Boot (explicados masadelante en este capıtulo) para proveer una interfaz segura y escalable.

Page 26: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

26 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Spring Boot

Figura 6.2: SpringBoot icon

Spring es un framework para Java que simplifica la tarea de crear arquitecturas concomponentes poco acoplados, es decir, cada elemento en la aplicacion se puede separarfacilmente del resto.

Concretamente la base de Spring es el patron de inversion de control, lo mas basico yutil que implementa es la inversion de dependencias. Utilizando este patron nos abstraemosde las implementaciones concretas para una interfaz y nos facilita mucho cambiar lossistemas subyacentes bajo cada servicio o los test unitarios.

String dispone de varios modulos, algunos de los mas conocidos son:

- Spring JDBC: Facilita el uso de drivers JDBC para realizar consultas contra dife-rentes bases de datos a traves del lenguaje nativo de las mismas.

- Spring MVC: Simplifica el uso de la arquitectura Modelo-Vista-Controlador, unaarquitectura en la cual se separa la estructura de los datos manejados por la aplica-cion (Modelo) de la forma de presentarselos al usuario (Vista) y la logica de negocio(Controlador).

- Spring AOP: Simplifica la implementacion y el uso de la programacion orientada aaspectos. Nos permitira de una manera muy sencilla lanzar operaciones asociadas adeterminados eventos, por ejemplo, ejecutar un metodo antes y despues de otro.

- Spring ORM: Implementa un modo sencillo y limitado de manejar la base de datosabstrayendonos completamente de la misma, de tal forma que, bien configurado, nosera necesario modificar el codigo de la aplicacion en caso de cambiar de base dedatos.

- Spring JMS: Es una implementacion de diferentes funciones de Java Message Service.

- Spring Test: Es una librerıa para la realizacion de test unitarios.

Page 27: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 27

Spring Boot es una implementacion de Spring que ademas de todo lo indicado anterior-mente permite generar ejecutables que incluyen un contenedor de aplicaciones listo paraser ejecutado en el archivo generado. De forma que no sera necesario generar un archivo.war e instalarlo en un contenedor instalado en un servidor, sino que bastara con ejecutarla aplicacion compilada y esta se encargara de levantar un contenedor y servir la aplicacionembebida en el mismo archivo .jar.

Se ha optado por utilizar Spring Boot por su simplicidad a la hora de generar unaarquitectura facilmente compresible, escalable y muy desacoplada. Esto permitirıa en unfuturo incluir test unitarios, nuevos modulos y diferentes implementaciones de los serviciosa bajo nivel entre otras ventajas.

Los modulos de Spring Boot que se han utilizado en este proyecto han sido:

- Spring Boot Core: Se ha utilizado para embeber un servidor Tomcat en el .jar resul-tante de la compilacion de la aplicacion.

- Spring AOP: (Aspect Oriented Progarmming) Para La gestion de logs y generacionde respuestas en JSON mediante anotaciones.

- Spring MVC: (Model View Controller) Para la generacion rapida de controladorespara los servicios REST expuestos.

Tomcat

Figura 6.3: Tomcat icon

Tomcat es un contenedor de aplicaciones open source desarrollado por Apache y mante-nido de manera conjunta con la comunidad. A pesar de no ser un servidor web es suficientepara las necesidades del proyecto, teniendo en cuenta que es posible exponer los serviciosque necesitamos al exterior sin hacer uso de las funciones avanzadas de las que puedeproveer un servidor web completo. Ademas en caso de necesidad serıa posible exponer lasaplicaciones servidas por Tomcat a traves de cualquier servidor web disponible.

Se ha elegido Tomcat por ser un contenedor gratuito y libre, perfectamente probado yuno de los mas seguros del mercado. Ademas, Spring Boot esta preparado para levantar unservidor Tomcat con una configuracion mınima, lo que ha permitido acelerar el desarrolloy simplifica mucho la instalacion del sistema en un nuevo equipo.

Page 28: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

28 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Python

Figura 6.4: Python icon

Python es un lenguaje de programacion interpretado que ha sido disenado para sersencillo de leer. Utiliza una mezcla de paradigmas, bebe de la orientacion a objetos, loslenguajes interpretados y la programacion funcional.

Su simplicidad, caracter multiplataforma y la gran variedad de librerıas disponibles,unidos a su simplicidad a la hora de aprenderlo e interpretarlo hacen que Python estemuy extendido en diversos ambientes no necesariamente enfocados al desarrollo de softwa-re. Se utiliza mucho para implementaciones matematicas, de procesamiento de imagenes,criptografıa y un largo etcetera.

Las funcionalidades implementadas en Python en este proyecto se plantearon inicial-mente para ser realizadas en Shell Script, pero se habrıa complicado excesivamente sucodificacion y mantenimiento. Python ha demostrado ser una opcion mucho mejor paraeste proyecto y ha permitido llevar a cabo el desarrollo de la parte mas sensible de laaplicacion de forma rapida y escalable.

Angular

Figura 6.5: Angular6 icon

Page 29: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 29

Angular es un framework de JavaScript desarrollado por Google que utiliza la arqui-tectura MVC (Model View Controller - ”Modelo Vista Controlador”). Aunque el codigogenerado es JavaScript en su version ES6, la programacion se realiza en lenguaje TypeS-cript, un lenguaje libre y de codigo abierto mantenido por Microsoft. TypeScript extiendela sintaxis de JavaScript, lo que significa que se puede escribir codigo JavaScript sin pro-blemas, pero anade ciertas facilidades adicionales. Tiene una sintaxis mucho mas limpia,similar a Java, hace el codigo mucho mas comprensible y familiar para cualquier desarro-llador acostumbrado a trabajar con lenguajes con mas recorrido.

El codigo TypeScript sera transpilado a codigo JavaScript y se ejecutara en el lado delcliente. Angular esta disenado para desarrollar webs con una sola pagina y es uno de losframeworks de front-end mas utilizados en la actualidad.

Se ha decidido utilizar la version 6 por ser la ultima version disponible durante la fasefinal del desarrollo del proyecto. Inicialmente se planteo desarrollar el front de la aplicacionen PHP utilizando el framework Laravel. Pero se descarto por ser mucho mas complejo eldesarrollo y menos escalable ya que la version 6 de Angular incluye muchas facilidades ala hora de generar codigo bien organizado y comprensible.

Asterisk

Figura 6.6: Asterisk icon

Asterisk es un framework soportado por Digium para la creacion de aplicaciones decomunicacion. Existen diferentes proyectos asociados a la plataforma, como PBX, VoIPGateways, servidores de conferencias, etc.

En este caso se ha utilizado la centralita telefonica Asterisk para manejar las llamadasrealizadas desde y hacia el sistema.

Para simplificar su uso se ha instalado FreePBX, que es una herramienta de configu-racion web que simplifica mucho su manejo.

Page 30: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

30 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Raspbian

Figura 6.7: Raspbian icon

Raspbian es un sistema operativo basado en la distribucion Debian de Linux. Se tratade una version optimizada de este sistema operativo que incluye drivers y herramientas es-pecıficas para la Raspberry Pi. Es un sistema operativo completo, con las funciones basicasdel sistema y la posibilidad de instalar caracterısticas adicionales en caso de necesidad.

Se ha elegido este sistema operativo por ser ligero, libre y el recomendado por ladocumentacion de Raspberry. Al ser el sistema operativo instalado en la Raspberry serael que soporte el resto del software. Debe cumplir y cumple con creces con todas lascaracterısticas para el correcto funcionamiento del sistema.

Linphone

Figura 6.8: Linphone icon

Linphone es un softphone de codigo abierto que dispone de las caracterısticas requeridaspor el sistema desarrollado. Se trata de un software que se registra en una PBX y permiteinteractuar con ella, es posible realizar llamadas, videollamadas, comprobar el estado deregistro del sistema, mantener una agenda de contactos y otras funcionalidades que no sonrelevantes para cumplir con nuestro objetivo.

Page 31: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 31

Una caracterıstica fundamental que hace idoneo a este softphone es que dispone deun demonio que se ejecuta en segundo plano en el sistema (linphonecsh), en este casoDebian, y nos permite ejecutar acciones desde la consola del sistema. Esta caracterısticaes fundamental ya que debera ser el sistema operativo y no el usuario quien interactuecon el softphone bajo demanda de la persona en situacion de dependencia o uno de susfamiliares.

6.2.2. Diseno de alto nivel y arquitectura general del sistema

El siguiente esquema ilustra la arquitectura general del sistema:

Figura 6.9: Diagrama general del sistema

Como se observa en la figura 4.9 el sistema consta de:

Elementos del sistema:

- Hardware:

- Raspberry Pi 3 model B

- Pantalla tactil oficial

- Altavoz bluetooth JBL Flip 2

- Microfono Krom Kimu

- Servidor VPS OVH SSD 1

- Amazon Dash Button

- Smartphone Android

- Software:

Page 32: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

32 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

- Nucleo de la aplicacion.

- Core Mantiene registrado el softphone y ofrece una interfaz para interactuarcon el

- Controlador altavoz Mantiene funcionando el altavoz

- Interfaz web de configuracion

- Capa de exposicion de servicios

- Aplicacion Android para realizar una llamada

- Modulo de sıntesis y reconocimiento de voz

- Aplicacion para la pantalla de la Raspberry

Elementos externos:

- PBX Asterisk

Cada elemento del sistema es independiente y se utiliza a traves del nucleo de laaplicacion. Se expone una serie de servicios REST a traves de un contenedor de aplicacionesTomcat [7] embebido en una aplicacion Java, de manera que cada operacion del nucleo quese desee utilizar desde el exterior del sistema se pueda explotar con facilidad. Se ha decididoutilizar la tecnologıa REST por ser un estilo de arquitectura para interoperabilidad basadoen HTTP para servicios web para operaciones sin estado.

Los componentes que extienden la funcionalidad del nucleo son facilmente adaptablesy extensibles para dotar al sistema de la maxima modularidad posible, teniendo siempreen mente la usabilidad y escalabilidad del sistema.

Los componentes hardware son sustituibles por componentes analogos y en caso desustitucion sera necesario configurarlos para que la Raspberry sea capaz de utilizarloscorrectamente. Esto es gracias a las interfaces expuestas para las comunicaciones entremodulos.

Gracias a esta implementacion se consigue un piloto que ofrece las funciones descritasanteriormente de forma satisfactoria.

A continuacion se detalla cada elemento del sistema, en el orden de explicacion que seha considerado mas adecuado para la comprension general del sistema:

6.2.3. Nucleo de la aplicacion

La funcionalidad del nucleo es mantener una serie de scripts independientes en conti-nua ejecucion con el objetivo del correcto funcionamiento de los componentes basicos delsistema.

Estructura del nucleo

El nucleo de la aplicacion esta escrito en Python. Para conseguir el orden y la escalabi-lidad de la misma esta estructurada en paquetes. Cada carpeta contenedora de un paquetecontiene un archivo init .py, este archivo indica a Python que el directorio actual debeser tratado como un contenedor de scripts, previene que accidentalmente se cargue codigoque no pertenece a la aplicacion y gracias a el se puede cargar codigo de diferentes archivos.Se ha elegido Python para esta parte ya que se trata de un lenguaje que permite trabajarde forma rapida e integrar sistemas de forma eficiente.

Page 33: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 33

La aplicacion tiene la siguiente estructura:

Directorio raız: En este apartado se encuentran los shell scripts preparados para lanzarcorrectamente los diferentes scripts de Python, se utilizan para manejar comodamente lasdiferentes funciones del nucleo y han sido muy utiles a la hora de testear la aplicacion.

./scripts: Contiene los diferentes paquetes en los que se divide la aplicacion.

./scripts/log: Este directorio contiene los logs de la aplicacion, no es un paquete Python,se utiliza para registrar la actividad del sistema, ha sido muy util a la hora de depurar laaplicacion.

./scripts/softphone: Paquete python, que contiene un demonio encargado de mante-ner en funcionamiento y registrado el Softphone y una serie de scripts que soportan sufuncionalidad. Explota las funcionalidades de linphonecsh.

./scripts/speaker: Paquete Python que maneja el altavoz. Es necesario ya que al tra-tarse de un altavoz Bluetooth es fundamental manejar correctamente su conexion con laRaspberry y mantenerlo funcionando en caso de haber problemas.

./scripts/utils: Paquete Python de utilidades que contiene funciones que seran utilespara el resto de scripts que forman el nucleo.

./scripts

En este directorio se encuentran diferentes archivos .sh (shell script). Como se hamencionado anteriormente, son los encargados de ejecutar los scripts Python. Se utilizanpara simplificar su ejecucion y son los que seran ejecutados desde otras aplicaciones, comola aplicacion Java que expone los servicios REST.

Los scripts disponibles son:

- executeBluetoothcrlWrapperTest.sh

- executeCallExtension.sh

- executeCheckRegisterStatus.sh

- executeHangup.sh

- executeInitialRegister.sh

- executeRegisterDaemon.sh

- executeSpeakerDaemon.sh

- executeSpeakerOnce.sh

- executeSpeakerSink.sh

- executeUnregister.sh

Como establecen las practicas de codigo limpio[8], los nombres de estos scripts sondescriptivos y su estructura es simple e identica en cada uno de ellos, excepto que, eviden-temente, cada uno de ellos maneja un script en concreto.

Por ejemplo el contenido de executeRegisterDaemon.sh se muestra en el listado 1

Page 34: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

34 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

1 #!/ bin / sh2

3 cd ”$ ( dirname ”$0” ) ”4 PYTHONPATH=/home/proycpp/dev/proycpp python −m s c r i p t s . so f tphone .

registerDaemon $1

Listing 6.1: Contenido de executeRegisterDaemon.sh

Lo que hace este script es indicar al sistema que establezca el path the Python en eldirectorio en el que se encuentra la raız del proyecto Python y, posteriormente, ejecutar elscript registerDaemon que se encuentra en el paquete scripts.softphone. Como parametrole pasa un comando, normalmente start para que arranque el demonio.

./scripts/utils

En este directorio hay dos scripts que se utilizan desde el resto del proyecto. Implemen-tan funcionalidades y utilidades que seran recurrentes en el desarrollo del resto de scriptsdel nucleo.

daemon.py Este script esta extraıdo de [1]. Su funcionamiento es sencillo, al igual quelos demonios UNIX se eleva a sı mismo mediante un fork() y pasa de estar controlado porel usuario que lo ejecuta a estarlo por el sistema operativo. Posteriormente almacena supropio PID (Process Identificator) en un archivo. Cada vez que se llame a una funciondel demonio, este, comprobara si existe o no un proceso asociado con dicho id y si existe,lo creara y ejecutara la accion desde el proceso que ya esta funcionando. En caso contra-rio lo creara, elevara y almacenara, para posteriormente ejecutar igualmente las accionesasignadas con el comando solicitado.

Hay dos fragmentos de codigo especialmente interesantes en este script, mostrados enlistado 2 y listado 3.

1 de f daemonize ( s e l f ) :2 ”””Deamonize c l a s s . UNIX double f o rk mechanism . ”””3 t ry :4 pid = os . f o rk ( )5 i f pid > 0 :6 # ex i t f i r s t parent7 sys . e x i t (0 )8 except OSError as e r r :9 sys . s t d e r r . wr i t e ( ’ f o rk #1 f a i l e d : {0}\n ’ . format ( e r r ) )

10 sys . e x i t (1 )11 # decouple from parent environment12 #os . chd i r ( ’ / ’ )13 os . s e t s i d ( )14 os . umask (0 )15

16 # do second fo rk17 t ry :18 pid = os . f o rk ( )19 i f pid > 0 :20 # ex i t from second parent21 sys . e x i t (0 )22 except OSError as e r r :23 sys . s t d e r r . wr i t e ( ’ f o rk #2 f a i l e d : {0}\n ’ . format ( e r r ) )24 sys . e x i t (1 )25

Page 35: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 35

26 # r ed i r e c t standard f i l e d e s c r i p t o r s27 sys . s tdout . f l u s h ( )28 sys . s t d e r r . f l u s h ( )29 s i = open ( os . devnul l , ’ r ’ )30 so = open ( os . devnul l , ’ a+’ )31 se = open ( os . devnul l , ’ a+’ )32

33 os . dup2 ( s i . f i l e n o ( ) , sys . s td in . f i l e n o ( ) )34 os . dup2 ( so . f i l e n o ( ) , sys . s tdout . f i l e n o ( ) )35 os . dup2 ( se . f i l e n o ( ) , sys . s t d e r r . f i l e n o ( ) )36

37 # wr i t e p i d f i l e38 a t e x i t . r e g i s t e r ( s e l f . d e lp id )39

40 pid = s t r ( os . ge tp id ( ) )41 with open ( s e l f . p i d f i l e , ’w+’ ) as f :42 f . wr i t e ( pid + ’ \n ’ )

Listing 6.2: Daemon.py Extraido de [1]

En el metodo daemonize se realiza el proceso descrito para elevar los privilegios delscript y almacenar su PID.

1 # Get the pid from the p i d f i l e2 t ry :3 with open ( s e l f . p i d f i l e , ’ r ’ ) as pf :4 pid = in t ( pf . read ( ) . s t r i p ( ) )5 except IOError :6 pid = None7

8 i f not pid :9 message = ” p i d f i l e {0} does not e x i s t . ” + \

10 ”Daemon not running ?\n”11 sys . s t d e r r . wr i t e ( message . format ( s e l f . p i d f i l e ) )12 re turn # not an e r r o r in a r e s t a r t

Listing 6.3: Detalle de daemonize Extraido de [1]

Mediante este fragmento de codigo se comprueba si el proceso ha sido lanzado y se dapaso a las siguientes acciones del script en caso de existir, en caso contrario se termina laejecucion del mismo y se muestra un error por la salida estandar de error.

Los scripts que se quieran hacer funcionar como demonios deben extender esta clase ysobreescribir su metodo run”. Como se vera mas adelante se distinguira entre los scriptslanzados como script principal y aquellos ejecutados simplemente como scripts de unaunica ejecucion.

proycpp utils.py A diferencia del anterior script, en este caso, este script pretendeexponer metodos de uso general, es conveniente explicar cada uno de ellos, pues seranutilizados constantemente en todo el nucleo.

config logger El metodo descrito en el listado 4.4 se encarga de configurar el sistemade logs.

1 de f c o n f i g l o g g e r (name , f i l eD i r , f i leName , l e v e l=logg ing . INFO) :2 ”””3 I n i t i a l c on f i gu r a t i on f o r a l o gg e r

Page 36: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

36 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

4 name I s the name f o r the log to c on f i g5 f i l e D i r Re la t i v e path to the l o gF i l e6 f i leName Name o f the t a r g e t f i l e7 l e v e l l ogg ing .LEVEL f o r t h i s l og8 I t r e tu rn s the l ogg e r ready to use9 ”””

10 l o gg e r = logg ing . getLogger (name)11 i f not l o gg e r . hand le r s :12 hdl r = logg ing . F i l eHandle r ( f i l e D i r + fi leName )13 f o rmatte r = logg ing . Formatter ( ’ %(asct ime ) s %(levelname ) s %(message ) s ’ )14 hdl r . setFormatter ( fo rmatte r )15 l o gg e r . addHandler ( hd l r )16 l o gg e r . s e tLeve l ( l e v e l )17 re turn l ogg e r

Listing 6.4: Configuracion del sistema de logs

Permite especificar:

- El nombre del log que se esta configurando.

- El directorio en el que se almacenara.

- El nombre del fichero que va a almacenar este log.

- El nivel de Logging (INFO, ERROR, WARNING, CRITICAL) para este log enconcreto.

log message El metodo descrito en el listado 4.5 se encarga de registrar un mensajeen un log determinado.

1 de f log message ( logs , l e v e l , message ) :2 ”””3 Log a message in every log in the l ogSe t4 l o g s I s the logSet , the message w i l l be logged in any s i n g l e l og passed

here as argument5 l e v e l l ogg ing .LEVEL of the cur rent message6 message I s the message to log7 ”””8 l o gg e rLeve l={9 l o gg ing . INFO : lambda message : l o gg e r . i n f o ( message ) ,

10 l o gg ing .ERROR : lambda message : l o gg e r . e r r o r ( message ) ,11 l o gg ing .WARNING : lambda message : l o gg e r . warning ( message ) ,12 l o gg ing .CRITICAL : lambda message : l o gg e r . c r i t i c a l ( message )13 }14 f o r l o gg e r in l o g s :15 l o gg e rLeve l [ l e v e l ] ( message )

Listing 6.5: Metodo log message

Permite especificar:

- Los logs en los que se debe incluir el mensaje

- El nivel de logging del mensaje en cuestion

- El mensaje a loguear

Page 37: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 37

handle errors El metodo descrito en el listado 4.6 obtiene un descriptor de erroresde un archivo de configuracion y los registra, utiliza un codigo para identificar el estadoen el que se encuentra la aplicacion y registra los diferentes errores configurados en unobjeto JSON. Permite mantener centralizados los errores posibles en un unico archivo ymantener mas limpia la aplicacion. Utiliza expresiones regulares para detectar problemasdurante la ejecucion del script.

1 de f hand l e e r r o r s ( p rope r t i e s , l ogs , e r ro rSe t , magic ) :2 ”””3 This func t i on w i l l d e t e c t and log every e r r o r s con f i gu r ed in the

p r op e r t i e s f i l e f o r a s t a t e detemined v ia e r r o rS e t and magic4 p r op e r t i e s I s the j son ob j e c t readed from the p r op e r t i e s f i l e5 l o g s I s the l ogSe t where the e r r o r s detec ted s h a l l be logged6 e r r o rS e t I s the name o f the s c r i p t , at p r op e r t i e s f i l e , i t d e f i n e s the

j son ob j e c t that conta in s a l l the e r r o r s to handle7 magic I s a number that d i s agg r ega t e the cur rent s t a tu s o f the s c r i p t8 ”””9 f o r e r r o r in p r op e r t i e s [ ” e r r o r s ” ] [ e r r o rS e t ] :

10 i f e r r o r [ ”magic” ] == magic :11 p = re . compi le ( e r r o r [ ” regexp ” ] )12 with open ( p r op e r t i e s [ ” f i l e s ” ] [ ”tmp” ] [ e r r o r [ ” f i l e ” ] ] , ’ r ’ ) as

c o n t e n t f i l e :13 chain = c o n t e n t f i l e . read ( )14 m=p . match ( chain )15 i f (m) :16 l og message ( logs , l o gg ing .ERROR, ’ Error Handling [ ’ + e r r o rS e t + ’ ] ’

+ e r r o r [ ”name” ] )17 pr in t ( ’ERROR: ’ + e r r o r [ ”name” ] )

Listing 6.6: Funcion handle errors

Permite especificar:

- El objeto properties encargado de indicar los diferentes errores posibles.

- Los logs en los que se deben registrar los errores detectados.

- El conjunto de errores a valorar en el estado en el que se encuentra la aplicacion enel momento de la llamada a esta funcion.

- Un numero denominado magic que se utiliza para determinar el estado de la aplica-cion y tener en cuenta solamente los errores indicados para un estado determinadodentro del error set.

En el listado 4.7 se puede ver un ejemplo de la configuracion referente a esta funcion.Este archivo de configuracion se explicara en profundidad mas adelante.

1 ” e r r o r s ” : {2 ” i n i t i a l R e g i s t e r ” : [3 {4 ”code” : 1 ,5 ”magic” : 0 ,6 ”name” : ”Linphone daemon a l ready running stop i t be fore , t ry :

l inphonecsh e x i t ” ,7 ” regexp ” : ”A running l inphonec has been found , not spawning a second

one \\ . ” ,8 ” f i l e ” : ” s t d e r r ”9 } ,{

10 ”code” : 2 ,

Page 38: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

38 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

11 ”magic” : 1 ,12 ”name” : ”Something went wrong during r e g i s t e r , REGISTER STATUS=−1 This

might be caused because the daemon i s not ready yet or a bad authcon f i gu r a t i on ” ,

13 ” regexp ” : ” .∗ r e g i s t e r e d=−1.∗” ,14 ” f i l e ” : ” stdout ”15 }16

17 ]18 }

Listing 6.7: Configuracion para handle errors

Funcionamiento general de un demonio

Los scripts como registerDaemon.py contienen una clase llamada MyDaemon, que ex-tiende de la clase daemon.py antes mencionada. Esta clase padre se carga desde el directoriorelativo ../utils/daemon.py como se puede observar en la cabecera del archivo.

Podemos utilizar esta clase de dos formas:

- Como demonio

- Como clase

Si lo utilizamos lanzandolo como programa principal se comportara como un demonioLinux, para llamarlo de esta forma podemos utilizar el comando descrito en el listado 4.8

1 PYTHONPATH=/home/proycpp/dev/proycpp python −m s c r i p t s . so f tphone .registerDaemon s t a r t

Listing 6.8: Ejecucion del script registerDaemon

Por comodidad hay un script disponible en la raız del repositorio que ejecuta estecomando, pero no es necesario lanzarlo desde el shell script.

Lanzando el script de este modo Python identificara que se trata del ”main”de laaplicacion, mediante la lınea de codigo descrita en el listado 4.9

1 i f name == ” ma in ” :

Listing 6.9: Define el comportamiento si es el programa principal

Cuando esto se cumpla identificamos que se trata de un demonio, se instanciara un objetoMyDaemon y se ejecutaran sus funciones correspondientes al parametro pasado al comandode ejecucion del script. En caso de haberle enviado un comando no valido se mostrara unmensaje de error y en caso de no pasarle ningun comando se mostrara una ayuda indicandolos parametros validos.

1 i f name == ” ma in ” :2 daemon = MyDaemon( ’ /tmp/ registerDaemon . pid ’ )3 i f l en ( sys . argv ) == 2 :4 i f ’ s t a r t ’ == sys . argv [ 1 ] :5 daemon . s t a r t ( )6 #daemon . run ( )7 e l i f ’ s top ’ == sys . argv [ 1 ] :8 daemon . stop ( )9 e l i f ’ r e s t a r t ’ == sys . argv [ 1 ] :

10 daemon . r e s t a r t ( )

Page 39: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 39

11 e l s e :12 pr in t ”Unknown command”13 sys . e x i t (2 )14 sys . e x i t (0 )15 e l s e :16 pr in t ”usage : %s s t a r t | stop | r e s t a r t ” % sys . argv [ 0 ]17 sys . e x i t (2 )

Listing 6.10: Comportamiento como demonio

Se ha explicado con anterioridad el funcionamiento del demonio pero aquı vemos unejemplo claro de su funcionamiento:

La funcion run() no sera llamada de manera directa, en cambio sı que se ejecutarala funcion start() de la clase padre, que se encargara de elevar privilegios y desacoplarel demonio de la salida actual para permitir que se ejecute en segundo plano cuando seejecute. Posteriormente llamara al metodo run() descrito en la clase MyDaemon.

En caso de cargar este script en otro la variable name no valdra main y el scriptno hara ”nada”pero sı nos permitira instanciar clases del tipo MyDaemon, permitiendonosası ejecutar su funcionalidad llamando al metodo run().

Este funcionamiento sera identico en cada uno de los scripts que extiendan de la claseDaemon.

el metodo run() En el metodo run() se ejecuta la logica del script.

el metodo loadConfiguration Todos los scripts con suficiente complejidad como pa-ra necesitar logs o configuracion disponen de un metodo llamado loadConfiguration quese encarga de configurar los logs y de cargar los archivos .properties necesarios para elfuncionamiento del script.

Este sera el primer metodo que se utilice en todos los scripts que dispongan de el, apartir de ese momento se podran utilizar tanto los logs como las propiedades previamentecargadas.

./scripts/softphone

En este directorio estan los scripts encargados de manejar el Softphone, realizar accio-nes y mantenerlo correctamente registrado. Permite actualmente realizar funciones entrelas que se encuentran el establecimiento de llamadas, colgar y comprobar el estado de re-gistro, entre otras. En caso de no poder registrar correctamente el Softphone se consideraun fallo grave y se reinicia el sistema.

registerDaemon.py

Cuando se ejecute desconectara el Softphone de la centralita, esperara unos segundosy volvera a conectar con la centralita, de forma que de estar ya registrado reiniciara laconexion del Softphone con la centralita.

Posteriormente verificara el estado de conexion del Softphone y en caso de desconexiondel mismo repetira el proceso descrito anteriormente. Si el error de conexion persiste tras4 intentos de conexion se reiniciara todo el sistema.

Concretamente este scritp esta ademas manejado por Crontab (un demonio del sistemaoperativo que permite la ejecucion perıodica de comandos del sistema mediante un archivode configuracion), de forma que se ejecutara automaticamente en cada reinicio.

Page 40: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

40 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Para ello hace uso de tres de los scripts que comparten su classpath y seran explicadosa continuacion.

Mejoras posibles sobre registerDaemon De la forma en que esta construido el siste-ma esta preparado para implementar un modulo que permita, de manera automatica, quecuando se detecten errores graves en el sistema o la imposibilidad de registrar el Softphonecontra la PBX se envıe una notificacion por cualquier medio (como email, SMS, llama-da telefonica, notificacion Android, notificacion vıa Telegram, etc) a un operador que seacapaz de verificar el estado del sistema y repararlo en caso de necesidad.

Scripts para la interaccion con el softphone Los siguientes scripts utilizan la apli-cacion linphonecsh para interactuar con el Softphone instalado en el sistema (Linphone).Esta aplicacion permite lanzar el Softphone como un demonio e interactuar con el median-te los comandos expuestos a traves de esta aplicacion. No es el objetivo de este documentoprofundizar mas en la arquitectura del Softphone, pero para mas informacion se puedeconsultar su referencia[9].

initialRegister.py

Este script se encarga de registrar el Softphone contra la PBX.El codigo es muy basico y no requiere ninguna explicacion adicional. los comandos que

ejecutara seran, en este orden:

- linphonecsh init (Inicia el demonio linphonecsh)

- linphonecsh register –host {PBX IP}:{PBX service port} –username {username} –password {user password}(Registra el softphone contra una centralita ubicada en la direccion ip {PBX IP}en el puerto {PBX service port} con nombre de usuario {username} y contrasena{user password})

- linphonecsh status register(Verifica el estado de registro del cliente linphone)

Registrara en los logs dos tipos de errores que no estan manejados directamente poreste script

- Linphone daemon already running stop it before, try: linphonecsh exit(El demonio ya esta en funcionamiento y debera pararse manualmente mediante elcomando linphonecsh exit)

- Something went wrong during register, REGISTER STATUS=-1 This might be cau-sed because the daemon is not ready yet or a bad auth configuration(El demonio no esta funcionando y no se puede registrar el usuario)

checkRegisterStatus.py

Este script verificara el estado de registro del Softphone y devolvera un valor booleanindicando si esta todo funcionando correctamente. Utiliza el comando linphonecsh statusregister para verificar el estado de conexion.

Ademas de devolver el resultado mantiene un log con el estado en cada ejecucion delmismo.

Page 41: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 41

unregister.py

Este script se encarga de desconectar el Softphone, simplemente ejecutara el comandolinphonecsh unregister y logueara su ejecucion.

Scripts para el manejo del Softphone

Ademas de registrar el Softphone y mantenerlo ası, aspecto fundamental para el co-rrecto funcionamiento de la aplicacion, es necesario poder realizar llamadas y colgar elSoftphone en un momento dado. Estas dos son las funciones desarrolladas hasta el mo-mento, pero se podrıan codificar otras, como descolgar el Softphone en caso de ser necesa-rias. El sistema esta organizado de forma que resultarıa muy sencillo implementar nuevasfuncionalidades, siendo necesario exclusivamente anadir nuevos scripts en este nivel parapoder ejecutarlos de manera analoga a los que se explican aquı.

callExtension.py Es el script encargado de llamar a una extension. Lo hace mediante elcomando linphonecsh dial {extension number}. Que, evidentemente, realiza una llamadaa una extension dada. De nuevo, este script loguea sus acciones de forma que quedararegistrada cualquier llamada realizada.

hangup.py Este script se encarga de colgar una llamada. Lo hace mediante el comandolinphonecsh hangup. Igual que el resto de scripts registrara toda su actividad.

Scripts para el manejo del altavoz

Ademas de mantener el Softphone conectado y con capacidad de interactuar con otroselementos del sistema es necesario que el altavoz, al ser un dispositivo Bluetooth, se man-tenga conectado y funcionando.

Para ello, en el nucleo hay un paquete destinado a mantenerlo conectado.El paquete speaker, ubicado en /scripts/speaker contiene una clase obtenida de llamada

bluetoothctl.py

bluetoothctl.py Esta clase ofrece todos los metodos necesarios para manejar dispositi-vos Bluetooth desde el sistema operativo, tiene la ventaja de estar escrita en Python, porlo que se puede integrar facilmente en la aplicacion.

Sus metodos se explicaran mas adelante, la implementacion de los mismos no es rele-vante ya que sencillamente adaptan la interfaz ofrecida por el sistema operativo a Python.

speakerDaemon.py Este script es un demonio que mantiene el altavoz conectado enla medida de lo posible, ofrece mas opciones que los demonios antes mencionados ya quesu funcionamiento es ligeramente mas complejo.

las opciones disponibles son:

- sink

- once

- start

- stop

- restart

Page 42: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

42 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

El metodo run() se apoya en el resto de metodos disponibles en esta clase, cada unode ellos puede ser llamado desde el exterior importando el script en cualquier otro.

En concreto el metodo run() realiza los pasos indicados en el listado 11 para conectary mantener conectado el altavoz de manera constante, ya que al tratarse de un dispositivoBluetooth, cuando pasa un tiempo sin recibir senales se desconecta para ahorrar baterıa.Este mecanismo podrıa no ser necesario con un hardware distinto y es sencillo realizaruna conexion y terminar la ejecucion del script, desactivando ası el chequeo constante deconexion y posteriores re-conexiones. Para ello existe el metodo once().

1 de f run ( s e l f ) :2 [ p r ope r t i e s , l ogs , c on f i g l o g g e r , log message , h and l e e r r o r s ]= s e l f .

l oadCon f i gura t i on ( )3 l og message ( logs , l o gg ing . INFO, ’ speakerDaemon . py ’ + ’ Daemon START’ )4 whi le True :5 s e l f . keepPulseaudio ( p rope r t i e s , logs , log message )6

7 # Check and try to connect the speaker8 l og message ( logs , l o gg ing . INFO, ’ speakerDaemon . py ’ + ’ check ing speaker

connect s t a tu s ’ )9 bl = Blue too thc t l ( )

10 dev i c e I n f o = bl . g e t c omp l e t e d e v i c e i n f o ( p r op e r t i e s [ ” speaker ” ] [ ”mac” ] )11 i f d ev i c e I n f o [ ’ Connected ’ ] == ’ no ’ :12 l og message ( logs , l o gg ing . INFO, ’ speakerDaemon . py ’ + ’ speaker not

connected ’ )13 i f s e l f . i sDev i c eD i s cove rab l e ( bl , p r op e r t i e s [ ” speaker ” ] [ ”mac” ] ) :14 l og message ( logs , l o gg ing . INFO, ’ speakerDaemon . py ’ + ’ speaker

d i s c ov e r ab l e ’ )15 isOk = True16 i f d ev i c e I n f o [ ’ Paired ’ ] == ’ no ’ :17 isOk = bl . pa i r ( p r op e r t i e s [ ” speaker ” ] [ ”mac” ] )18 i f isOk :19 l og message ( logs , l o gg ing . INFO, ’ speakerDaemon . py ’ + ’ speaker

pa i r ed ’ )20 i f d ev i c e I n f o [ ’ Trusted ’ ] == ’ no ’ :21 isOk = bl . t r u s t ( p r op e r t i e s [ ” speaker ” ] [ ”mac” ] )22 i f isOk :23 l og message ( logs , l o gg ing . INFO, ’ speakerDaemon . py ’ + ’ speaker

t ru s t ed ’ )24 e l s e :25 l og message ( logs , l o gg ing .ERROR, ’ speakerDaemon . py ’ + ’ speaker

t r u s t f a i l e d ’ )26 i f b l . connect ( p r op e r t i e s [ ” speaker ” ] [ ”mac” ] ) :27 l og message ( logs , l o gg ing . INFO, ’ speakerDaemon . py ’ + ’ speaker

connected ’ )28 e l s e :29 l og message ( logs , l o gg ing .ERROR, ’ speakerDaemon . py ’ + ’ speaker

connect f a i l e d ’ )30 e l s e :31 l og message ( logs , l o gg ing .ERROR, ’ speakerDaemon . py ’ + ’ speaker pa i r

f a i l e d ’ )32 e l s e :33 l og message ( logs , l o gg ing . INFO, ’ speakerDaemon . py ’ + ’ speaker not

d i s c ov e r ab l e must be f i x ed manually ’ )34

35 # Check and s e t s ink36 i f ( s e l f . checkSinkStatus ( p rope r t i e s , logs , log message ) ) :37 s e l f . syncSpeakerAsDefaultAudioStream ( prope r t i e s , logs , log message )38

Page 43: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 43

39 bl . c l o s e ( )40 time . s l e e p ( f l o a t ( p r op e r t i e s [ ”daemon” ] [ ” checkStatusPer iod ” ] ) )

Listing 6.11: Metodo run()

El metodo run() entra en un bucle infinito que realiza constantemente y en este ordenlas siguientes acciones:

- Linea 5 Se lanza el script keepPulseaudioStatus que sera explicado mas adelante enesta seccion

- Linea 9 Se conecta al demonio Bluetoothclt

- Linea 10 Obtine del demonio Bluetoothctl la informacion asociada al altavoz a travesde su direccion mac

- Linea 11 Si el altavoz se encuentra conectado salta a [sync, Linea 36] si no continua

- Linea 13 Verifica que el altavoz sea visible

- Linea 16 Verifica que el altavoz este emparejado

- Linea 20 Verifica que el altavoz este en la lista blanca de dispositivos, si no lo estalo anade

- Linea 26 Trata de conectar la Raspberry con el altavoz

- Linea 36 [sync] Verifica si los canales de salida de audio estan configurados correc-tamente, si lo estan espera el tiempo especificado en la configuracion y repite. Si nolo estan los configura correctamente

configuration.properties.json La configuracion correspondiente a este script se en-cuentra en el mismo directorio que el mismo y conviene destacar el siguiente fragmento,que es el que contiene los parametros mas importantes del mismo:

1 ” speaker ” :{2 ” type” : ” b luetooth ” ,3 ”mac” : ” 00 :1D:DF:6B: 3E: 0C” ,4 ” syncChain” :{5 ”name” : ” b l u e z s i nk .00 1D DF 6B 3E 0C” ,6 ” index ” : 2 ,7 ” p r o f i l e ” : ”a2dp”8 }9 } ,

10 ”daemon” :{11 ” checkStatusPer iod ” : ”20”12 }

Listing 6.12: Archivo de configuracion del altavoz

No es necesario comprender el resto del script para entender el funcionamiento globaldel sistema.

Page 44: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

44 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

checkPulseaudioStatus.py Uno de los principales problemas con el altavoz ha sido queel sistema cambiaba el dispositivo de salida de audio por defecto debido a un modulo quese encarga de detectar la salida de audio mas adecuada y no se ha podido desactivar, paraevitar este problema existe un script adicional necesario para el correcto funcionamientodel mismo que se encarga de volver a configurar el audio cuando cambia su configuracion.

Este script no funciona como un demonio, pero sı que carga el sistema de propiedadesy logging del resto de scripts. Sera llamado bajo demanda por el demonio speakerDaemon.

Su funcionamiento es muy basico, se encarga de llamar al demonio del sistema pactl,encargado de manejar PulseAudio[10]. Utilizando el comando list, lista la configuracionactual de PulseAudio y obtiene dos ficheros, uno para la salida estandar y otro para lasalida de error. Verifica la correcta configuracion y delega su correccion al script speaker-Daemon.py.

./scripts/speech

En este directorio estan los scripts para reconocimiento de voz.

Los archivos bajo este directorio son:

- configuration.properties.json

- speechDaemon.py

- startSpeechRecognition.py

- stopSpeechRecognition.py

El demonio se encarga de cargar la configuracion y arrancar o parar el sistema dereconocimiento de voz.

Su arquitectura es identica a la descrita en anteriores apartados. Los scripts startS-peechRecognition y stopSpeechRecognition se encargan de arrancar o parar la aplicacionjava encargada del reconocimiento de voz, que sera explicada mas adelante, en la seccion4.2.7 Modulo de reconocimiento y sıntesis de voz.

6.2.4. Capa de exposicion de servicios

La capa de exposicion de servicios se encarga de ofrecer funcionalidades al exterior detal forma que puedan ser explotadas tanto desde fuera de la aplicacion como por otrosmodulos de la misma. Se ha optado por ofrecer un API REST ya que permite cumplirambos requisitos y favorece la integracion con otras herramientas y su explotacion de unamanera sencilla.

Esta parte del sistema se ha decidido desarrollar con Spring Boot por ser un frameworkque ofrece todas las funcionalidades que se necesitan para ofrecer un servicio con lasmencionadas caracterısticas.

La aplicacion Spring Boot lleva embebido un contenedor de aplicaciones Tomcat que selevanta al ejecutar la aplicacion y despliega un .war que implementa una serie de serviciosREST.

Los modulos de Spring que se han utilizado han sido:

- Spring Security Para implementar las funciones de seguridad, concretamente la au-tenticacion por token.

- Spring AOP Para simplificar el codigo y mantenerlo mas limpio y escalable.

Page 45: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 45

- Spring MVC Para exponer los diferentes servicios REST.

Ademas de Spring se ha utilizado Maven como gestor de dependencias, de construc-cion y de despliegue. Maven nos permite manejar todas las dependencias del proyecto,descargarlas automaticamente y ademas gestionar los perfiles de despliegue. Estos perfilessimplifican la instalacion de la aplicacion en un nuevo entorno, permitiendonos especificaren un archivo de propiedades la configuracion que utilizara la aplicacion en tiempo deejecucion. De forma que todos los parametros dependientes del sistema concreto en el quese va a ejecutar la aplicacion estan recogidos en un unico archivo de configuracion queademas soporta diferentes perfiles en tiempo de compilacion.

Como ya hemos visto, el nucleo de la aplicacion se encarga de realizar las operacionesbasicas e interactuar de manera directa con el sistema. En el caso de la aplicacion RESTsu funcion sera interactuar tanto con el nucleo como, en menor medida, con el sistemapara exponer las funciones que nos interesa que sean utilizadas por diferentes modulos dela aplicacion sin necesidad de que estos tengan acceso al nucleo de manera directa.

Esta decision incrementa significativamente la seguridad con respecto a un escenarioen el que dejasemos expuesto el nucleo, lo que significarıa dar a un potencial atacanteacceso al sistema operativo de una manera casi directa. Serıa posible exponer los serviciosREST directamente desde Python, pero en caso de vulnerar la seguridad de los mismos,de nuevo un potencial atacante, habrıa escalado privilegios a nivel de root en la maquinafısica y no en la MV de Java como sucederıa en el caso de acceder a traves de los serviciosREST de Spring Boot.

Servicios REST expuestos

A continuacion se desglosan los servicios REST expuestos, que cuelgan de /entry-pointy son los que componen el API REST.

/softphonestatus Devuelve el estado de conexion del softphone. Los posibles estadosson:

- 0 - Desconectado

- 1 - Llamada establecida

- 2 - Conectado

Este servicio es utilizado por la aplicacion Angular para mostrar feedback al usuariodel estado actual del sistema. Adicionalmente puede ser utilizado por un operador parael mantenimiento del sistema, ya sea desde la herramienta de configuracion o de maneradirecta.

/logs/{lines} Este servicio tiene como parametro el numero de lineas que queremosobtener del log general, hara el equivalente al comando tail de Linux sobre el fichero delogs global. El comando tail devuelve las ultimas N lıneas de un archivo.

Sera utilizado por la aplicacion Angular para mostrar los ultimos registros del log conla finalidad de diagnosticar un posible problema. De nuevo se puede extender a un usoremoto para un diagnostico del sistema.

/ping/{ip} Este servicio realizara un ping a una direccion IP desde la Raspberry ydevolvera el resultado. Se puede lanzar desde la aplicacion Angular y de manera remota.Su funcion es el diagnostico de la red.

Page 46: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

46 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

/dial/{extension} Servicio que permite realizar una llamada a una extension desde laRaspberry. Devolvera simplemente un OK en caso de haber recibido la senal de llamada.Acepta como parametro la extension a la que llamar.

/hangup Permite colgar una llamada en curso desde la Raspberry. Lo utiliza la interfazde usuario Angular que se muestra en la pantalla de la Raspberry. Pero es posible uilizarlodirectamente desde la interfaz de configuracion o mediante una peticion directa.

/speakerDaemon/start Arranca el demonio manejador del altavoz. Puede ser necesa-rio en algunas ocasiones cuando el altavoz no esta correctamente sincronizado. Se puedellamar de manera directa o desde la interfaz de configuracion.

/speakerDaemon/stop Para el demonio manejador del altavoz. Es util para reiniciarla conexion con el mismo en caso de haber algun problema puntual. Se puede llamar desdela interfaz de configuracion o de manera directa.

/softphoneDaemon/start Arranca el demonio manejador del softphone, en caso deexistir algun problema de conexion con la PBX se puede solucionar ejecutando este co-mando. Esta disponible desde la herramienta de configuracion y mediante llamada directa.

/softphoneDaemon/stop Detiene el demonio manejador del softphone, al igual quelos ultimos servicios descritos se puede utilizar para restablecer el servicio tras un fallopuntual. Existe un acceso desde la herramienta de configuracion ademas de poder serllamado de manera directa.

/reboot Reinicia la Raspberry, en caso de existir algun problema puede ser resuelto deesta manera. Se puede llamar directamente o desde la herramienta de configuracion.

Page 47: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 47

Arquitectura de la aplicacion REST

Figura 6.10: Diagrama de clases de la aplicacion REST

Como se ha mencionado en 4.2.4 La arquitectura de esta aplicacion utiliza diferentesfuncionalidades de Spring Boot

6.2.5. Interfaz de usuario y configuracion

Para el desarrollo de esta parte del sistema se planteo inicialmente su desarrollo conPHP utilizando el framework Laravel, pero tras la implementacion de una maqueta y unanalisis mas profundo se determino que las funcionalidades que facilitaba Laravel no ibana ser necesarias y no justificaban el uso de un framework tan pesado. Ası que se decidiodesarrollar este modulo en Angular 6. Por ser un framework que nos permite implementarexactamente las funcionalidades que necesitamos sin necesidad de cargar y configurardiferentes modulos que no vamos a utilizar, como la gestion de roles, muchas dependenciasde PHP y el sistema de registro entre otras muchas que Laravel carga por defecto en elcodigo.

Page 48: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

48 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Una de las ventajas de Angular es que, a partir de su version 2 sugiere una arquitec-tura muy concreta para proyectos de pequeno y mediano tamano. Se ha aplicado dichaarquitectura de manera directa.

Este modulo del sistema implementa una interfaz que sera mostrada en la pantalla dela Raspberry de modo que se puedan realizar diversas acciones descritas mas adelante enesta misma seccion. Se apoya de manera directa en la exposicion de servicios implementadaen Java y explicada en la seccion 4.2.4 de este documento.

No es el objetivo de este documento explicar en profundidad la arquitectura de Angular6, pero para una mejor comprension del codigo por parte del lector, a continuacion seexplican los conceptos fundamentales de la misma:

Componentes Angular esta pensado para generar aplicaciones web de una sola pagina,es decir, no hay una redireccion entre las diferentes partes de la web, sino que el contenidode la misma es dinamico e ira cambiando en funcion de los diferentes eventos que van ocu-rriendo. Para simplificar el manejo de estos fragmentos dinamicos el codigo se estructuraen componentes. Cada componente es capaz de existir por si mismo, lo que no significanecesariamente que siempre tenga sentido mostrar un componente aislado en el navegador,pero su funcionalidad esta dividida, de forma que cada uno de ellos dispondra de su propialogica de negocio y su implementacion grafica. Cada componente esta formado por cuatroficheros que permiten su correcto funcionamiento. Estos son:

- foo.component.css Estilos especıficos del componente foo. Estos estilos no afectaranpor defecto a ningun otro componente ni a ninguna otra parte del codigo fuera deeste componente en concreto.

- foo.component.html El html que se inyectara en el punto de anclaje del componenteuna vez pintado.

- foo.component.ts El codigo typescript ligado a este componente. Las variables yfunciones descritas en este archivo tienen como alcance solamente este componente.

- foo.component.spec.ts Este archivo se utiliza para la creacion de test unitarios, esopcional.

Service Los servicios en angular son un tipo de librerıa de funciones que se implementancomo un singleton en una clase JavaScript. Se pueden inyectar en los componentes y en-riquecer su funcionalidad. Dado que los componentes tienen, cada uno, su propio codigo,cuando varios componentes o incluso varias aplicaciones van a necesitar utilizar codigocomun, lo ideal es implementar dicho codigo en un servicio para evitar repeticiones inne-cesarias de codigo o la implementacion del patron delegate[11] de manera innecesaria yexcesivamente compleja.

En esta aplicacion se ha implementado un servicio que se encarga de realizar las lla-madas a la API.

Modulo Un modulo se encarga de cargar y exponer diferentes dependencias a una partede la aplicacion. En nuestro caso solo es relevante el modulo principal, ya que es una apli-cacion lo suficientemente pequena como para no requerir mas estratificacion para aligerarsu carga.

Angular utiliza mucho la inyeccion de dependencias, la forma habitual de cargar unservicio en un componente o de utilizar elementos adicionales como emisores de eventos esmediante la misma y su uso esta facilitado por los modulos. De nuevo en este caso, cada

Page 49: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 49

una de las dependencias de la aplicacion esta expuesta a todos los modulos por no requerirde mas modularidad.

Los archivos mas relevantes son

angular.json Que incluye diferentes parametros de configuracion, como el metodopara transpilar la aplicacion, la ubicacion de algunos archivos importantes o el nombre dela aplicacion.

package.json Almacena un listado de las dependencias del proyecto, a traves de estearchivo es posible descargar todas las dependencias necesarias para el correcto funciona-miento de la aplicacion mediante npm (Node Package Manager).

Existe un directorio en la raız del proyecto que es conveniente explicar: El directorionode modules es el encargado de almacenar todas las dependencias del proyecto. Cuandonpm descargue las dependencias del mismo seran almacenadas en este directorio. Estoes importante ya que no sera necesario distribuir el contenido de este directorio ni paratrabajar en equipo con la aplicacion ni para desplegarla en el sistema huesped.

El codigo de la aplicacion esta incluido en el directorio src.

Contenido del directorio src

app

components

call-contacts

config-container

config

dial

log-component-container

log-controller

log-entry

log-viewer

ping

softphone

speaker

dashboard

softphone-status

interfaces

models

pipes

services

assets

environments

assets Contiene los recursos de la aplicacion, en este caso las tres imagenes que semuestran en la pantalla principal de la misma.

assets

p1.jpeg

p2.jpeg

p3.jpeg

Page 50: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

50 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

components El directorio components contiene todos los componentes de la aplica-cion. Hay una excepcion respecto a la estructura sugerida por Angular: Los componentesno deberıan estar agrupados en directorios (los aquı llamados container). Deberıan, segunel estandar de Angular, estar todos al mismo nivel. El modo sugerido de agruparlos siguien-do el criterio que se ha aplicado durante el desarrollo, es decir, por estar unos contenidoso bastante ligados a los otros, es mediante el uso de modulos. Por la simplicidad de estaaplicacion no se ha considerado necesario y se ha decidido distribuirlos en subdirectorioscon la finalidad de mejorar la legibilidad y mantenibilidad del codigo sin crear multiplesmodulos innecesarios.

Page 51: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 51

call-contacts

call-contacts.component.css

call-contacts.component.html

call-contacts.component.spec.ts

call-contacts.component.ts

config-container

config

config.component.css

config.component.html

config.component.spec.ts

config.component.ts

dial

dial.component.css

dial.component.html

dial.component.spec.ts

dial.component.ts

log-component-container

log-controller

log-controller.component.css

log-controller.component.html

log-controller.component.spec.ts

log-controller.component.ts

log-entry

log-entry.component.css

log-entry.component.html

log-entry.component.spec.ts

log-entry.component.ts

log-viewer

log-viewer.component.css

log-viewer.component.html

log-viewer.component.spec.ts

log-viewer.component.ts

ping

ping.component.css

ping.component.html

ping.component.spec.ts

ping.component.ts

softphone

softphone.component.css

softphone.component.html

softphone.component.spec.ts

softphone.component.ts

Page 52: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

52 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

speaker

speaker.component.css

speaker.component.html

speaker.component.spec.ts

speaker.component.ts

dashboard

dashboard.component.css

dashboard.component.html

dashboard.component.spec.ts

dashboard.component.ts

softphone-status

softphone-status.component.css

softphone-status.component.html

softphone-status.component.spec.ts

softphone-status.component.ts

services El directorio services almacena los servicios, en este caso solo tenemos elservicio encargado de explotar el API.

services

api.service.spec.ts

api.service.ts

La interfaz de usuario y configuracion cumple dos funciones simultaneamente, ofreceruna interfaz de usuario y proveer un medio para el diagnostico inicial del sistema en casode requerir mantenimiento.

Page 53: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 53

Interfaz de usuario

Figura 6.11: Pantalla principal aplicacion Angular

Por un lado ofrece una interfaz amigable que se mostrara en la pantalla tactil encaso de disponer de ella el sistema. Esta interfaz muestra tres imagenes que pueden serpersonalizadas mediante configuracion y estaran asociadas a una extension. Al pulsarsobre una de ellas o su icono de llamada se podra realizar una llamada a la extension de lapersona asociada a la imagen. Una vez pulsado se realizara la llamada y durante la mismala interfaz cambiara, pasando a mostrar un boton de colgar la llamada y la imagen de lapersona a la que se ha llamado.

Page 54: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

54 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Figura 6.12: Pantalla durante una llamada

Esta interfaz esta pensada para que la persona en situacion de dependencia puedarealizar una llamada a sus familiares, por ejemplo, pulsando sobre su imagen.

Ademas de esto muestra en todo momento en la parte superior el estado de conexiondel Softphone.

Figura 6.13: Mensaje de error Softphone desconectado

Page 55: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 55

Interfaz de configuracion

La interfaz de configuracion forma parte de la misma aplicacion y se puede accedera ella tanto a traves de la pantalla tactil como desde cualquier navegador alojado en unequipo que tenga visibilidad con la red en la que se encuentra el sistema. Esta pensadapara operar con el mismo y realizar ciertas tareas de mantenimiento basicas de maneraremota.

Figura 6.14: Pantalla de configuracion/mantenimiento

Las funcionalidades que ofrece son:

Mostrar registros Permite visualizar los registros generados por el nucleo durante suejecucion. Incluye dos controles para mejorar su visualizacion en pantallas de tamanoreducido. Una permite configurar la cantidad de registros que se mostraran, la otra eltiempo de refresco de los registros. Estas opciones se pueden ocultar para dejar mas espaciopara la visualizacion de los registros.

Page 56: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

56 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Figura 6.15: Visualizador de registros con opciones desplegadas

Figura 6.16: Visualizador de registros

Llamar a una extension Muestra un dialogo que permite al usuario realizar una lla-mada a una extension dada.

Page 57: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 57

Figura 6.17: Interfaz para llamar a una extension

Enviar ping Realiza una peticion de ping y muestra el resultado, es util para comprobarel estado de la red.

Figura 6.18: Interfaz para enviar un ping

Page 58: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

58 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Gestionar altavoz Permite conectar y desconectar el altavoz. Puede ser util si el altavozBluetooth ha perdido conexion.

Figura 6.19: Interfaz para gestionar el altavoz

Gestionar softphone Permite forzar la conexion y desconexion del Softphone.

Figura 6.20: Interfaz para gestionar el softphone

Page 59: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 59

Colgar una llamada Permite colgar una llamada en curso.

Reiniciar el sistema Permite reiniciar remotamente el sistema en caso de necesidad.

6.2.6. Aplicacion Android

Para poder realizar llamadas al sistema desde un smartphone es necesario en principiodisponer de un Softphone y marcar la extension correspondiente. Como normalmente losusuarios no estaran familiarizados con los conceptos necesarios para su correcto funciona-miento se ha desarrollado una aplicacion Android que simplifica su manejo.

Ademas hay otro problema con las llamadas enviadas a la Raspberry. Si la personaen situacion de dependencia no pudiese descolgar la llamada, esta no podrıa realizarse.Ademas serıa necesario proveer de una interfaz adecuada para responder a una llamadaentrante.

Para solucionar este problema se podrıa descolgar la llamadas automaticamente, peroesto es problematico, especialmente si la PBX se conectase a la red telefonica. En ese su-puesto habrıa que implementar una lista blanca y complicarıa sensiblemente el desarrollo,no solo a la hora de implementarlo sino a la hora de gestionarlo y mantenerlo.

Para solucionar estos problemas se ha desarrollado una aplicacion Android que sim-plifica la realizacion de llamadas por parte de la persona que quiere llamar y elimina lanecesidad de descolgar utilizando el API expuesta por la aplicacion Java, de modo que,mediante la aplicacion, sera la Raspberry la que realice la llamada al Softphone instaladoen el smartphone que ejecute la orden de realizar la llamada.

Implementacion

Se trata de una aplicacion nativa que se ha desarrollado en AndroidStudio.

Como se ha mencionado en la introduccion de este capıtulo su funcion es invocaruna llamada desde la Raspberry haciendo uso del API REST expuesto por la aplicacionSpringBoot.

Dispone de dos Activities y una clase de utilidad.

Activities

MainActivity Es la pantalla principal de la aplicacion, simplemente tiene un botonen el centro, que al ser pulsado enviara la orden a la Raspberry de realizar una llamada ala extension configurada, que, evidentemente, sera la extension correspondiente al telefonodesde el que se esta ejecutando la aplicacion.

Page 60: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

60 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Figura 6.21: Interfaz principal de la aplicacion Android

Page 61: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 61

SettingsActivity Es la interfaz de configuracion.

Figura 6.22: Interfaz de configuracion de la aplicacion Android

Permite establecer los siguientes parametros de configuracion:

Estos son:

- Extension propia: La extension a la que llamara la Raspberry al pulsar el boton.

- Usuario: El usuario para autenticarse contra el API, sin uso de momento.

- Contrasena: La contrasena para autenticarse contra el API, sin uso de momento.

Page 62: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

62 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

- Dominio: nombre de dominio o IP en la que se encuentran expuestos los serviciosREST.

- Puerto REST: Puerto en el que se encuentra expuesto el API REST.

Cada uno de los elementos de la Activity de configuracion mostrara un mensaje modalal pulsar sobre ellos y se podra modificar su valor.

Page 63: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 63

Figura 6.23: Interfaz de configuracion de la extension desde la aplicacion Android

Page 64: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

64 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

RestClient La clase RestClient, como su nombre indica, permite explotar el API RESTexpuesta por SpringBoot. Utiliza los parametros de configuracion establecidos mediante laActivity antes mencionada para configurar las acciones a realizar. Su funcion de momentoes exclusivamente enviar la orden para que la Raspberry realice una llamada a la extensionindicada.

El contenido de la clase RestClient es:

1 package android . proycpp . proycppandroid ;2

3 [ . . . ]4

5 pub l i c c l a s s RestCl i ent {6 pr i va t e S t r ing baseUrl ;7 pr i va t e S t r ing extens i on ;8 pr i va t e AsyncHttpClient c l i e n t ;9

10 pub l i c RestCl i ent ( S t r ing host , S t r ing port , S t r ing extens i on ) {11 baseUrl = ”http :// ” . concat ( host ) . concat ( ” : ” ) . concat ( port ) . concat ( ”/ entry

−point /” ) ;12 t h i s . ex t ens i on=extens i on ;13 c l i e n t = new AsyncHttpClient ( ) ;14 }15

16 pub l i c void d i a l ( ) {17 t h i s . get ( ” d i a l /” . concat ( ex tens i on ) , nu l l , new AsyncHttpResponseHandler ( )

{18 @Override19 pub l i c void onSuccess ( i n t statusCode , Header [ ] headers , byte [ ]

responseBody ) {20 }21

22 @Override23 pub l i c void onFa i lure ( i n t statusCode , Header [ ] headers , byte [ ]

responseBody , Throwable e r r o r ) {24 [ . . . ]25 }26 }) ;27 }28

29 pr i va t e void get ( S t r ing ur l , RequestParams params ,AsyncHttpResponseHandler responseHandler ) {

30 c l i e n t . get ( getAbso luteUr l ( u r l ) , params , responseHandler ) ;31 }32

33 pr i va t e void post ( S t r ing ur l , RequestParams params ,AsyncHttpResponseHandler responseHandler ) {

34 c l i e n t . post ( getAbso luteUr l ( u r l ) , params , responseHandler ) ;35 }36

37 pr i va t e S t r ing getAbso luteUr l ( S t r ing r e l a t i v eU r l ) {38 re turn baseUrl + r e l a t i v eU r l ;39 }40 }

Listing 6.13: RestClient.java

En la linea 10, podemos ver que en el constructor de la clase prepara la URL pararealizar diferentes posibles llamadas al API explicada en 4.2.4.

Los metodos get() y post(), en las lıneas 29 y 33 respectivamente permiten realizarpeticiones GET y POST que seran ejecutadas en un hilo. Si se hiciese de otro modo el

Page 65: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 65

sistema no lo permitirıa por quedar el hilo principal bloqueado en espera de la respuestade la peticion.

El metodo getAbsolutePath() escrito en la lınea 37 devuelve la URL completa delservicio que vamos a llamar, permitiendo simplificar el uso de la clase y eliminando unaposible repeticion de codigo.

Por ultimo el metodo dial(), en la lınea 16 realiza una llamada al metodo dial delAPI que llamara a la extension pasada como parametro (lınea 17). Ademas manejara elresultado, en caso de exito no realizara ninguna accion (lınea 19). En caso de error lanzarauna excepcion (lınea 23) y se pintara por la salida estandar. Esta parte del codigo se haomitido por simplificar su comprension.

6.2.7. Modulo de reconocimiento y sıntesis de voz

Si la persona en situacion de dependencia tuviese la movilidad reducida de forma que nopudiese utilizar el boton cableado o la pantalla tactil necesitarıa un metodo de interaccioncon el sistema que no requiriese contacto fısico.

Para este caso se ha desarrollado un modulo de reconocimiento y sıntesis de voz quepermite realizar acciones mediante comandos de voz.

Este modulo esta desarrollado en Java y consiste en un wrapper de dos proyectos:

Los proyectos utilizados son:

- cmusphinx Librerıa de reconocimiento de voz [12]

- freeTTS Librerıa de sıntesis de voz desarrollada ıntegramente en Java [13]

Este modulo funciona en el sistema en segundo plano, de forma que al detectar laspalabras configuradas sera capaz de lanzar determinadas acciones asociadas a las mismas.

En este caso no se ha desarrollado toda la funcionalidad necesaria para operar con elsistema a traves de este medio pero si se ha desarrollado lo suficiente como para implemen-tar las funciones de realizar una llamada a una extension concreta y colgar una llamadaen curso.

A partir de este punto se puede extender la funcionalidad a cualquier operacion quepermita realizar el nucleo, pero se requiere un desarrollo adicional.

En otras palabras, se ha desarrollado el esqueleto que hace de base para cualquierfuncionalidad que se desee realizar, se ha verificado su funcionalidad y el codigo generadopermite ser extendido por cualquier persona con conocimientos de programacion.

Hay dos partes principales en el proyecto de reconocimiento y sıntesis de voz.

Cada una de ellas envuelve a la librerıa correspondiente, con la finalidad de simplificarsu uso, de forma que:

Respecto a la sıntesis de voz TTS (Text To Speech), mediante el wrapper se permitede una manera muy simplificada crear una voz, configurarla y hacer que reproduzca untexto determinado.

Respecto al reconocimiento de voz se permite escuchar hasta encontrar una de lasacciones indicadas en el fichero de configuracion .grammar.

El diagrama de clases general del sistema es:

Page 66: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

66 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Figura 6.24: Diagrama general de clases del modulo de reconocimiento y sıntesis de voz

El diagrama de clases correspondiente al wrapper de reconocimiento de voz es:

Page 67: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 67

Figura 6.25: Detalle del modulo de reconocimiento de voz

El diagrama de clases correspondiente al wrapper de TTS es:

Page 68: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

68 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Figura 6.26: Detalle del modulo de sıntesis de voz

Mediante los archivos .grammar podemos indicar los comandos disponibles. Una vezidentificado uno de ellos se llamara al ActionManager, que se encargara de realizar laaccion correspondiente.

6.2.8. Boton cableado

En ocasiones el modo mas sencillo de usar para una persona dependiente puede sersimplemente pulsar un boton y que el sistema se encargue de todo lo demas.

Para ello se ha implementado un modulo que permite realizar una llamada directamenteal pulsar un boton. Mediante este sistema se puede realizar una llamada a una persona enconcreto o a varias utilizando las funcionalidades que ofrece la centralita telefonica.

Concretamente se puede configurar este modulo de tres maneras:

- Llamar a una extension: se llama a una extension determinada.

- Llamar a un grupo secuencialmente: Se llama a un grupo de extensiones una detrasde otra hasta que alguna de ellas descuelgue la llamada.

- Llamar a un grupo en paralelo: Se llama a todas las extensiones indicadas en el grupoy cuando una de las extensiones llamadas descuelgue dejara de llamar a todas lasdemas.

Estos modos de funcionamiento se deben configurar en la centralita. Puede realizarsemodificando sus archivos de configuracion directamente o desde la interfaz web de lamisma. Esta ultima opcion resulta mas sencilla.

Como se puede ver en el manual, no se ha configurado ningun grupo de llamada y seha preparado para que el boton cableado realice una llamada a la extension de un usuario.

Page 69: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 69

Pero como se ha mencionado bastara con cambiar la configuracion de la extension a laque se llame y realizar la llamada a una extension que tenga configurado un grupo dellamadas.

En este prototipo se ha conectado un boton a los puertos GPIO[14] (General PurposeInput/Output, Entrada/Salida de Proposito General) de la Raspberry Pi.

El hardware utilizado ha sido:

- Boton cableado: pulsador unipolar

- Resistencia: 100 Ohmios. Evita sobrecargar el PIN

- Placa de prototipado

- Cables

Este montaje permite a una aplicacion Python obtener como entrada el estado delboton y actuar en consecuencia cuando sea pulsado.

Para este montaje y su implementacion se ha utilizado el tutorial [2].

No se ha seguido al pie de la letra pero sı se ha aprovechado gran parte del codigo.

El codigo original era el siguiente.

1 #!/ bin /python2 # Simple s c r i p t f o r shut t ing down the raspber ry Pi at the p r e s s o f a button .3 # by Inde rpree t Singh4 import RPi .GPIO as GPIO5 import time6 import os7 # Use the Broadcom SOC Pin numbers8 # Setup the Pin with I n t e r na l pu l lups enabled and PIN in read ing mode .9 GPIO. setmode (GPIO.BCM)

10 GPIO. setup (18 , GPIO. IN , pul l up down = GPIO.PUD UP)11 GPIO. setup (23 , GPIO. IN , pul l up down = GPIO.PUD UP)12 # Our func t i on on what to do when the button i s pre s sed13 de f Shutdown ( channel ) :14 os . system ( ”sudo shutdown −h now” )15 de f Restart ( channel ) :16 os . system ( ”sudo shutdown −r now” )17 # Add our func t i on to execute when the button pre s sed event happens18 GPIO. add event de tec t (18 , GPIO.FALLING, ca l l ba ck = Shutdown , bouncetime =

2000)19 GPIO. add event de tec t (23 , GPIO.FALLING, ca l l ba ck = Restart , bouncetime =

2000)20 # Now wait !21 whi le 1 :22 time . s l e e p (1 )

Listing 6.14: Codigo original para el manejo del boton extraido de [2]

Y tas las modificaciones necesarias el resultado es el siguiente:

1 #!/ bin /python2

3 import RPi .GPIO as GPIO4 import time5 import os6 # Use the Broadcom SOC Pin numbers7 # Setup the Pin with I n t e r na l pu l lups enabled and PIN in read ing mode .8 GPIO. setmode (GPIO.BCM)

Page 70: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

70 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

9 GPIO. setup (18 , GPIO. IN , pul l up down = GPIO.PUD UP)10 # Our func t i on on what to do when the button i s pre s sed11 de f Cal lExtens ion ( channel ) :12 os . system ( ”sh /home/proycpp/dev/proycpp/ executeCa l lExtens ion . sh 300” )13 # Add our func t i on to execute when the button pre s sed event happens14 GPIO. add event de tec t (18 , GPIO.FALLING, ca l l ba ck = Cal lExtens ion , bouncetime

= 2000)15 # Now wait !16 whi le 1 :17 time . s l e e p (1 )

Listing 6.15: Codigo para el manejo del boton con las modificaciones necesarias extraidode [2]

Como podemos ver, obviando los comentarios, en esencia la modificacion realizadase limita a la accion a ejecutar una vez pulsado el boton. que en lugar de reiniciar laRaspberry realiza una llamada al script encargado de realizar una llamada a una extensiondeterminada.

6.2.9. Boton inalambrico

El boton cableado es una buena opcion en muchos casos pero la persona en situacion dedependencia podrıa no estar cerca de la Raspberry. Para resolver este problema se podrıautilizar un boton inalambrico.

Hay diferentes opciones, WiFi, Bluetooth y radio-frecuencia entre otros. Suelen tenerun precio elevado. Pero en este caso se ha utilizado un boton de Amazon Dash, modificandosu funcionalidad para poder utilizarlo para nuestro proposito.

El boton Amazon Dash es un servicio que se ofrece a los usuarios de Amazon Primepara realizar compras de productos habituales, como papel higienico, espuma de afeitar odesodorante.

Hay muchas aplicaciones que han utilizado el Amazon Dash Button para otros finesdiferentes de aquel para el que fue disenado, especialmente se utiliza para conectar unAmazon Dash Button con una cuenta IFTTT (IF This Then That) de forma que quedeasociado con otras acciones. Aunque podrıa ser util seguir los pasos que han seguido otrospara usar el boton junto a IFTTT al pie de la letra, se ha optado por asociar directamentecon la pulsacion del boton una llamada al script de Python encargado de realizar llamadasa una extension determinada, del mismo modo que se realizaba en el modulo anterior.

Ambos modulos son compatibles y se pueden asociar diferentes acciones, como llamara grupos diferentes de usuarios o realizar otro tipo de acciones especıficas que se pudierenanadir mas adelante.

Para utilizar el boton, no de la forma en la que fue concebido, sino como elemento deinteraccion con el sistema se han seguido parcialmente [3, 15]:

Para resumir el proceso, al pulsar el boton, este enviara dos tramas ARP, la primerade ellas un ARP Probe. Seguidamente, si el boton estuviera completamente configuradorealizarıa una compra, pero como no es el caso, podremos pulsarlo sin miedo de recibir encasa un producto desde Amazon.

Gracias a la librerıa Scapy podremos capturar el trafico WiFi y capturar la trama ARPProbe mencionada anteriormente. Concretamente el script encargado de esto es:

1 from scapy . a l l import ∗2

3 de f a rp de t e c t ( pkt ) :4 i f pkt [ARP] . op == 1 : #network reques t

Page 71: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 71

5 i f pkt [ARP] . hwsrc == ’ xx : xx : xx : xx : xx : xx ’6 #return ”Button detec ted ! ”7 #Do something here ! !8

9 pr in t s n i f f ( prn=arp d i sp lay , f i l t e r=”arp” , s t o r e=0)

Listing 6.16: Codigo utilizado para capturar el trafico y detectar la pulsacion del botonAmazon Dash extraido de [3]

Una vez somos capaces de detectar la pulsacion del boton resulta sencillo asociaracciones a la misma. En este caso se podrıa haber asociado su pulsacion con la realizacionde una llamada desde la Raspberry, pero por la configuracion de la red domestica no hasido posible realizar la prueba.

6.2.10. Configuracion de Raspbian

En este apartado se enumeran las acciones realizadas para la instalacion y configuracionde Raspbian en la Raspberry Pi. Para una descripcion mas detallada de las mismas sepuede ver el Anexo I Manual de instalacion y uso.

Las acciones realizadas y descritas con detalle en el manual son:

- Carga inicial del sistema operativo en la tarjeta SD

- Metodo de generacion de backups del sistema

- Instalacion de la pantalla y orientacion de la misma

- Configuracion de usuarios

- Configuracion de SSH

- Configuracion del sistema para la realizacion del login automatico

- Instalacion y configuracion de Fail2ban

- Configuracion del firewall IpTables

- Configuracion de Bluetooth

- Configuracion del altavoz

- Configuracion de los drivers de sonido (Pulseaudio)

- Configuracion del microfono

- Instalacion del Softphone (Linphone)

- Confiuracion de DNS dinamico (no-ip)

- Configuracion de VNC server

- Despliegue de aplicaciones

No es el objetivo de este documento explicar en detalle cada uno de estos pasos, pero sedetalla en el anexo correspondiente cada paso seguido junto con la descripcion del procesode investigacion y configuracion. Para la instalacion del sistema, lo ideal es generar unaimagen con todas estas modificaciones realizadas y dejar en manos del tecnico encargadode la instalacion las modificaciones pertinentes en funcion del hardware concreto de cadainstalacion. De esta forma el proceso sera mucho mas rapido y eficiente.

Page 72: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

72 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

6.2.11. Configuracion del servidor VPS, instalacion y configuracion deAsterisk

Para montar la centralita se ha decidido contratar un servidor VPS (Virtual PrivateServer) en OVH. Esto es una maquina virtual que funciona exactamente igual que un servi-dor pero con menos recursos. Para los propositos del proyecto es una opcion perfectamentevalida.

De nuevo, no es el proposito de este documento explicar detalladamente cada paso dela instalacion y configuracion de la centralita. Se detallan aquı los pasos seguidos paraello y se pone a disposicion del lector el Anexo I Manual de instalacion y uso para masdetalles.

Las acciones realizadas y descritas con detalle en el manual son:

- Instalacion de Fail2Ban

- Configuracion del firewall IpTables

- Instalacion de las dependencias de Asterisk

- Instalacion de Asterisk

- Configuracion Asterisk

- Instalacion de FreePBX

- Configuracion de FreePBX

6.2.12. Despliegue de los componentes

Se debe desplegar en la Raspberry cada uno de los componentes descritos.

Exposicion de servicios y front-end

Mediante Spring Boot se generera un unico archivo .jar que al ser ejecutado despliegaun servidor Tomcat con la capa de exposicion de servicios y la aplicacion Angular.

Para generar el .jar hay que ejecutar en la raız del proyecto:mvn clean installEl .war resultante se ha desplegado en el directorio:/home/proycpp/services/proycpprest-0.0.1.jar

Modulo de reconocimiento de voz

El modulo de reconocimiento de voz se compila de la misma manera:mvn clean installY se ha ubicado en el mismo directorio:/home/proycpp/services/speechRecognitionService.jarLos archivos .gram se deben ubicar en el directorio:/home/proycpp/services/gram/proycpp.gram

Nucleo de la aplicacion

Dado que los scripts Python que forman el nucleo de la aplicacion no necesitan sercompilados sencillamente se ha subido a la Raspberry en el directorio:

/home/proycpp/dev/proycpp

Page 73: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

6.2. RESOLUCION 73

Configuracion

Para que se ejecuten estos componentes y empiecen a funcionar nada mas arrancar laRaspberry se han realizado las siguientes modificaciones:

Al fichero crontab se ha anadido:

1 @reboot /bin /bash /home/proycpp/dev/proycpp/executeSpeakerDaemon . sh s t a r t2 @reboot /bin /bash /home/proycpp/dev/proycpp/ executeRegisterDaemon . sh s t a r t3 @reboot java −j a r /home/proycpp/ s e r v i c e s / proycpprest −0 . 0 . 1 . j a r

Listing 6.17: Final del fichero crontab

Al fichero /home/proycpp/.config/lxsession/LXDE-pi/autostart se ha anadido:

1 @chromium−browser −−i n c ogn i t o −−k io sk http : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0

Listing 6.18: Final del fichero /home/proycpp/.config/lxsession/LXDE-pi/autostart

Page 74: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

74 CAPITULO 6. DESCRIPCION DE LA SOLUCION PROPUESTA

Page 75: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 7

Pruebas y resultados

Dada la naturaleza del proyecto no ha sido necesaria la realizacion de pruebas hastaterminar el desarrollo. Si bien se podrıan haber realizado test unitarios y test automaticosde integracion mediante la utilizacion de Selenium, SoapUI, JUnit u otras herramientassimilares; no se ha considerado necesario. Sin embargo dada la modularidad del mismo yel tamano de cada uno de sus modulos si que ha sido posible verificar el funcionamientode cada uno de ellos por separado, tanto durante el proceso de desarrollo como una vezfinalizado, durante el proceso de despliegue e integracion.

7.1. Pruebas en los modulos

7.1.1. Nucleo de la aplicacion

Durante el desarrollo del nucleo de la aplicacion se han realizado pruebas lanzandolas peticiones contra una aplicacion de prueba que registraba las peticiones realizadas.Respecto a las peticiones relacionadas con el Softphone, este se ha probado utilizando unacuenta de Netelip antes de la configuracion de una centralita propia.

7.1.2. Capa de exposicion de servicios

Esta parte de la aplicacion es muy sencilla y las pruebas realizadas durante el desarrollose han limitado al testeo de las peticiones desarrolladas mediante logs, la herramientautilizada para ello ha sido Postman. No ha sido necesario almacenar las peticiones ya queel estado final del proyecto nos permite realizar pruebas de integracion globales que cubrentodas las pruebas realizadas durante el desarrollo.

7.1.3. Interfaz de usuario

Para la aplicacion de usuario tambien se podrıa haber desarrollado test unitarios, perode nuevo, es una aplicacion muy sencilla en los aspectos relacionados con los casos que sepodrıan testear con este tipo de herramientas y las pruebas que se han considerado utileshan sido las de integracion. Durante el desarrollo se ha utilizado una aplicacion java parasimular llamadas a la aplicacion que ofrece la exposicion de servicios.

Ademas de eso, evidentemente se ha verificado que la interfaz fuese adecuada parael dispositivo en que ha sido utilizada. Para ello se han utilizado las herramientas dedesarrollo de Google Chrome, que nos permiten reducir el tamano de la interfaz a aquellaque se vaya a utilizar en el sistema final.

75

Page 76: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

76 CAPITULO 7. PRUEBAS Y RESULTADOS

Por ultimo, en el caso de este modulo, ha sido necesario verificar que al ejecutar el .jarcorrespondiente se desplegase correctamente.

7.1.4. Aplicacion Android

En la aplicacion Android solomente hay un caso de uso cuyo testeo es sencillo durantela fase de integracion.

7.1.5. Modulo de reconocimiento y sıntesis de voz

En este caso se han utilizado dos librerıas conocidas y bien probadas, se han realizadopruebas durante el desarrollo con archivos .gram de ejemplo y diferentes resultados. Con-viene destacar en este caso que la precision del algoritmo de reconocimiento no es idonea,pero su mejora esta claramente fuera del alcance de este proyecto.

Para su implementacion en un proyecto comercial serıa recomendable adaptar estemodulo, quizas a una librerıa mas preparada para nuestro idioma o invirtiendo recursosen la mejora del sistema de reconocimiento. En cuanto a la sıntesis de voz, cumple sufuncion. Y, aun siendo evidente que se trata de una voz artificial, se entiende correctamentey cumple su funcion de manera correcta.

7.1.6. Boton

El modulo dedicado al boton para la realizacion de llamadas se ha testeado durante lafase de implementacion haciendo que el boton escribiese un registro en un archivo en lugarde ejecutar una llamada y durante la fase de integracion se ha comprobado su correctofuncionamiento.

7.2. Pruebas de integracion

Dada la naturaleza del proyecto ha sido sencillo realizar las pruebas de integracion.Una vez realizado el despliegue de los diferentes modulos se ha procedido a verificar

los siguientes puntos:

- Registro correcto en el sistema: Una vez se arranca la Raspberry no se solicita lainteraccion del usuario para mostrar el escritorio del sistema

- Inicio automatico del navegador: Tras el inicio del sistema se arranca el navegadoren pantalla completa apuntando a la url correspondiente a la aplicacion Angular

- Estado de los demonios: Mediante el comando ’ps -ef’ se verifica que los demoniosestan arrancados, concretamente deben encontrar en ejecucion dos demonios de pyt-hon (register y speaker), el demonio de pulseaudio, apache, bluetoothctl, linphonecy java (el jar proycpprest-0.0.1.jar)

- Reinicio del sistema en caso de error grave: Se ha parado el servicio de la centralitapara simular un error de registro en el Softphone y pasados dos minutos la Raspberryse reinicia

- Pruebas de funcionamiento: Se ha verificado que el sistema, mediante la interfazgrafica: Actualiza el estado de registro del Softphone, realiza llamadas al pulsar enel boton de marcar, es capaz de mostrar los logs del nucleo de la aplicacion, es capazde mandar un ping a la puerta de enlace, desconecta y conecta el altavoz, desconectay conecta el Softphone, cuelga las llamadas y reinicia el sistema

Page 77: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

7.3. PRUEBAS DE CALIDAD DEL SERVICIO 77

- Boton cableado: Se ha testeado que al pulsarlo realiza una llamada a las extension300

- Aplicacion Android: Al pulsar el boton de llamada se realiza una llamada al movilque lo ha solicitado

- Modulo de reconocimiento de voz: Se ha probado y no funciona correctamente.

Todas las pruebas se han realizado con exito a excepcion de la realacionada con elreconocimiento de voz.

Para diagnosticarlo se ha probado la sıntesis de voz y si que ha funcionado correcta-mente. Las pruebas en otras maquinas con la aplicacion de reconocimiento de voz sı quehan tenido exito. El problema esta relacionado con el microfono que esta utilizando Java.No se ha encontrado solucion a este problema y queda como trabajo futuro de cara a unaposible implantacion del proyecto.

7.3. Pruebas de Calidad del servicio

Para las pruebas de calidad del servicio se ha analizado el trafico RTP entre llamadas.La manera mas comoda de hacerlo es mediante el Softphone Media5phone, que entre susfunciones incluye la de capturar el trafico RTP enviado.

Se han realizado varias capturas de trafico utilizando dos moviles diferentes, amboscon 4G y conectados a la misma red WiFi. En el cuadro 5.1 se ha denominado a uno delos moviles A y el otro B. Las medidas se han tomado sobre llamadas realizadas a travesde la conexion 4G y de la red WiFi con cada uno de los moviles.

Page 78: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

78 CAPITULO 7. PRUEBAS Y RESULTADOS

Figura 7.1: Ejemplo de captura de trafico RTP

Page 79: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

7.3. PRUEBAS DE CALIDAD DEL SERVICIO 79

4G-A 4G-B WiFi-A WiFi-B MediaMin Jitter 0 0 0 0 0Max Jitter 132 55 40 238 116,25AVG Jitter 12 10 10 13 11,25Packet sent 861 380 389 1424 763,5Packet lost 19 4 0 28 12,75Packet received 842 364 379 1377 740,5Min RTT 41 62 0 42 36,25Max RTT 50 62 0 166 69,5AVG RTT 45 62 0 80 46,75Remote Jitter 4 4 0 11 4,75Remote Packet Sent 751 248 0 1250 562,25Remote Packet Lost 0 0 0 10 2,5- - - - - -Latency 25 31 0 83 34,75Effective Latency 59 61 30 119 67,25R before packet loss 91,73 91,68 92,45 90,23 91,52R 86,21 89,05 92,45 85,31 87,35MOS 4,24 4,32 4,39 4,21 4,27Quality Good Good Good Good Good

Cuadro 7.1: Medidas sobre el trafico RTP

En la tabla se pueden distinguir dos partes, la primera son los datos extraıdos direc-tamente del softphone, la segunda son los calculos realizados para obtener el MOS (MeanOpinion Score). Para ello se han seguido las instrucciones de [16].

No obstante la comunicacion tiene problemas que pueden llegar a ser molestos, perono imposibilitan la comunicacion. Tales como poca definicion de la voz captada por elmicrofono de la Raspberry, un retardo ligeramente molesto o ruido de fondo.

Page 80: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

80 CAPITULO 7. PRUEBAS Y RESULTADOS

Page 81: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 8

Presupuesto

Los elementos que tienen asociado un coste implicados en el proyecto son:

Raspberry pi 3 + cargador + tarjeta SD 50ePantalla tactil 80eMicrofono krom kimu 2 50eAltavoz JBL flip 2 Descatalogado, equivalente 114eServidor VPS 3.62e /mesTOTAL 294e+ 3.62e /mesHoras ingeniero junior 9e /hora * 300hTOTAL con horas de trabajo 2994e+ 3.62e /mes

Cuadro 8.1: Presupuesto

Se podrıa mejorar la calidad de audio utilizando mejores componentes. Por ejemplo unmicrofono mas direccional podrıa mejorar significativamente la comunicacion en la mayorparte de escenarios, del mismo modo un mejor altavoz tambien mejorarıa la calidad de lacomunicacion.

Se han utilizado los componentes de los que se disponıa pensando en alcanzar unacalidad aceptable para la maqueta.

81

Page 82: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

82 CAPITULO 8. PRESUPUESTO

Page 83: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 9

Conclusiones y trabajos futuros

Se ha conseguido implementar y desplegar un sistema estable, escalable y funcional,que cumple con todos los objetivos planteados y deja la puerta abierta a posibles funcio-nalidades futuras.

Como se ha evidenciado en el apartado de pruebas y resultados, hay diferentes aspectosen los que el sistema podrıa ser mejorado. Principalmente para un uso comercial serıafundamental mejorar la calidad de la comunicacion. Con mejoras en el sistema de reduccionde eco y en las funcionalidades ofrecidas en la centralita.

Existen diversos mecanismos tanto software como hardware que podrıan mejorar lacalidad del audio en ambos casos. No obstante, dados los recursos con los que se hacontado para el desarrollo de este proyecto considero que dispone de la suficiente calidadcomo para no invertir mas recursos por el momento.

Desde un inicio se ha planteado el sistema de manera modular y dada su funcionalidadlas posibilidades son muy amplias.

9.1. Trabajos futuros

9.1.1. Interaccion con el televisor

Muchas de las personas en situacion de dependencia se encuentran inmovilizados ensu casa y en algunos casos no disponen de movilidad o de las habilidades cognitivas parainteractuar con elementos como un televisor al mismo tiempo que un telefono.

Una de las mejoras planteadas ha sido la inclusion de un emisor de infrarojos que fuesecapaz de interactuar con el televisor y realizar diferentes acciones. Por ejemplo, silenciarel audio del televisor al iniciar una llamada y devolverlo a su estado finalizada la misma.O apagar el televisor llegada cierta hora o bajo ciertas condiciones.

Esta aplicacion es extensible a cualquier elemento que se pueda manejar medianteinfrarojos, Bluetooth, WiFi... En general cualquier elemento con el que la Raspberry seacapaz de comunicarse. Con el avance de tecnologıas como IoT estas posibilidades son cadavez mayores.

9.1.2. Boton inalambrico

En la seccion 4.2.9 de este documento se ha explicado como implementar esta fun-cionalidad. Serıa necesario modificar ligeramente el diseno para permitir que se pudiesemanejar en todo tipo de redes.

En este caso si que existen metodos mucho mejores de conseguir el mismo resultado,pero ninguno tan economico.

83

Page 84: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

84 CAPITULO 9. CONCLUSIONES Y TRABAJOS FUTUROS

9.1.3. Mejoras del reconocimiento de voz

Como se ha explicado en el apartado 5.1.5 es necesario mejorar el sistema de reconoci-miento de voz, con la librerıa utilizada esta claramente optimizado para el ingles y, aunquese han cargado los paquetes correspondientes al Espanol no se han conseguido resultadosque puedan ser utilizados por personas con dificultades cognitivas.

Para mejorar este aspecto existen librerias de pago que seguramente mejoren muchoel reconocimiento de voz.

9.1.4. Reduccion del sistema operativo

Se ha utilizado Raspbian para el desarrollo del sistema, es una distribucion completaque cuenta con muchas mas librerias de las que necesita nuestro sistema.

Se podrıa mejorar la velocidad del sistema en general creando una distribucion perso-nalizada que incluya exclusivamente los paquetes que nos interesan para el buen funcio-namiento del mismo[17].

Esta solucion, sin embargo, tiene un contra importante. Tal como esta el sistema acep-tarıa practicamente cualquier modulo software, pero al eliminar ciertos paquetes de ladistribucion Raspbian es posible que futuros modulos necesitasen incluirlos complicandoel desarrollo de los mismos.

9.1.5. Mejoras en la interfaz grafica

La interfaz grafica es uno de los elementos mas susceptibles de cambios. Por ejemplopodrıa ser modificada en funcion del estado mental de la persona en situacion de depen-dencia, simplificandola o complicandola para ofrecer las funcionalidades mas basicas enexclusiva o funciones avanzadas en el mejor de los casos.

Desde esta aplicacion se podrıan modificar ciertos parametros, incluso se podrıa ma-nejar la centralita, permitiendo gestionar contactos, grupos de llamada, etc.

Se deberıa anadir seguridad a la misma antes de ponerla en produccion. No se ha hechopor falta de tiempo, pero la arquitectura esta preparada para implementar cualquier tipode seguridad mediante Spring Security. Lo mas recomendable serıa implementar seguridadmediante Login o Token ademas de un certificado de cliente.

9.1.6. Mejoras en la centralita

Es posible configurar un trunk SIP que permita a las Raspberry realizar llamadas a lared telefonica y explotar el mismo mecanismo que se utiliza en este momento para realizarllamadas a extensiones para prescindir del Softphone realizando la llamada directamentea traves del trunk SIP.

Otra posible mejora es la inclusion de videollamadas.

Page 85: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Bibliografıa

[1] Andrei Fokau, “A simple unix/linux daemon in Python.” https://gist.github.

com/andreif/cbb71b0498589dac93cb, 2014. Online; 29 Agosto 2018.

[2] A. Glow, “Raspberry pi shutdown / restart button.” https://www.hackster.io/

glowascii/raspberry-pi-shutdown-restart-button-d5fd07, Nov 2017.

[3] “Amazon dash button: Un hack para enviar un sms las noches de fiesta.” http://www.

elladodelmal.com/2018/03/amazon-dash-button-un-hack-para-enviar.html.

[4] https://www.raspberrypi.org/forums/viewtopic.php?f=108&t=120793.

[5] “Raspberry pi 3 model b.” https://www.raspberrypi.org/products/

raspberry-pi-3-model-b/.

[6] “Dash buttons: Dispositivos amazon.” https://www.amazon.es/b?ie=UTF8&node=

10909716031.

[7] A. T. Project, “Apache tomcat.” http://tomcat.apache.org/.

[8] R. C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship. PrenticeHall, 2008.

[9] “Linphone.” http://www.linphone.org/technical-corner/linphone/overview.

[10] “Documentation.” https://www.freedesktop.org/wiki/Software/PulseAudio/

Documentation/.

[11] E. Freeman, Head First Design Patterns: A Brain-Friendly Guide. O’Reilly Media,oct 2004.

[12] N. Shmyrev, “Cmusphinx open source speech recognition.” https://cmusphinx.

github.io/.

[13] “Freetts 1.2.3 - a speech synthesizer written entirely in the java(tm) programminglanguage.” https://freetts.sourceforge.io/.

[14] “Gpio.” https://www.raspberrypi.org/documentation/usage/gpio/.

[15] “Amazon dash hack with raspberry pi and python - the magpi magazine.” https:

//www.raspberrypi.org/magpi/hack-amazon-dash-button-raspberry-pi/, May2017.

[16] P. Vouzis, “Impact of packet loss, jitter, and latency on voip.” https://netbeez.

net/blog/impact-of-packet-loss-jitter-and-latency-on-voip/, May 2018.

85

Page 86: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

86 BIBLIOGRAFIA

[17] “Making embedded linux easy.” https://buildroot.org/docs.html.

[18] “Raspberry pi auto login without etc/inittab.” http://stackoverflow.com/

questions/33753985/raspberry-pi-auto-login-without-etc-inittab.

[19] “News.” http://www.linphone.org/.

[20] “Linphone.” http://www.linphone.org/technical-corner/linphone/

documentation.

[21] “An introduction to linphone.” https://codeghar.wordpress.com/2010/04/29/

an-introduction-to-linphone/, Apr 2010.

[22] “Bluetooth audio streaming - raspberry pi forums.” https://www.Raspberrypi.org/

forums/viewtopic.php?t=68779.

[23] “/etc/bluetooth/audio.conf missing - raspberry pi forums.” https://www.

raspberrypi.org/forums/viewtopic.php?f=28&t=124876.

[24] https://linux.die.net/man/5/pulse-daemon.conf.

[25] “Bluetooth issues blue-utils bluez-simeple-agent.” https://www.raspberrypi.org/

forums/viewtopic.php?f=28&t=133961.

[26] “Bluetooth.” https://wiki.archlinux.org/index.php/bluetooth#hcitool_

scan:_Device_not_found.

[27] A. feiticeir0, “Raspberry pi bluetooth wireless speaker.” http://blog.whatgeek.

com.pt/2014/04/raspberry-pi-bluetooth-wireless-speaker/, Apr 2015.

[28] smaffulli, “Streaming audio from raspberry pi – part 2.” http://maffulli.net/

2013/03/23/streaming-audio-from-raspberry-pi-part-2/, Mar 2013.

[29] “arecord(1) - linux man page.” https://linux.die.net/man/1/arecord.

[30] “Best way to setup usb mic as system default on raspbian jes-sie.” https://raspberrypi.stackexchange.com/questions/37177/

best-way-to-setup-usb-mic-as-system-default-on-raspbian-jessie.

[31] n. a. notes.for.sabi.co.UK. http://www.sabi.co.uk/Notes/linuxSoundALSA.html.

[32] “https://wiki.freepbx.org/display/fop/installing freepbx 13 on debian 8.1.” https:

//wiki.freepbx.org/display/FOP/Installing+FreePBX+13+on+Debian+8.1.

[33] P. Lehtinen, “Jansson.” http://www.digip.org/jansson/.

[34] “National numbering plans.” http://www.itu.int/oth/T0202.aspx?parent=

T0202.

[35] https://wiki.freepbx.org/display/F2/WebserverOverrides.

[36] “.htaccess: Invalid command ’rewriteengine’, perhaps misspe-lled or defined by a module not included in the server con-figuration.” https://stackoverflow.com/questions/10144634/

htaccess-invalid-command-rewriteengine-perhaps-misspelled-or-defined-by-a-m.

Page 87: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

BIBLIOGRAFIA 87

[37] Neuronetv, “Reload failed because retrieve conf.” https://community.freepbx.

org/t/solved-reload-failed-because-retrieve-conf-encountered-an-error-1/

36981/2, journal=FreePBX Community Forums, Sep 2016.

[38] Amztransit and Jfinstrom, “Clearing 2ou have 2 tampered files”message.” https:

//community.freepbx.org/t/clearing-you-have-2-tampered-files-message/

35470, Jun 2016.

[39] Digium, “Sip security.” http://www.digium.com/blog/2009/03/28/

sip-security/.

[40] “Fail2ban (with iptables) and asterisk.” https://www.voip-info.org/

fail2ban-(with-iptables)-and-asterisk, Oct 2008.

[41] “Configure dummy sound device on server with snd-dummy.” https://askubuntu.com/questions/490711/

configure-dummy-sound-device-on-server-with-snd-dummy.

[42] “How can i change the default audio device from com-mand line?.” https://askubuntu.com/questions/14077/

how-can-i-change-the-default-audio-device-from-command-line.

[43] “Tutorial raspberry pi – 7. escritorio remoto vnc no-ip.” https://geekytheory.com/

tutorial-raspberry-pi-7-escritorio-remoto-vnc-no-ip.

Page 88: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

88 BIBLIOGRAFIA

Page 89: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

Capıtulo 10

Anexo I Manual de instalacion yuso

En las siguientes secciones de describe de manera sistematica los pasos a seguir paraconfigurar la Raspberry Pi.

10.1. Instalacion de raspbian

Descarga de Raspbian desde https://www.raspberrypi.org/downloads/raspbian/ Des-

carga de la distribucion

1 cd /home/ c a r l o s /Documents/ proyecto / descargas2 wget https : // downloads . r a spbe r ryp i . org / r a s p b i a n l a t e s t

Listing 10.1: Descarga de raspbian

Carga en la tarjeta SDPara averiguar el nombre de la tarjeta

1 df −h

Listing 10.2: Listado de unidades de almacenamiento

Antes de insertar la tarjeta

Figura 10.1: Antes de insertar la tarjeta

89

Page 90: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

90 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

Tras insertar la tarjeta

Figura 10.2: Despues de insertar la tarjeta

La tarjeta se monta en /dev/sdf1.

Es una tarjeta SD de clase U3 de 16GB.

Una vez localizado el nombre que le asigna el sistema a la tarjeta hay que desmontarlapara que no se interrumpa el proceso de copia del sistema de archivos a la misma, utilizamosunmount, en este caso:

1 umount /dev/ sd f1

Listing 10.3: Desmontar la tarjeta

Se verifica que la tarjeta esta desmontada.

Figura 10.3: Tarjeta desmontada

El siguiente paso es cargar la imagen en la tarjeta SD, el archivo descargado no tieneextension pero sabemos que es un archivo .zip comprimido, anadimos la extension y lodescomprimimos utilizando unzip.

Page 91: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.2. MONTAJE DE LA PANTALLA 91

1 mv r a s pb i a n l a t e s t r a s p b i a n l a t e s t . z ip2 unzip r a s p b i a n l a t e s t . z ip

Listing 10.4: Descompresion del sistema

Ahora tenemos la imagen descomprimida 2016-05-27-raspbian-jessie.img.Hay que utilizar el comando dd para escribir la imagen en la tarjeta, sdf1 es una

particion, para escribir sobre toda la tarjeta hay que hacerlo en sdf en lugar de sdf1.

1 dd bs=4M i f =2016−05−27−raspbian− j e s s i e . img o f=/dev/ sd f

Listing 10.5: Escritura del sistema en la tarjeta

Para verificar que se ha escrito bien la imagen: Para copiar el contenido de la tarjetaa un archivo (Se puede utilizar para hacer backups)

1 dd bs=4M i f =/dev/ sd f o f=from−sd−card . img

Listing 10.6: Creacion de un backup del sistema

Lo que ha copiado el anterior comando es el contenido completo de la tarjeta, inclu-yendo el espacio libre, el archivo resultante tiene 16 GB. Como el objetivo es verificar quela imagen se ha copiado correctamente hay que eliminar el espacio en blanco, utilizandotruncate.

1 t runcate −−r e f e r e n c e 2016−05−27− raspbian− j e s s i e . img from−sd−card . img

Listing 10.7: Eliminar el espacio en blanco de la imagen

Ahora que hemos eliminado la parte innecesaria del archivo podemos verificar que seha copiado correctamente mediante diff.

1 d i f f −s from−sd−card . img 2016−05−27− raspbian− j e s s i e . img

Listing 10.8: Comparacion de la imagen cargada en la Raspberry con la original

El resultado es que ambos archivos son identicos, eliminamos el archivo copiado.

1 rm from−sd−card . img

Listing 10.9: Eliminar el backup

Para extraer la tarjeta con seguridad ejecutamos el comando sync.

1 sync

Listing 10.10: Extraccion de la SD

10.2. Montaje de la pantalla

Una vez montada la pantalla y arrancado el sistema es necesario invertir la imagenpara que no aparezca invertida.

Se ha seguido la respuesta de este foro[4]:Para solucionar el problema se ha anadido al final del archivo /boot/config.txt

1 l c d r o t a t e=2

Listing 10.11: Solucion sacada de [4]

Una vez reiniciada la Raspberry el problema se ha solucionado.

Page 92: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

92 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

10.3. Configuracion inicial de la Raspberry Pi

El primer paso para trabajar comodamente es configurar el servidor SSH de la Rasp-berry, la herramienta de configuracion de Raspbian lo permite facilmente

1 sudo bash2 ra sp i−c on f i g

Listing 10.12: Acceso a la configuracion del sistema

El servidor SSH se encuentra activado por defecto, en caso de no estarlo se activamediante esta herramienta y se accede mediante un cliente de SSH.

Para editar los archivos de texto en la Raspberry instalamos vim.

1 sudo apt−get i n s t a l l vim

Listing 10.13: Instalacion de vim

La contrasena original es pi:raspberry evidentemente hay que cambiarla, para incre-mentar un poco la seguridad vamos a cambiar tambien el nombre de usuario. El nuevousuario debe pertenecer a todos los grupos del sistema.

Para simplificar la replicacion del trabajo en otro sistema, como necesitamos anadir alcomando useradd como parametro los diferentes grupos separados por comas y el comandogroups nos los devuelve separados por espacios: Utilizamos el comando sed para reemplazarlos espacios en blanco por comas.

Ejecucion del comando groups:

1 pi adm d i a l ou t cdrom sudo audio v ideo plugdev games u s e r s input netdev gpioi 2 c sp i

Listing 10.14: Resultado de la ejecucion de groups

Ejecucion del comando groups — sed ’s/ /,/g’:

1 pi , adm, d ia lout , cdrom , sudo , audio , video , plugdev , games , users , input , netdev , gpio ,i2c , s p i

Listing 10.15: Groups separado por comas

El comando a ejecutar para crear el usuario es

1 useradd −m −G [ grupos separados por comas ] nombre nuevo usuario

Listing 10.16: Creacion del usuario 1

Es decir:

1 useradd −m −G $ ( groups | sed ’ s / / ,/ g ’ ) nombre nuevo usuario

Listing 10.17: Creacion del usuario 2

El nuevo usuario sera -¿proycpp:rGLQJIm9Yimel4hkWZPara ello ejecutamos:

1 sudo useradd −m −G $ ( groups | sed ’ s / / ,/ g ’ ) proycpp2 sudo passwd proycpp

Listing 10.18: Creacion del usuario 3

Ademas es necesario editar el fichero: /etc/ssh/sshd config Anadimos:

Page 93: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.3. CONFIGURACION INICIAL DE LA RASPBERRY PI 93

1 # Disab le root l o g i n2 PermitRootLogin yes3

4 # Allow a l l u s e r s5 AllowUsers ∗

Listing 10.19: Modificacion sobre /etc/ssh/sshd config

Reiniciamos:

1 sudo shutdown −r now

Listing 10.20: Reinicio

Accedemos ahora desde el usuario proycpp. Ahora podemos eliminar el usuario pi.

1 sudo de l u s e r −−remove−a l l− f i l e s p i

Listing 10.21: Eliminacion del usuario pi

Damos permisos al nuevo usuario:

1 sudo visudo

Listing 10.22: Permisos para el nuevo usuario

cambiamos pi por proycpp.Despues de realizar estos pasos el usuario pi sigue existiendo, esto ocurre por algunas

de las caracterısticas del sistema, por ejemplo la herramienta de configuracion raspi-configdejarıa de funcionar si eliminasemos el usuario. Para asegurarnos de que no sea tan facilacceder al usuario cambiamos la contrasena a pi:L16XLGnQqrFDgZ5f6Q

Actualizamos el sistema:

1 sudo apt−get update2 sudo apt−get upgrade3 sudo shutdown −r now

Listing 10.23: Actualizacion del sistema

Para que la Raspberry siga entrando al escritorio sin pedir login hay que hacer ciertasmodificaciones.

Seguimos los pasos de esta respuesta [18]:Editamos el archivo /.profile anadiendo al final:

1 #This l i n e s t a r t the x−s e r v e r2 [ [ −z $DISPLAY && $XDGVTNR −eq 1 ] ] && exec s t a r t x

Listing 10.24: Modificaciones sobre /.profile

Ejecutamos:

1 sudo − i2 mkdir −pv / etc / systemd/system/getty@tty1 . s e r v i c e . d3 vim / etc / systemd/system/getty@tty1 . s e r v i c e . d/ auto l og in . conf

Listing 10.25: Login automatico 1

En el fichero /etc/systemd/system/[email protected]/autologin.conf escribimos:

1 [ S e rv i c e ]2 ExecStart=3 ExecStart=−/sb in / agetty −−auto l og in proycpp −−noc l ea r %I 38400 l i nux

Listing 10.26: Login automatico 2

Page 94: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

94 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

Ejecutamos:

1 sy s t emct l enable getty@tty1 . s e r v i c e2 e x i t3 reboot

Listing 10.27: Login automatico 3

10.4. Instalacion y configuracion inicial del Softphone

El Softphone que se va a instalar es Linphone[19]

Instalacion del Linphone:

1 sudo apt−get i n s t a l l l inphone

Listing 10.28: Instalacion de linphone

La documentacion de Linphone se encuentra en [20].

Una vez instalado el Softphone lanzamos linphonec para acceder a la consola del Softp-hone:

Figura 10.4: Acceso a la consola de Linphone

Se muestran los siguientes errores:

1 ALSA l i b conf . c : 4 7 0 5 : ( snd con f ig expand ) Unknown parameters 02 ALSA l i b con t r o l . c : 9 5 3 : ( snd ct l open noupdate ) I nva l i d CTL de f au l t : 03 ALSA l i b conf . c : 4 7 0 5 : ( snd con f ig expand ) Unknown parameters 04 ALSA l i b pcm . c : 2 2 3 9 : ( snd pcm open noupdate ) Unknown PCM de f au l t : 05 ALSA l i b conf . c : 4 7 0 5 : ( snd con f ig expand ) Unknown parameters 06 ALSA l i b pcm . c : 2 2 3 9 : ( snd pcm open noupdate ) Unknown PCM de f au l t : 07 ALSA l i b conf . c : 4 7 0 5 : ( snd con f ig expand ) Unknown parameters 18 ALSA l i b con t r o l . c : 9 5 3 : ( snd ct l open noupdate ) I nva l i d CTL de f au l t : 19 ALSA l i b conf . c : 4 7 0 5 : ( snd con f ig expand ) Unknown parameters 1

10 ALSA l i b pcm . c : 2 2 3 9 : ( snd pcm open noupdate ) Unknown PCM de f au l t : 111 ALSA l i b conf . c : 4 7 0 5 : ( snd con f ig expand ) Unknown parameters 112 ALSA l i b pcm . c : 2 2 3 9 : ( snd pcm open noupdate ) Unknown PCM de f au l t : 1

Listing 10.29: Errores tras instalar el softphone

Page 95: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.4. INSTALACION Y CONFIGURACION INICIAL DEL SOFTPHONE 95

Estan relacionados con el archivo /etc/asound.conf Podemos ignorarlos de momento.Hasta tener configurada una centralita propia utilizamos una de terceras partes.Se ha creado una extension en la centralita para la Raspberry: 5001:VRYJYaV9X8s7hXpepkLa centralita esta en: 151.80.154.96:5061El archivo de configuracion de Linphone esta en: /.linphonercAnadimos las siguientes lineas en la seccion [sip]:

1 [ s i p ]2 #Added in order to c on f i gu r e so f tphone3 s i p p o r t =50614 p ing w i th op t i on s=15 auto net s tate mon=16 #End o f a d i t i o n a l s e c t i o n

Listing 10.30: Configuracion de Linphone

Para registrar el Softphone:Linphonecsh permite manejar una instancia de linphonec que se ejecuta en segundo

plano:

1 l inphonecsh i n i t

Listing 10.31: Ejecucion de linphone

Registramos el Softphone:

1 l inphonecsh r e g i s t e r −−host 151 . 80 . 154 . 96 −−username 5001 −−passwordVRYJYaV9X8s7hXpepk

Listing 10.32: Registro del softphone

Verificamos el estado de registro:

1 l inphonecsh s t a tu s r e g i s t e r

Listing 10.33: Verificacion del estado de registro

El estado devuelto es registered=-1. Significa que no se ha registrado correctamente elSoftphone.

En este post [21] dan una solucion.Editamos el fichero /.linphonerc y anadimos:

1 #Added in order to proper so f tphone r e g i s t e r2 [ a u th i n f o 0 ]3 realm=” a s t e r i s k ”4 #End o f a d i t i o n a l s e c t i o n

Listing 10.34: Modificaciones sobre la configuracion de Linphone

Editamos el fichero /etc/hosts y anadimos:

1 151 . 80 . 154 . 96 a s t e r i s k

Listing 10.35: Modificaciones sobre el fichero hosts

Cancelamos el registro del Softphone:

1 l inphonecsh un r e g i s t e r

Listing 10.36: Cancelacion del registro del softphone

Volvemos a registrar el Softphone:

Page 96: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

96 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

1 l inphonecsh r e g i s t e r −−host a s t e r i s k −−username 5001 −−passwordVRYJYaV9X8s7hXpepk

Listing 10.37: Registro del softphone

Pruebo llamando a mi extension:

1 l inphonecsh d i a l ” s i p :3101@151 . 8 0 . 1 5 4 . 9 6 : 5 0 6 1 ”

Listing 10.38: Realizacion de una llamada

La llamada llega correctamente. Cuelgo la llamada:

1 l inphonecsh hangup

Listing 10.39: Colgar una llamada

10.5. Configuracion del altavoz Bluetooth

Para la configuracion del altavoz se han seguido las instrucciones de este foro[22]:Primero verificamos la version del sistema operativo, al parecer no funciona correcta-

mente el Bluetooth en le version weezy de raspbian. Para ello utilizamos el comando.

1 cat / e t c/∗− r e l e a s e

Listing 10.40: Version del sistema

Figura 10.5: Version del sistema

Es la version jessie.Ahora instalamos el paquete pi-bluetooth, que incluye las herramientas para gestionar

el Bluetooth de la Raspberry.

1 sudo apt−get i n s t a l l pi−bluetooth

Listing 10.41: Instalacion de pi-bluetooth

Instalamos tambien los paquetes bluez pulseaudio-module-bluetooth python-gobjectpython-gobject-2

1 sudo apt−get i n s t a l l b luez pulseaudio−module−bluetooth python−gob j e c t python−gobject−2

Listing 10.42: Instalacion de modulos adicionales

Page 97: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.5. CONFIGURACION DEL ALTAVOZ BLUETOOTH 97

Estos paquetes ya estaban instalados, si la version del sistema operativo fuese weezyla instalacion de estos paquetes deberıa permitirnos manejar el Bluetooth sin problemas.

Ahora anadimos al usuario al grupo lp para que pueda manejar el Bluetooth.

1 sudo usermod −a −G lp proycpp

Listing 10.43: Modificaciones en el usuario

Segun el foro deberıamos editar el fichero /etc/bluetooth/audio.conf pero esta vacıo.Segun este otro hilo [23] hay que hacer las modificaciones en /etc/bluetooth/main.conf.Anadimos al final de la seccion [General]

1 #Line added in order to con f i gu r e a b luetooth speaker2 Enable=Source , Sink , Media , Socket

Listing 10.44: Modificaciones sobre /etc/bluetooth/main.conf

Ahora modificamos el archivo de configuracion de pulse-audio, podemos encontrar ladocumentacion en [24]

El parametro que vamos a modificar es la tasa de muestreo de audio, las posibilida-des son: src-sinc-best-quality, src-sinc-medium-quality, src-sinc-fastest, src-zero-order-hold,src-linear, trivial, speex-float-N, speex-fixed-N, ffmpeg

Trivial es el metodo mas simple y el recomendado para sistemas con poca potencia, seconsiderara subir la calidad en caso de no ser suficiente en el futuro.

En el fichero: /etc/pulse/daemon.conf Modificamos la lınea:

1 # resample−method d e f a u l t s to speex−f l o a t −1 on most a r ch i t e c t u r e s ,2 # speex−f i xed−1 on ARM3 ; resample−method = speex−f l o a t −1

Listing 10.45: Base de /etc/pulse/daemon.conf

Para que quede de la siguiente manera:

1 # resample−method d e f a u l t s to speex−f l o a t −1 on most a r ch i t e c t u r e s ,2 # speex−f i xed−1 on ARM3 resample−method = t r i v i a l

Listing 10.46: Modificaciones sobre /etc/pulse/daemon.conf

Verificamos la configuracion del Bluetooth mediante:

1 h c i c o n f i g −a

Listing 10.47: Configuracion de bluetooth

Page 98: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

98 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

Figura 10.6: Estado del bluetooth

En este punto estamos listos para conectar el altavoz mediante Bluetooth.Iniciamos el escaneo en la Raspberry:

1 sudo h c i c o n f i g hc i0 p i scan

Listing 10.48: Inicio de escaneo de dispositivos Bluetooth

Verificamos que esta ejecutando el escaneo:

1 sudo h c i c o n f i g −a

Listing 10.49: Estado del escaneo Bluetooth

Figura 10.7: Estado del bluetooth tras iniciar escaneo

UP RUNNING PSCAN ISCAN Significa que esta funcionandoIniciamos el proceso de conexion:

Page 99: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.5. CONFIGURACION DEL ALTAVOZ BLUETOOTH 99

1 bluez−s imple−agent

Listing 10.50: Inicio del proceso de conexion

Este comando falla, segun este post [25], este comando ha sido sustituido por este otro:

1 sudo b l u e t o o th c t l

Listing 10.51: Terminal Bluetooth

Esto nos abre una sesion en una terminal disenada para manejar Bluetooth.

Figura 10.8: Consola bluetoothctl

Ejecutamos ahora:

1 power on2 d i s c ov e r ab l e on3 agent on4 de fau l t−agent

Listing 10.52: Conexion Bluetooth

Estos comandos nos permiten activar, dar visibilidad e iniciar el agente para la conexionBluetooth. El ultimo inicia el proceso de pairing. Pero estos pasos son para dispositivoscomo moviles que permiten introducir un pin.

En este caso es un dispositivo sin esta funcionalidad, ası que hay que informar alprograma de que confiamos en el altavoz.

Para obtener la direccion del altavoz: lo encendemos, activamos el modo de sincroni-zacion y ejecutamos en la Raspberry:

1 sudo h c i t o o l scan

Listing 10.53: Inicio sincronizacion

Figura 10.9: Salida de hcitool scan

En este caso la MAC del altavoz es 00:1D:DF:6B:3E:0CPara conectarlo los pasos seran:

1 b l u e t o o th c t l2 t r u s t 00 :1D:DF:6B: 3E: 0C3 pa i r ab l e on4 pa i r 00 :1D:DF:6B: 3E: 0C

Page 100: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

100 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

5 connect 00 :1D:DF:6B:3E: 0C

Listing 10.54: Conexion altavoz

No encuentra el dispositivo, hay que actualizar los dispositivos disponibles, en el manualde bluetoothctl no dice nada, pero en esta pagina [26] esta la documentacion.

Para los pasos para conectarlo seran:

1 b l u e t o o th c t l2 power on3 agent on4 scan on5 pa i r ab l e on6 pa i r 00 :1D:DF:6B: 3E: 0C7 t r u s t 00 :1D:DF:6B: 3E: 0C8 connect 00 :1D:DF:6B:3E: 0C

Listing 10.55: Proceso de conexion

Inicialmente no ha sido capaz de conectar, el demonio pulseaudio no estaba arrancado.Para solucionarlo:

1 pu l seaud io −−s t a r t

Listing 10.56: Levantar el demonio pulseaudio

Page 101: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.5. CONFIGURACION DEL ALTAVOZ BLUETOOTH 101

Figura 10.10: Proceso de conexion Bluetooth

Una vez solucionado eso conecta correctamente.

No se escucha nada.

Probablemente se trate de que esta tratando de reproducir el archivo por otra interfaz.Seguimos los pasos descritos aquı [27]

En el fichero /.asoundrc escribimos:

1 pcm . b luetooth {2 type b luetooth3 dev i ce 00 :1D:DF:6B: 3E: 0C4 }

Listing 10.57: Configuracion de /.asoundrc 1

Copiamos el archivo a /etc/asound.conf

1 sudo cp ˜/ . asoundrc / e tc /asound . conf

Listing 10.58: Configuracion de /.asoundrc 2

Page 102: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

102 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

Modificamos el fichero /etc/bluetooth/main.conf para que quede ası el final del laseccion [General].

1 #Line added in order to c o n f i f u r e a b luetooth speaker v e r s i on 1 ( doesentwork )

2 #Enable=Source , Sink , Media , Socket3

4 #Line added in order to c o n f i f u r e a b luetooth speaker v e r s i on 25 Enable=Socket6

7 #Line added in order to c o n f i f u r e a Bluetooth speaker v e r s i on 28 Disab le=Media

Listing 10.59: Fichero /etc/bluetooth/main.conf

Reiniciamos el Bluetooth y volvemos a conectar el altavoz.

Ahora funciona correctamente.

10.6. Testeo del microfono

Para testear el microfono vamos a usar un programa de grabacion que acepte comandosdesde la consola, arecord.

1 sudo apt−get i n s t a l l a l sa−u t i l s

Listing 10.60: Instalacion de alsa-utils

En este caso ya esta instalado Para realizar una grabacion ejecutamos:

1 arecord ˜/ te s tMic ro fono .mp3

Listing 10.61: Grabacion de un audio

En este caso aparece el siguiente error:

1 arecord : main : 7 2 2 : audio open e r r o r : No such f i l e or d i r e c t o r y

Listing 10.62: Error durante la grabacion

Probamos a instalar los siguientes paquetes:

1 sudo apt−get i n s t a l l sox l i b sox−fmt−mp3 lame

Listing 10.63: Instalacion de paquetes adicionales

No soluciona directamente el problema, pero podrıan ser utiles en el futuro Parece serque el problema es que no se ha especificado el dispositivo de grabacion, segun la entradade este blog [28]

Verificamos los dispositivos conectados

1 arecord − l

Listing 10.64: Lista de dispositivos de grabacion

Page 103: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.6. TESTEO DEL MICROFONO 103

Figura 10.11: Listado de dispositivos de grabacion

Consultando en el manual [29] la solucion del post antes mencionado, utiliza losparametros: -D nombre del dispositivo a seleccionar, en este caso hw:1,0 -f formato demuestreo, probamos con s16 le

Grabamos un audio de prueba con:

1 arecord −D hw:1 , 0 −f s 1 6 l e > t e s t . wav

Listing 10.65: Grabacion de un audio

Para escucharlo, como aun no hemos conectado el altavoz lo copiamos mediante SCP:

1 scp proycpp@192 . 1 6 8 . 1 . 1 8 : / home/proycpp/tmp/ t e s t . wav t e s t . wav

Listing 10.66: Copiar fichero a PC desde la raspberry

Ahora podemos escuchar el archivo:

1 aplay t e s t . wav

Listing 10.67: Reproduccion de archivo de audio

Se escucha muy bajo, pero ha grabado correctamente.Con esto hemos comprobado que el microfono se detecta y funciona correctamente,

ahora hay que ponerlo como dispositivo por defecto, segun este post [30] hay que editarel archivo /usr/share/alsa/alsa.conf

Modificamos los parametros:

1 d e f a u l t s . c t l . card 02 d e f a u l t s . pcm . card 0

Listing 10.68: Archivo /usr/share/alsa/alsa.conf original

Para que queden ası:

1 d e f a u l t s . c t l . card 22 d e f a u l t s . pcm . card 2

Listing 10.69: Modificaciones sobre /usr/share/alsa/alsa.conf

Segun este documento [31], ademas es necesario lo siguiente:En /.asoundrc anado las lineas:

1 pcm . ! d e f au l t {2 type hw3 card 24 }5

6 c t l . ! d e f au l t {7 type hw8 card 29 }

Page 104: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

104 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

Listing 10.70: Modificaciones en /.asoundrc

Instalo pavucontrol y padevchooser:

1 sudo apt−get i n s t a l l pavucontro l2 sudo apt−get i n s t a l l padevchooser

Listing 10.71: Instalacion de pavucontrol y padevchooser

Anado a /etc/rc.local:

1 #pulseaud io c on f i gu r a t i on2 DBUS SESSION BUS ADDRESS=unix : path=/run/dbus/ sys tem bus socket3 DBUS SESSION BUS PID=‘ cat /run/dbus/pid ‘4 pu l seaud io −−s t a r t

Listing 10.72: Modificaciones sobre /etc/rc.local

Se ha anadido PCM Dummy a los dispositivos de captura, ahora el microfono es hw:2,0

Figura 10.12: Listado de dispositivos de grabacion

Se graba correctamente el sonido utilizando el comando:

1 arecord −D hw:2 , 0 −f s 1 6 l e > t e s t . wav

Listing 10.73: Comando correcto de grabacion

El microfono funciona correctamente, pero durante las llamadas no se escucha. Hayque configurar el Softphone para que utilice el microfono correcto.

10.7. Instalacion y configuracion de la centralita

Se ha contratado un servidor VPS en OVH. vps367650.ovh.net

Para la instalacion de la centralita se han seguido las instrucciones de este post [32].

Es imprescindible realizar todo el proceso como root Nos conectamos al servidor VPS:

Page 105: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.7. INSTALACION Y CONFIGURACION DE LA CENTRALITA 105

1 ssh root@vps367650 . ovh . net

Listing 10.74: Accaso al VPS

Actualizamos el sistema:

1 apt−get update && apt−get upgrade −y

Listing 10.75: Actualizacion del sistema

Instalamos las dependencias:

1 apt−get i n s t a l l −y bui ld−e s s e n t i a l l inux−headers −‘uname −r ‘ openssh−s e r v e rapache2 mysql−s e r v e r \

2 mysql−c l i e n t b i son f l e x php5 php5−cu r l php5−c l i php5−mysql php−pear php5−gdcu r l sox\

3 l i bncu r s e s 5−dev l i b s s l −dev l i bmysq l c l i e n t−dev mpg123 l ibxml2−dev l ibnewt−devs q l i t e 3 \

4 l i b s q l i t e 3 −dev pkg−c on f i g automake l i b t o o l autoconf g i t unixodbc−dev uuiduuid−dev\

5 l ibasound2−dev l ibogg−dev l i b v o rb i s−dev l i b c u r l 4−openss l−dev l i b i c a l −devl ibneon27−dev l i b s r t p0−dev\

6 l ibspandsp−dev sudo libmyodbc subver s i on

Listing 10.76: Instalacion de dependencias

Durante la instalacion nos pide: Configuracion para mysql [root:IKlkso83u]Reiniciamos el vps:

1 reboot

Listing 10.77: Reinicio del VPS

Nos volvemos a conectar al servidor VPS:

1 ssh root@vps367650 . ovh . net

Listing 10.78: Conexion al VPS

Instalamos las dependencias legacy de pear:

1 pear i n s t a l l Console Getopt

Listing 10.79: Instalacion de dependencias de Pear

Instalamos las dependencias de google voice *este paso ya no funciona tal como estaen la guia, hay que descargar y compilar desde el repositorio git:

1 cd ˜2 mkdir tmp3 cd tmp4 g i t c l one https : // github . com/meduketto/ ikseme l . g i t5 cd ikseme l6 . / autogen . sh7 apt−get i n s t a l l python−dev8 . / c on f i gu r e9 apt−get i n s t a l l t e x i n f o

10 make11 make check12 make i n s t a l l13 l d c o n f i g14 cd . .15 rm −R ikseme l

Listing 10.80: Instalacion de dependencias de google voice

Page 106: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

106 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

Descargamos Asterisk:

1 cd / usr / s r c2 wget http :// downloads . a s t e r i s k . org /pub/ te lephony /dahdi−l inux−complete /dahdi−

l inux−complete−cur rent . ta r . gz3 wget http :// downloads . a s t e r i s k . org /pub/ te lephony / l i b p r i / l i b p r i−cur rent . ta r .

gz4 wget http :// downloads . a s t e r i s k . org /pub/ te lephony / a s t e r i s k / a s t e r i s k −13−

cur rent . ta r . gz5 wget −O jansson . ta r . gz https : // github . com/akheron/ jansson / arch ive /v2 . 7 . ta r .

gz6 wget http ://www. p j s i p . org / r e l e a s e /2 .4/ p jp ro j e c t −2.4 . ta r . bz2

Listing 10.81: Descarga de Asterisk

Saltamos el paso de la instalacion de DAHDI, no disponemos de hardware de digiumpara la centralita y la conexion con la red telefonica se realizara a traves de un trunk SIPcon la centralita del proveedor de VoIP.

Compilamos e instalamos Pjproject:

1 cd / usr / s r c2 ta r −x j v f p jp ro j e c t −2.4 . ta r . bz23 rm −f p jp ro j e c t −2.4 . ta r . bz24 cd p jp ro j e c t −2.45 CFLAGS=’−DPJ HAS IPV6=1 ’ . / c on f i gu r e −−enable−shared −−d i sab l e−sound −−

d i sab l e−resample −−d i sab l e−video −−d i sab l e−opencore−amr6 make dep7 make8 make i n s t a l l

Listing 10.82: Instalacion de Pjproject

Compilamos e instalamos Jansson [33]:

1 cd / usr / s r c2 ta r vxfz jansson . ta r . gz3 rm −f j ansson . ta r . gz4 cd jansson−∗5 autorecon f − i6 . / c on f i gu r e7 make8 make i n s t a l l

Listing 10.83: Instalacion de Jansson

Compilamos e instalamos Asterisk:

1 cd / usr / s r c2 ta r xvfz a s t e r i s k −13−cur rent . ta r . gz3 rm −f a s t e r i s k −13−cur rent . ta r . gz4 cd a s t e r i s k −∗5 con t r i b / s c r i p t s / get mp3 source . sh6 con t r i b / s c r i p t s / i n s t a l l p r e r e q i n s t a l l7 . / c on f i gu r e8 make menuse lect

Listing 10.84: Descompresion y configuracion de la compilacion de Asterisk

Durante la configuracion (contrib/scripts/install prereq install) nos preguntara por elITU-T telephone code [34], puesto que la centralita esta en francia pondremos el codigo33.

Page 107: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.7. INSTALACION Y CONFIGURACION DE LA CENTRALITA 107

Tras menuselect nos permite seleccionar una serie de anadidos a Asterisk, marcamosel add-on que da soporte a mp3 y los packs de sonidos en ingles y espanol(gsm).

Una vez guardada la configuracion terminamos de compilar:

1 make2 make i n s t a l l3 make con f i g4 l d c o n f i g5 update−rc . d −f a s t e r i s k remove

Listing 10.85: Compilacion de Asterisk

Instalamos los sonidos de alta calidad:

1 cd /var / l i b / a s t e r i s k / sounds2 wget http :// downloads . a s t e r i s k . org /pub/ te lephony / sounds/ a s t e r i s k−core−sounds

−en−wav−cur rent . ta r . gz3 wget http :// downloads . a s t e r i s k . org /pub/ te lephony / sounds/ a s t e r i s k−extra−

sounds−en−wav−cur rent . ta r . gz4 ta r xvf a s t e r i s k−core−sounds−en−wav−cur rent . ta r . gz5 rm −f a s t e r i s k−core−sounds−en−wav−cur rent . ta r . gz6 ta r x f z a s t e r i s k−extra−sounds−en−wav−cur rent . ta r . gz7 rm −f a s t e r i s k−extra−sounds−en−wav−cur rent . ta r . gz8 # Wideband Audio download9 wget http :// downloads . a s t e r i s k . org /pub/ te lephony / sounds/ a s t e r i s k−core−sounds

−en−g722−cur rent . ta r . gz10 wget http :// downloads . a s t e r i s k . org /pub/ te lephony / sounds/ a s t e r i s k−extra−

sounds−en−g722−cur rent . ta r . gz11 ta r x f z a s t e r i s k−extra−sounds−en−g722−cur rent . ta r . gz12 rm −f a s t e r i s k−extra−sounds−en−g722−cur rent . ta r . gz13 ta r x f z a s t e r i s k−core−sounds−en−g722−cur rent . ta r . gz14 rm −f a s t e r i s k−core−sounds−en−g722−cur rent . ta r . gz

Listing 10.86: Instalacion de los sonidos de alta calidad

Creamos el usuario Asterisk y le damos permisos:

1 useradd −m a s t e r i s k2 chown a s t e r i s k . / var /run/ a s t e r i s k3 chown −R a s t e r i s k . / e t c / a s t e r i s k4 chown −R a s t e r i s k . / var /{ l i b , log , spoo l }/ a s t e r i s k5 chown −R a s t e r i s k . / usr / l i b / a s t e r i s k6 rm −r f / var /www/html

Listing 10.87: Creacion del usuario Asterisk

Realizamos unas modificaciones en Apache:

1 sed − i ’ s /\(ˆ up l o ad max f i l e s i z e = \) .∗/\120M/ ’ / e t c /php5/apache2/php . i n i2 cp / e tc /apache2/apache2 . conf / e t c /apache2/apache2 . c o n f o r i g3 sed − i ’ s /ˆ\( User \ |Group\) .∗/\1 a s t e r i s k / ’ / e t c /apache2/apache2 . conf4 sed − i ’ s /AllowOverride None/AllowOverride Al l / ’ / e t c /apache2/apache2 . conf5 s e r v i c e apache2 r e s t a r t

Listing 10.88: Modificaciones necesarias en Apache

Configuramos ODBC: Anadimos al archivo /etc/odbcinst.ini

1 [MySQL]2 Desc r ip t i on = ODBC fo r MySQL3 Driver = /usr / l i b /x86 64−l inux−gnu/odbc/ libmyodbc . so4 Setup = /usr / l i b /x86 64−l inux−gnu/odbc/ libodbcmyS . so5 Fi leUsage = 1

Page 108: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

108 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

Listing 10.89: Configuracion de ODBC 1

Y al archivo /etc/odbc.ini

1 [MySQL−a s t e r i s k cd rdb ]2 Desc r ip t i on=MySQL connect ion to ’ a s t e r i s k cd rdb ’ database3 d r i v e r=MySQL4 s e r v e r=l o c a l h o s t5 database=as t e r i s k cd rdb6 Port=33067 Socket=/var /run/mysqld/mysqld . sock8 opt ion=3

Listing 10.90: Configuracion de ODBC 2

Descargamos e instalamos FreePBX:

1 cd / usr / s r c2 wget http :// mirror . f r eepbx . org /modules/ packages / f reepbx / freepbx −13.0− l a t e s t .

tgz3 ta r vxfz freepbx −13.0− l a t e s t . tgz4 rm −f f reepbx −13.0− l a t e s t . tgz5 cd f reepbx6 . / s t a r t a s t e r i s k s t a r t7 . / i n s t a l l −f

Listing 10.91: Descarga e instalacion de FreePBX

Como hemos cambiado la contrasena de la BD no podemos utilizar el comando ./install-n en lugar de eso tenemos que utilizar ./install -f que nos ira pidiendo parametros, dejamostodos por defecto excepto el password de la BD que sera el que hemos puesto al principiode la configuracion.

Nos dirigomos desde el navegador a la url de configuracion de FreePBX, en nuestrocaso: http://vps367650.ovh.net/html/admin/config.php

Aparece un error: “Can not connect with asterisk” se debe a que el servicio no estalevantado, ejecutamos:

1 s e r v i c e a s t e r i s k s t a r t

Listing 10.92: Ejecucion del servicio Asterisk

Ahora si podemos acceder.

Page 109: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.7. INSTALACION Y CONFIGURACION DE LA CENTRALITA 109

Figura 10.13: Pantalla inicial de FreePBX

Introducimos los datos: [email protected] proycpp:yuMejECrufrADRe3AfNos encontramos con una serie de errores: “.htaccess files are disable on this webserver.

Please enable them” Segun la documentacion de FreePBX [35] [https://wiki.freepbx.org/display/F2/Webserver+Overrides]para resolver este error debemos permitir a FreePBX modificar ciertos archivos, esto se con-figura desde Apache. Modificamos en el archivo /etc/apache2/sites-enabled/000-default lassiguientes lıneas:

1 <Virtua lHost ∗:80>2 ServerAdmin webmaster@localhost3

4 DocumentRoot /var /www5 <Direc tory />6 Options FollowSymLinks7 AllowOverride Al l8 </Directory>9 <Direc tory /var /www/>

10 Options Indexes FollowSymLinks MultiViews11 AllowOverride Al l12 Order al low , deny13 a l low from a l l14 </Directory>15

16 Sc r i p tA l i a s / cg i−bin / / usr / l i b / cg i−bin /

Page 110: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

110 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

17 <Direc tory ”/ usr / l i b / cg i−bin ”>18 AllowOverride Al l19 Options +ExecCGI −MultiViews +SymLinksIfOwnerMatch20 Order al low , deny21 Allow from a l l22 </Directory>23

24 ErrorLog ${APACHE LOG DIR}/ e r r o r . l og25

26 # Pos s i b l e va lue s in c lude : debug , in fo , not i ce , warn , e r ro r , c r i t ,27 # a l e r t , emerg .28 LogLevel warn29

30 CustomLog ${APACHE LOG DIR}/ ac c e s s . l og combined31 </VirtualHost>

Listing 10.93: Configuracion adicional Apache

Reiniciamos apache:

1 s e r v i c e apache2 r e s t a r t

Listing 10.94: Reinicio del servicio Apache

Ahora no funciona FreePBX, en el log de apache: /var/log/apache2/error.log vemosla lınea: “[Fri Jan 27 15:22:07 2017] [alert] [client 82.158.60.153] /var/www/html/admi-n/.htaccess: Invalid command ’RewriteEngine’, perhaps misspelled or defined by a modulenot included in the server configuration”

En este post [36] dan la solucion.

Habilitamos el modulo rewrite:

1 sudo a2enmod r ewr i t e2 s e r v i c e apache2 r e s t a r t

Listing 10.95: Habilitar el modulo rewrite de Apache

La interfax de FreePBX vuelve a funcionar y el primer problema ha desaparecido.

Respecto a “Reload failed because retrieve conf encountered an error: 1” Segun estepost [37] se puede solucionar ejecutando:

1 fwconso l e r e s t a r t

Listing 10.96: Reinicio de fwconsole

Por ultimo aparece el siguiente error “ Module: .Asterisk Logfiles”, File: /var/www/html/admin/modules/logfiles/etc/logger.confaltered”” Este error se debe a que hemos modificado el log para poder utilizar fail2ban,para solucionarlo, segun este hilo [38], debemos actualizar las firmas de Asterisk:

1 fwconso l e ma r e f r e s h s i g n a t u r e s

Listing 10.97: Actualizadion de firmas de Asterisk

10.7.1. Configuracion de la centralita

Creamos las extensiones: Applications –¿Extensions –¿Add extension –¿new chan sipextension

Page 111: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.7. INSTALACION Y CONFIGURACION DE LA CENTRALITA 111

Figura 10.14: Creacion de una extension configuracion basica

Llenamos los campos User Extension , Display Name y Secret.

Figura 10.15: Creacion de una extension configuracion avanzada

En las opciones avanzadas marcamos: Nat Mode -¿yes - (force rport,comedia) Aplica-mos los cambios y testeamos.

Listado de extensiones:

- 101:c553202246b4d94686a5e193862f5692 [PC]

Page 112: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

112 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

- 111:ec893d213ceb87c07f6c6f5a2bbd2369 [Movil]

- 202:caa92[Raspberry]

Se ha testeado y funciona correctamente desde el pc y el movil.

10.7.2. Configuracion del Softphone de la Raspberry para la nueva cen-tralita

Anadimos la nueva centralita al fichero /etc/hosts, queda ası:

1 1 2 7 . 0 . 0 . 1 l o c a l h o s t2 : : 1 l o c a l h o s t ip6−l o c a l h o s t ip6−loopback3 f f 0 2 : : 1 ip6−a l l n od e s4 f f 0 2 : : 2 ip6−a l l r o u t e r s5

6 1 2 7 . 0 . 1 . 1 ra spbe r ryp i7 151 . 80 . 154 . 96 a s t e r i s k o l d8 79 . 1 37 . 8 3 . 6 6 a s t e r i s k

Listing 10.98: Modificaciones sobre el fichero de hosts

Probamos a registrar el Softphone:

1 l inphonecsh i n i t2 l inphonecsh r e g i s t e r −−host a s t e r i s k :5160 −−username 202 −−password caa92

Listing 10.99: Registro del softphone

Funciona correctamente

10.7.3. Consideraciones de seguridad

Seguimos las recomendaciones de este post de Digium [39]Despues del make install asterisk nos pide que leamos el archivo README-SERIOUSLY.bestpractices.txtLo descargo mediante:

1 scp root@vps367650 . ovh . net : / usr / s r c / a s t e r i s k −13.13.1/README−SERIOUSLY.b e s t p r a c t i c e s . txt ˜

Listing 10.100: Descarga del fichero README-SERIOUSLY

Verificamos que iptables y python estan instalados:

1 apt−get i n s t a l l python i p t a b l e s

Listing 10.101: Instalacion de Python e IPTables

Instalamos fail2ban:

1 apt−get i n s t a l l f a i l 2 ban

Listing 10.102: Instalacion de fail2ban

Para acceder a la configuracion de fail2ban vamos a /etc/fail2ban aquı encontramos elarchivo jail.conf, este no se debe tocar. Lo copiamos a jail.local, este archivo sera el queutilice fail2ban

1 cd / e tc / f a i l 2 b an2 cp j a i l . conf j a i l . l o c a l

Listing 10.103: Copia de seguridad del fichero jail

Page 113: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.7. INSTALACION Y CONFIGURACION DE LA CENTRALITA 113

Utilizo esta guıa para configurar fail2ban [40]

Como estamos utilizando la version Asterisk 13.13.1 podemos utilizar el log especıficode seguridad de Asterisk.

vamos a /etc/asterisk y anadimos al archivo logger.conf las siguientes lıneas:

1 s e c u r i t y => s e c u r i t y2 dateformat=%F %T

Listing 10.104: Configuracion adicional del reistro de Asterisk

Creamos el filtro para fail2ban, creamos el archivo /etc/fail2ban/asterisk.conf

1 # Fail2Ban con f i g u r a t i on f i l e2 #3 #4 # $Revis ion : 250 $5 #6

7 [ INCLUDES]8

9 # Read common p r e f i x e s . I f any cus tomiza t i ons a v a i l a b l e −− read them from10 # common . l o c a l11 #be fo r e = common . conf12

13

14 [ D e f i n i t i o n ]15

16 # daemon = a s t e r i s k17

18 # Option : f a i l r e g e x19 # Notes . : regex to match the password f a i l u r e s messages in the l o g f i l e . The20 # host must be matched by a group named ”host ” . The tag ”<HOST>”

can21 # be used f o r standard IP/hostname matching and i s only an a l i a s

f o r22 # ( ? : : : f {4 , 6} : ) ?(?P<host>\S+)23 # Values : TEXT24 #25

26 f a i l r e g e x = SECURITY.∗ Secur i tyEvent=”FailedACL” .∗RemoteAddress=”.+?/.+?/<HOST>/.+?” .∗

27 SECURITY.∗ Secur i tyEvent=” Inval idAccountID” .∗RemoteAddress=”.+?/.+?/<HOST>/.+?” .∗

28 SECURITY.∗ Secur i tyEvent=”Chal lengeResponseFai led ” .∗RemoteAddress=”.+?/.+?/<HOST>/.+?” .∗

29 SECURITY.∗ Secur i tyEvent=” Inval idPassword ” .∗RemoteAddress=”.+?/.+?/<HOST>/.+?” .∗

30

31 # Option : i gno r e r egex32 # Notes . : regex to i gnore . I f t h i s regex matches , the l i n e i s ignored .33 # Values : TEXT34 #35 i gno r e r egex =

Listing 10.105: Creacion del filtro de fail2ban para Asterisk

Reiniciamos el logger de Asterisk:

1 a s t e r i s k −rx ” l ogg e r r e l oad ”

Listing 10.106: Reinicio del sistema de registro de Asterisk

Page 114: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

114 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

En jail.local realizamos las siguientes modificaciones: Excluimos la ip del equipo desdeel que estamos trabajando:

1 [DEFAULT]2 i g no r e i p = 127 . 0 . 0 . 1 / 8 82 . 158 . 60 . 153/32

Listing 10.107: Excluimos las ips de confianza

Habilitamos el filtro para Apache:

1 [ apache ]2 enabled=true

Listing 10.108: Habilitar filtro para Apache

Habilitamos el filtro para Asterisk:

1 [ a s t e r i s k−i p t a b l e s ]2 enabled = true3 f i l t e r = a s t e r i s k4 ac t i on = ip tab l e s−a l l p o r t s [ name=ASTERISK, p ro to co l=a l l ]5 sendmail−whois [ name=ASTERISK, dest=root , sender=fai l2ban@example . org ]6 logpath = /var / log / a s t e r i s k / s e c u r i t y7 maxretry = 58 bantime = 259200

Listing 10.109: Habilitar el filtro para Asterisk

Reiniciamos el servicio:

1 s e r v i c e f a i l 2 b an r e s t a r t

Listing 10.110: Reinicio del servicio de fail2ban

Configuramos iptables (firewall) para que solo acepte peticiones por los puertos quenos interesa exponer:

- ssh 22

- apache 80 y 443

Nos aseguramos de que tanto iptables como fail2ban se ejecutan al arrancar el sistema:

1 update−rc . d i p t a b l e s d e f a u l t s2 update−rc . d f a i l 2 b an d e f a u l t s

Listing 10.111: Incluir fail2ban en el arranque del sistema

10.7.4. Verificacion de todo el sistema montado hasta el momento

Conexion altavoz:

1 pu l seaud io −−s t a r t2 b l u e t o o th c t l3 power on4 agent on5 scan on6 pa i r ab l e on7 pa i r 00 :1D:DF:6B: 3E: 0C8 t r u s t 00 :1D:DF:6B: 3E: 0C9 connect 00 :1D:DF:6B:3E: 0C

10 e x i t

Listing 10.112: Conexion del altavoz

Page 115: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.7. INSTALACION Y CONFIGURACION DE LA CENTRALITA 115

El microfono no necesita configuracion en este momentoRegistro del Softphone:

1 l inphonecsh i n i t2 l inphonecsh r e g i s t e r −−host 79 . 1 37 . 8 3 . 6 6 : 5 160 −−username 202 −−password

caa92

Listing 10.113: Registro del softphone

Al realizar una llamada a la Raspberry parece que el demonio linphonecsh se bloquea ydeja de responder, segun este post es porque falta el modulo snd-dummy para solucionarlo,segun el foro de ubuntu [41] hay que anadir la lınea “snd-dummy” al fichero /etc/modules,queda ası:

1 # / etc /modules : k e rne l modules to load at boot time .2 #3 # This f i l e conta in s the names o f k e rne l modules that should be loaded4 # at boot time , one per l i n e . L ines beg inning with ”#” are ignored .5

6 i2c−dev7 snd−dummy

Listing 10.114: Modificaciones sobre /etc/modules

Tras este cambio reiniciamos.Tras registrar el Softphone realizamos una llamada desde el movil y ejecutamos:

1 l inphonecsh s t a tu s r e g i s t e r2 −−> r e g i s t e r e d , i d e n t i t y=s i p :202@79 . 1 3 7 . 8 3 . 6 6 : 5 1 6 0 durat ion=36003 l inphonecsh s t a tu s hook4 −−> Incoming c a l l from ”Car los Movil ” <s i p :111@79 .137 .83 .66 :5160 >5 l inphonecsh g ene r i c ”answer”6 [ . . . ]7 l inphonecsh hangup

Listing 10.115: Descolgar llamada desde el demonio de Linphone

La llamada funciona con algunos problemas de sonido, la calidad no es muy buena y elaltavoz no reproduce nada, pero el Softphone esta finalmente configurado para registrarsey ser manejado.

Para solucionar el problema con el altavoz vamos a cambiar el dispositivo de salida deaudio por defecto, sigo las intrucciones de este post [42].

Listamos los dispositivos

1 pacmd l i s t −s i nk s

Listing 10.116: Listado de dispositivos

Como solo nos interesa el nombre ejecutamos:

1 pacmd l i s t −s i nk s | grep name

Listing 10.117: Filtrado del nombre

Devuelve:

- name: alsa output.platform-snd dummy.0.analog-stereo

- name: alsa output.1.analog-stereo

- name: bluez sink.00 1D DF 6B 3E 0C

Page 116: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

116 CAPITULO 10. ANEXO I MANUAL DE INSTALACION Y USO

Queremos utilizar el dispositivo Bluetooth bluez sink.00 1D DF 6B 3E 0C Lo estable-cemos como dispositivo por defecto:

1 pacmd set−de fau l t−s ink ” b l u e z s i nk .00 1D DF 6B 3E 0C”

Listing 10.118: Establecer dispositivo como predeterminado

Ahora funciona correctamente ante una llamada entrante. Hay un problema de eco quese soluciona posicionando el microfono apuntando directamente al interlocutor.

Al reiniciar no se ha guardado el dispositivo de salida por defecto, hay que arreglareso. Como el dispositivo no existe mientras no este conectado habra que agregarlo en elscript encargado de manejar la conexion Bluetooth con el altavoz.

10.7.5. Configuracion DNS dinamico

Sigo los pasos de este post [43].Creo en no-ip un host dinamico:

Figura 10.16: Creacion del DNS dinamico en no-ip

Instalo el cliente de no-ip:

1 cd ˜2 mkdir no−ip3 cd no−ip4 wget http ://www. no−ip . com/ c l i e n t / l i nux /noip−duc−l i nux . ta r . gz5 ta r −zxvf noip−duc−l i nux . ta r . gz6 ta r −zxvf noip−duc−l i nux . ta r . gz7 cd noip −2.1.9−1/8 make9 sudo make i n s t a l l

Listing 10.119: Instalacion del cliente no-ip

creo el archivo /etc/init.d/noip2:

1 #! /bin /bash2 ### BEGIN INIT INFO3 # Provides : S e r v i c i o No−IP

Page 117: PROYECTO FIN DE GRADO - Archivo Digital UPMoa.upm.es/55019/1/TFG_CARLOS_PINEDO_PELAEZ.pdf · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y SISTEMAS DE TELECOMUNICACIÓN PROYECTO FIN

10.7. INSTALACION Y CONFIGURACION DE LA CENTRALITA 117

4 # Required−Star t : $ sy s l og5 # Required−Stop : $ sy s l og6 # Default−Star t : 2 3 4 57 # Default−Stop : 0 1 68 # Short−Desc r ip t i on : arranque automatico para no−ip9 # Desc r ip t i on :

10 #11 ### END INIT INFO12 sudo / usr / l o c a l / bin /noip2

Listing 10.120: Configuracion no-ip

Damos permisos al archivo para que se ejecute durante el arranque:

1 sudo chmod +x / etc / i n i t . d/noip22 sudo update−rc . d noip2 d e f a u l t s

Listing 10.121: Ejecucion del cliente no-ip durante el arranque

Desde el router abro los puertos que necesita la aplicacion para funcionar, el 80 y el8080.