Infotec Msejclg 09042021
Infotec Msejclg 09042021
Infotec Msejclg 09042021
EN TECNOLOGÍAS DE LA INFORMACIÓN Y
COMUNICACIÓN
“SMART INTERFON”
SOLUCION ESTRATÉGICA EMPRESARIAL
Que para obtener el grado de MAESTRO EN SISTEMAS EMBEBIDOS
Presenta:
Asesor:
También agradecer a todas las personas que nos han ayudado en esta situación de
delicada salud de mi madre, desde un mensaje de ayuda y buenos deseos pasando
por quien condujo desde otra ciudad para que un medicamento nos pudiera llegar
a tiempo, hasta quien organizo una rifa para ayudarnos con recursos para seguir
con los tratamientos. Una mención especial a los donadores de sangre quienes
tuvieron que pasar incomodidades tales como ayuno, despertar temprano y recibir
pinchazos en los brazos para hacer la donación.
Introducción ......................................................................................................... 1
Capítulo 1. Contexto ............................................................................................ 4
1.1 Aportación del proyecto .................................................................................. 6
1.2 Contexto tecnológico ................................................................................. 7
1.3 Especificación del problema ................................................................... 10
1.4 Especificación del problema tecnológico ............................................... 11
Capítulo 2. Análisis y Diseño ............................................................................ 15
2.1 Método....................................................................................................... 15
2.2 Análisis y diseño de la primera iteración (iteración 1) ........................... 18
2.3 Análisis de riesgos ................................................................................... 20
2.4 Análisis de casos de uso ......................................................................... 21
Capítulo 3. Desarrollo y validación ................................................................... 36
3.1 Display....................................................................................................... 36
3.2 Notificaciones ........................................................................................... 37
3.3 Comunicación ........................................................................................... 42
3.4 Captura de imagen en el dispositivo ....................................................... 44
3.5 Envió de imagen desde el dispositivo hacia el cliente android ............ 45
3.6 Validación ................................................................................................. 46
Capítulo 4. Impacto ............................................................................................ 51
4.1 Impacto social……………………………………………….…………………..51
4.2 Impacto economico……………………………………………..…….………..51
Capítulo 5. Trabajo Futuro................................................................................. 55
Conclusiones ..................................................................................................... 59
Bibliografia. ........................................................................................................ 61
Anexos ................................................................................................................ 64
Índice de figuras
Este proyecto busca ser el primer paso para el inicio de una unidad de consolidación
de información lógica denominada smart neiborhood. Debido a la naturaleza del
proyecto se pretende administrar todo lo relativo a un fraccionamiento privado. Para
esto se plantea iniciar con el control de acceso a un coto privado mediante una
plataforma cuyos principales componentes son un sistema embebido (SE)
implementado sobre la plataforma raspberryPi además un cliente dentro de un
dispositivo móvil implementado en android. En esta primera etapa toda la
funcionalidad estará dentro del SE, es decir enviar y recibir voz, gestión de usuarios,
notificaciones a todos los clientes, envió de la imagen de la persona que está
llamando a la puerta etc. El desarrollo de toda la funcionalidad se plantea en la
sección de desarrollo dentro de este documento, dicha funcionalidad en posteriores
iteraciones de desarrollo se va a mudar a servicios cloud. Además, esta
funcionalidad se planea que se amplié para tareas más robustas tales como
recopilación de información como huellas dactilares, uso de reconocimiento facial,
etc. Esta ampliación de funcionalidad se muestra en la sección de trabajo futuro
dentro de este documento.
En la posterior sección de introducción dentro de este documento tenemos un
amplio compendio de todas las diferentes unidades lógicas y conceptos que
plantean diferentes autores para el uso de tecnologías IoT (Dodson, Sean, 2003),
3g, 4g, cloud services (Mell & Grance, 2011), tales como smart city, smart
environments, etc. Se tomarán algunos de estos conceptos para este proyecto.
En el mercado existen algunos dispositivos para casa habitación los cuales
buscan crear un ecosistema con la tendencia smart home (Bing et al 2011) estos
dispositivos planean la misma mejora que nosotros plantearemos en el desarrollo
de esta solución con el enfoque de enviar la documentación inalámbricamente a
una App instalada en un smart phone.
En la actualidad se tiene una amplia gama de líneas de desarrollo relacionado
con smart environments, la idea de estos ambientes es recolectar información de
un ambiente común para analizarla con el fin de mejorar las condiciones generales
1
tales como monitoreo de salud o asistencia a los individuos (Geetika et al., 2010).
En esta propuesta se busca hacer de un fraccionamiento privado un espacio que
cumpla con este tipo de requerimientos.
En cuanto a SE se refiere existen algunas variedades de un interfon para
acceso y comunicación a la entrada a los condominios y/o edificios, el costo de estos
dispositivos de comunicación es elevado debido al hardware y cableado por la
extensa área que se debe de cubrir a través de la vivienda.
2
Capítulo 1
Contexto
Capítulo 1. Contexto
1
Encuesta Nacional de Victimización y Percepción sobre Seguridad Pública (ENVIPE) 2018,
INEGI, Consultado 10 Nov 2019, https://www.inegi.org.mx/programas/envipe/2018/
2
Seguridad con videovigilancia, UNAM, Consultado 10 Nov 2019,
http://ciencia.unam.mx/contenido/infografia/51/seguridad-con-videovigilancia-
3
Jesús Ángel Enríquez Acosta, Entre el miedo y la distinción. El estado actual del fraccionamiento
cerrado en las ciudades fronterizas de Tijuana, Nogales y Ciudad Juárez, Scileo, Consultado 15
Nov 2019, http://www.scielo.org.mx/scielo.php?script=sci_arttext&pid=S0187-69612007000100001
4
Informe del Mercado Inmobiliario 2018, LAMUDI, 2018, Consultado 10 Nov 2019
https://www.lamudi.com.mx/Informe-del-Mercado-Inmobiliario-2018/
5
Ante la inseguridad los potosinos prefieren vivir en condominios, EL UNIVERSAL, Consultado 10
Ene 2018, https://sanluis.eluniversal.com.mx/metropoli/29-10-2018/ante-inseguridad-potosinos-
prefieren-vivir-en-privadas-o-condominios
6
¿Cuántos habitantes y hogares hay en México?, dineroenimagen, 2015, Consultado 10 Nov 2019,
https://www.dineroenimagen.com/2015-07-29/59247
7
Penetración de smartphones no se detiene, el eleconomista, Feb 2018, Consultado 10 Nov 2019,
https://www.eleconomista.com.mx/empresas/Penetracion-de-smartphones-no-se-detiene-
20180221-0022.html
4
Vivimos en una etapa donde existe la tecnología necesaria para poder
desarrollar un dispositivo con su respectiva plataforma para comunicación entre
condóminos y visitantes en la entrada de un fraccionamiento. Así que por ello resulta
viable la propuesta que en este trabajo se presenta.
En el Cuadro 1 se muestran algunas de las opciones de hardware que existen
además de sus principales características. Al momento de hacer esta comparativa
solo había una opción para red LAN.
Durante este documento se explicará la visión que se tiene de esta solución
buscando convertirse en una plataforma mucho más completa que solo controlar el
acceso a un fraccionamiento privado y la interacción de los condóminos con los
visitantes de un fraccionamiento.
https://www.abasteo.mx
/Dahua-Videoportero-
Videoportero VTK-VTO6210B-VTH1560B, VTK-VTO6210B-VTH1560B-
Altavoz/Micrófono, Interior/Exterior, Dahua $5,729 Altavoz-Microfono- Ethernet No Si Si 1280 x 720 1MP
Negro Interior-Exterior-
Negro.html?nosto=shop_
api_detail2_1
https://articulo.mercadol
ibre.com.mx/MLM-
550002742-frente-de-
calle-conexion-ip-wifi-a-
Videoportero exteror IP para edificios JR $6,160 smart-o-tablet-abre- Wifi Si No Si 1281 x 720 1MP
chapa-
_JM?matt_tool=18293428
&matt_word&gclid=CjwK
CAjwlZf3BRABEiwA8Q0q
https://articulo.mercadol
ibre.com.mx/MLM-
626344831-portero-gsm-
para-conjuntos-edificio-
Portero exteror IP para edificios solo de-200-propietarios-y- Si (llamada
JR $9,500 GSM No Si NA NA
audio 1000-usuarios-control-de- GSM)
acceso-para-tarjetas-rfid-
o-llaveros-
_JM?quantity=1&variatio
n=32248746432
5
1.1 Aportación del proyecto
Este proyecto de titulación de maestría está enfocado en solución estratégica no es
tanto una investigación académica por lo tanto las aportaciones están más
encaminadas a los resultados del prototipo. En general las aportaciones más
relevantes son las relativas con la comunicación de los diferentes componentes de
la plataforma. A continuación, se enumeran lo más relevante que se obtuvo:
La plataforma comercial raspberryPi demostró tener la suficiente potencia de
hardware para soportar los múltiples procesos necesarios para la plataforma tales
como librerías de audio, software de captura, base de datos embebida,
comunicación bidireccional.
El SO Raspbian propio de la plataforma raspberryPi mostro compatibilidad
con todo lo que decidimos instalar.
La librería mosquitto funciono para el envío de mensajes tipo MQTT entre
componentes desarrollados entre diferentes tecnologías tales como android y Linux
(Raspbian).
La interacción de componentes desarrollados en python y adroid funciono
correctamente para el envió y recepción del stream de audio respectivamente.
Implementación dentro del cliente android de la librería mqtt para recibir
notificaciones desde la raspberryPi.
El uso de la librería gst para la detección y configuración de los periféricos de
audio dentro de la raspberryPi tales como micrófono y bocinas fue satisfactoria.
El uso de la librería VLC para utilizar la raspberryPi como servidor de voz
RTP.
La implementación de la librería openCV para detección facial, este
componente se desarrolló en python para centrar la imagen en el rostro de la
persona que está utilizando el SE.
Implementación de las librerias RPi y smbus para el manejo de pantalla LCD
16x2.
Uso del convertidor I2C para optimizar el manejo del display LCD.
6
Todos los detalles de los puntos anteriores están en las secciones de
desarrollo y validación además de en conclusiones dentro de este documento.
7
Figura 1. Diferentes dimensiones de una smart city
FUENTE: Dameri et al. 2014
En la Figura 1 se muestran los conceptos que una smart city busca promover
tales como:
Smart Economy.
Relativo a la mejora en la competitividad con innovación. Este modelo se
basa en conceptos para impulsar el desarrollo, la sostenibilidad y el atractivo para
nuevas inversiones, los principales son: e-business, e-commerce, incremento de la
productividad, empleo e innovación en TI y generación de servicios y nuevos
productos, nuevos modelos y oportunidades de negocio y emprendimiento. Donde
los puntos más importantes a tratar son los siguientes 8.
Apertura a la transformación
Innovación continúa
Internacionalización
Productividad
8
Economía Smart, Universidad de Alicante, 2017, Consultado 10 Nov 2019,
https://web.ua.es/es/smart/smart-economy-economia-inteligente.html
8
Smart People
Se refiere al desarrollo de capital humano y social por medio de participación
comunitaria, utilizando como herramienta principal la tecnología, es decir teléfonos
inteligentes, tabletas, internet, etc. Enfocado principalmente en las relaciones entre
los ciudadanos y las ciudades comienzan a ir más allá de realizar consultas y
trámites con la administración, consulta del estado del tráfico, del estado de la
meteorología o de la consulta de callejeros 9. Sin duda la tecnología proporciona la
apertura de nuevos conceptos, como las smart city y smart university, se enfoca en:
Participación en la vida publica
Flexibilidad
Creatividad
Smart Goverment
Busca la participación activa a través de medios digitales entre gobierno y
ciudadanos con el fin de facilitar tramites, mejorar servicios para mejorar la calidad
de vida10. Cuyos principales objetivos son:
Participación en la toma de decisiones.
Mejora de servicios públicos y sociales.
Transparencia.
Smart Mobility
Enfocado principalmente al transporte de los ciudadanos. Los objetivos
principales que deben plantearse para una movilidad inteligente se corresponden a
la promoción de una movilidad sostenible, la cual garantice que la accesibilidad, los
sistemas de transporte, los problemas ambientales y la gestión del aparcamiento
respondan a las necesidades económicas, sociales y medioambientales de la
ciudad11. Sus aspectos principales son:
Accesibilidad.
Disponibilidad.
9
Smart People: comunidad Senspeople, Universidad de Alicante, 2017, Consultado 10 Nov 2019,
https://web.ua.es/es/smart/smart-people-comunidad-senspeople.html
10
Smart Government: Gobernanza del Futuro, Marcombo, 2017, Consultado 10 Nov 2019,
http://www.librosmartcity.com/
11
Smart Mobility, Planes Integrales de Movilidad, 2012, Consultado 10 Nov 2019,
https://issuu.com/panoptica/docs/planes-integrales-de-movilidad-line
9
Reducir el impacto ambiental.
Innovación y seguridad en el sistema de transporte.
Sustentabilidad.
Smart Environment
Se enfoca en mejorar cualquier ambiente por medio de tecnología mediante
el uso de sensores para obtener información y tomar decisiones operativas. Se
busca la capacidad de optimizar los recursos naturales, preservar y proteger el
medio ambiente, reducir los gases y residuos de manera sostenible, y de controlar
y racionalizar el consumo de energía12. Busca principalmente:
Optimización de recursos.
Sustentabilidad del manejo de recursos.
Smart Living
Mejora en la calidad de vida mejorando los procesos del día a día mediante
el uso de tecnología. Hace referencia a los nuevos estilos de vida mediante las TI,
el comportamiento y el consumo. Los servicios inteligentes smart living actúan en
los ámbitos de: salud, seguridad ciudadana, cultura, domótica en viviendas,
proporcionando servicios inteligentes como e-salud, e-accesibilidad y e-turismo,
todo ello con el objetivo de incrementar los niveles cohesión social, el capital y la
seguridad en las urbes13. Sus principales aspectos son:
Calidad en la vivienda
Atractivos turísticos
Seguridad
12
Smart Environment: Un entorno de calidad de vida, Universidad de Alicante, 2019, Consultado 10
Dic 2019, https://web.ua.es/es/smart/smart-environment-un-entorno-de-calidad-de-vida.html
13
Smart Living: Microentorno de calidad en Smart Cities, Marcombo, 2016, Consultado 10 Dic
2019, http://www.librosmartcity.com/
10
personas durante 24 horas al día. Incluso esta opción implica cuestiones de
seguridad tales como el tener que facilitar una identificación a la persona de la
entrada.
Para el caso de que no se tenga personal de vigilancia muchas veces los
fraccionamientos privados optan por que los mismos habitantes manejen el acceso.
Esto implica descontrol en el fraccionamiento debido a que no queda ningún registro
de las personas que ingresan. Además, para este caso también conlleva cuestiones
de seguridad, debido que para poder darle acceso a personas que presten servicios
o lleven mercancías se necesita que faciliten su teléfono celular.
11
clientes que estén dentro del rango físico de esta red (Nader F. Mir, 2006). Para la
opción de cloud services el rango se amplía, para comunicarse solo se necesita que
el interfon y el cliente tengan servicio de internet. Cabe destacar que la mayoría de
las soluciones comercialmente hablando en el mercado trabajan sobre red LAN
(tabla 1). Otra limitante en el mercado es la implantación de la red LAN cableada,
esto eleva mucho el costo de la implementación, por esta razón hay pocos cotos
privados que cuentan con esta implementación.
1.5 Objetivos
A continuación, se plantean los objetivos del proyecto tanto generales como
particulares.
En primer lugar, se busca el desarrollo de un dispositivo para favorecer la
comunicación por medio de voz, entre una persona que se encuentre en la entrada
de un fraccionamiento privado con una persona dentro de su vivienda, esto se
plantea a través una aplicación (cliente) instalada en el smartphone, además dicha
aplicación recibirá una imagen de la persona con la cual se está comunicando en la
puerta.
Tal y como se menciona en la introducción este proyecto está diseñado en
ser solo la primera etapa de construcción para una plataforma completa dentro de
fraccionamientos privados para la posterior integración de más servicios digitales
implementados mediante la ayuda de cloud services tales como activación de
puertas, guardar historial de visitas, guardar datos de las personas que visitaron el
fraccionamiento, pudiéndose denominar esto como smart neighborhood. Esto a su
vez está planeado para ser una pieza de un sistema más grande del cual ya se
mencionó en la introducción tal como smart city.
Además, otro enfoque de este proyecto es con muy pocos cambios se
posibilita a dar el servicio para una casa habitación, adaptando la funcionalidad de
tocar el timbre y añadiendo el valor agregado que las tecnologías smart puede
agregar.
12
1.5.1 Objetivos específicos
• Implementación de un sistema embebido (SE) como servidor de
comunicaciones utilizando como plataforma una raspberryPi.
• Implementación de todo el software y configuraciones de la
raspberryPi.
• Desarrollo de un prototipo cliente android para la comunicación con
el SE
13
Capítulo 2
Análisis y Diseño
Capítulo 2. Análisis y Diseño
2.1 Método
La metodología utilizada en este proyecto es el modelo en espiral de Bohem
(Sommerville, 2011), debido a su flexibilidad y que está basada en la construcción
de prototipos e iteraciones, esto da la ventaja que al final de cada iteración se tiene
un entregable que se adapta al desarrollo de la propuesta. La iteración tal como se
define en el texto consultado (Sommerville, 2011), se define como la ocurrencia de
cada una de las actividades necesarias para tener un entregable específico dentro
de un tiempo determinado terminado.
En la Figura 2 se muestra la imagen de los pasos seguidos para el uso
adecuado de esta metodología.
15
Figura 2 Esquema de metodología.
FUENTE: Sommerville, 2011 p48
En dicha referencia el autor plantea cuatro secciones para cada iteración las
cuales son:
1. Establecimiento de objetivos: Se definen objetivos específicos para
dicha fase del proyecto. Se identifican restricciones en el proceso y el producto, y
se traza un plan de gestión detallado. Se identifican los riesgos del proyecto. Pueden
planearse estrategias alternativas, según sean los riesgos.
2. Valoración y reducción del riesgo: En cada uno de los riesgos
identificados del proyecto, se realiza un análisis minucioso. Se dan acciones para
reducir el riesgo. Por ejemplo, si existe un riesgo de que los requerimientos sean
inadecuados, puede desarrollarse un sistema prototipo.
3. Desarrollo y validación: Después de una evaluación del riesgo, se elige
un modelo de desarrollo para el sistema. Por ejemplo, la creación de prototipos
desechables sería el mejor enfoque de desarrollo, si predominan los riesgos en la
interfaz del usuario. Si la principal consideración son los riesgos de seguridad, el
desarrollo con base en transformaciones formales sería el proceso más adecuado,
16
entre otros. Si el principal riesgo identificado es la integración de subsistemas, el
modelo en cascada sería el mejor modelo de desarrollo a utilizar.
4. Planeación: El proyecto se revisa y se toma una decisión sobre si hay que
continuar con otro ciclo de la espiral. Si se opta por continuar, se trazan los planes
para la siguiente fase del proyecto.
Como se menciona en la sección anterior (punto número tres) para prototipos
es recomendable usar un enfoque de desarrollo el cual es nuestro deseo en esta
primera iteración. En las siguientes iteraciones (ver sección de trabajo futuro) se va
a tener integración de otros sistemas por lo cual se infiere que el mejor modelo sería
el de cascada. Por lo tanto, en este trabajo se pretende establecer una sólida base
en la cual el trabajo futuro pueda funcionar favorablemente.
Cada una de las secciones anteriores enlista a grandes rasgos lo que se tiene
que considerar para terminar satisfactoriamente una iteración. A nivel más practico
el autor plantea el siguiente diagrama para la creación de un prototipo basado en
los pasos anteriores.
17
posteriormente definiendo la funcionalidad mediante requerimientos y al final las
etapas de desarrollo y resultados. Se muestran los detalles de iteraciones futuras.
Iteración 1
Creación de un prototipo funcional (Dispositivo y cliente android) para casa
habitación que mediante red de área local (LAN) se comunique con las personas
que están dentro de ella, en esta iteración de los entregables más destacados son:
el cliente android, la comunicación mediante protocolo de transporte de voz RTP.
Iteración 2
Implementación de una plataforma para fraccionamiento privado utilizando
una red LAN teniendo en cuenta el escenario de que en el fraccionamiento estuviera
implementada esta topografía de red, el problema a resolver más destacado de esta
iteración es seccionar a los usuarios para identificar a quienes se les tiene que
enviar notificación debido a que viven en una misma casa
Iteración 3
Adaptación de la plataforma a servicios cloud, en esta iteración se van a
trasladar varios de nuestros servicios a una plataforma en la nube esto dará como
resultado una mejora directamente en cobertura del servicio debido a que no será
necesario que todos los dispositivos estén conectados en la misma en red LAN para
tener acceso a la plataforma. Creación de la App cliente en IOs.
18
2.2.1 Establecimiento de objetivos específicos
A continuación, se enlistan los objetivos específicos para esta iteración, cada
objetivo corresponde a un entregable y todos en su conjunto forman la plataforma
funcional.
• Utilizar una rasberryPi para la construcción del interfon (sistema
embebido).
• Instalar y evaluar el performance de un Linux embebido.
• Hacer todas las configuraciones pertinentes al sistema embebido
relacionadas con la instalación de librerías, paqueterías y
configuraciones.
• Crear un software en Android (cliente android) que sea capaz de
recibir notificaciones por parte del SE además de entablar
comunicación bidireccional.
• Diseñar e implementar la comunicación entre el SE y el cliente android.
• Pruebas de integración entre ambos componentes.
Requerimiento
ID Descripcion
RF01 El sistema mandara señal de alerta a todos los teléfonos inscritos según
corresponda.
RF02 El Interfon tendrá un buzzer simulando timbre.
RF03 El Interfon tendrá un led para verificar que este prendido.
RF04 El Interfon mandara stream de audio.
RF05 El Interfon recibira stream de audio.
RF06 El interfon capturara la imagen de la persona que está en la puerta.
RF07 El cliente Android mandara alerta cuando el inter fon está mandando
señal.
RF08 El cliente Android tendrá un icono en el escritorio.
19
RF09 El cliente Android alertara como si fuera una llamada entrante.
RF09 El cliente Android mandara un stream de audio
RF10 El cliente android desplegara la imagen de la persona.
RF11 El cliente android guardara un historial.
Cuadro 2. Listado de requerimientos funcionales.
FUENTE: Elaboración Propia.
20
Identificados los anteriores riesgos con la creación del prototipo y el uso del mismo
bajo diferentes condiciones.
21
Con respecto a los casos de uso podemos ver que el happy path tiene dos
diferentes acciones:
1.- Notificar a los clientes android: Posteriormente en el documento vamos a
mostrar con detalle este proceso utilizando MQTT.
2.-Comunicación: explicaremos con detalle cómo se entabla la comunicación
utilizando el protocolo RTP.
Además de esto tenemos los dos escenarios de error más común que se van
a manejar los cuales son:
• Vecino no disponible.
• Error en la comunicación.
22
relacionados con este caso. A continuación, enlistamos cada servicio lógico
propuesto y damos una breve explicación de cada uno de ellos.
MQTTServicio(): este servicio es el encargado de mandar las notificaciones a cada
uno de los clientes además de recibir las respectivas respuestas, más adelante en
el documento damos detalle de su implementación.
EnvioImagenServicio(): este servicio su tarea principal es capturar una imagen
desde el SE y enviarla al cliente android, más adelante en este documento vamos
a mostrar los detalles de la tecnología utilizada en ello.
VozServicio(): este servicio como se muestra en el diagrama será el encargado de
enviar un stream de voz desde el SE hacia el cliente android además de recibir un
stream desde el cliente y mandarlo a bocinas.
Además del diagrama de secuencia general se hace el diagrama de
secuencia entre componentes en las próximas secciones mostramos con detalle
cada uno de estos:
23
A continuación, se muestran los detalles de cada uno de los servicios listados
en el diagrama:
usuarioValido(): manda el request al servicio de validación con unas credenciales
(user/pass) y recibe una respuesta de true/false dependiendo si son válidas.
timbrar(): manda llamar al servicio de notificaciones para mandar un mensaje de
notificación al cliente las respuestas posibles son (éxito,error)
iniciarVoz(): inicia el proceso de comunicación en caso de que el servicio no esté
disponible mandara el código de error pertinente.
enviarComunicacion(): se inicia el stream de comunicación en dos vías.
24
altaUsuario(): una vez autenticados podremos dar de alta otros usuarios.
enviarVoz(): desde esta método se inicia el stream de comunicación.
iniciarComunicacion(): se refiere a la comunicación bidireccional es decir enviar y
recibir desde el cliente android.
Resultado esperado
Se debe entablar comunicación entre el SE y el cliente sin ningún
problema
Resultado esperado
el SE manda mensaje de error en la pantalla
25
•La red LAN funciona correctamente.
•el SE tiene conectividad.
•ningún cliente android perteneciente a ese tópico tiene conexión
Resultado esperado
el SE manda mensaje de error en la pantalla
26
Cuadro 4. Listado de casos de uso.
FUENTE: Elaboración Propia.
La solución propuesta al momento es mediante una red LAN esto implica que
todos los dispositivos tanto android como el SE estarán conectados a la misma red,
por lo tanto, deben tener visible el IP entre sí. Este escenario, aunque actualmente
no es muy común es posible que se empiece a presentar al momento que las
compañías telefónicas lleven el servicio de internet por fraccionamiento.
27
2.6.1 Arquitectura hardware dispositivo
A Continuación, se muestra el diagrama esquemático de componentes utilizados
para la generación del prototipo.
28
Componente Caracteristicas
Raspberry Pi Model B+
Logitech C170
• USB 2.0
• Microfono integrado
• Resolucion 1024x286
• Fotografia 5MP
Teclado matricial
• 4x4
• 5V
Display LCD
Bocina
29
ingresar el número de casa o código al cual el usuario se quiere
comunicar
• Display: Su función será dar alguna retroalimentación de los estados
del dispositivo tales como: en servicio, llamando, etc.
• Bocina: Mandara el sonido enviado desde el cliente de android
además de dar un sonido de retroalimentación al cliente tal que
parezca una llamada telefónica.
30
2.6.3 Protocolo de comunicación RTP
Se decidió utilizar el protocolo RTP16 que es un protocolo más robusto y diseñado
específicamente para stream de audio y video. Este protocolo trabaja mucho mejor
que otras opciones más ligeras tales como: VAT, UDP o XTP17, debido a que está
pensado para ser una plataforma de comunicación en diferentes escenarios. En
posteriores iteraciones se planea uso de servicios cloud.
Dentro de algunos artículos que se consultaron a continuación se enlistan las
principales ventajas a favor RTP18(ver referencias al pie de página):
• A diferencia de mandar audio sobre el protocolo TCP (Tanenbaum &
Wetherall p. 482) directamente en RTP si hay perdida de paquetes no se
genera un retraso por la espera de los paquetes perdidos.
• TCP no soporta multicast. Si bien en esta iteración la comunicación será
punto a punto a visión a futuro el muticast va a ser necesario.
• XTP 19 no está diseñado para streaming de datos su diseño es para otros
tipos de datos enfocados en propósito general.
• Es un estándar muy utilizado hay librerías para la mayoría de las plataformas
• El Protocolo VAP actualmente está en desuso, no existe soporte o
documentación para dicha tecnología.
Ventajas propias del protocolo RTP:
• Se puede utilizar un rango amplio de puertos además configurable en los
firewalls
• Se puede configurar la calidad del audio/video
• Uso de diferentes códec.
• Permite comunicación bidireccional.
• Diseñado para aplicaciones en tiempo real.
16 Muhammet ErdalKaynam Hedayat, Real-time transport protocol stream detection system and
method, 2012, Consultado 10 Nov 2019, https://patents.google.com/patent/US8306063B2/en
17 Some Frequently Asked Questions about RTP, Columbia, Consultado 10 Nov 2019,
http://www.cs.columbia.edu/~hgs/rtp/faq.html#real-time
18 RtpStream. Google, 2018, Consultado 10 Nov 2019,
https://developer.android.com/reference/android/net/rtp/RtpStream
19 Transport layer protocols and architectures for satellite networks, SatNext, Consultado 10 Nov
2019, http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.73.7647&rep=rep1&type=pdf
31
2.7 Diseño software cliente android
A continuación, se muestra el diagrama de clases para la comunicación entre el
cliente y el SE
Para esta fase del desarrollo se implementaron las siguientes clases dentro
del cliente android.
Enroll()
Clase para dar de alta nuevos usuarios
RTPSender()
Clase para enviar el stream de voz hacia el dispositivo.
RTPReceiver()
Clase para recibir el stream de voz
ImageReceiver()
Clase para recibir la imagen desde el dispositivo
Autenticacion()
Clase que va a manejar el acceso al dispositivo
32
Login
33
En la Figura 13 se muestra cuando alguien está llamando a la puerta aquí se
atiende el llamado o se rechaza
Llamada en curso
Cuando existe una llamada en curso se despliega una pantalla tal como la
Figura 14 semejante a cualquier pantalla normal de llamada aquí se puede hacer
mute o colgar.
34
Capítulo 3
Desarrollo y validación
Capítulo 3. Desarrollo y validación
3.1 Display
Para saber el status del dispositivo se tiene un display lcd 16x2 utilizando un
adaptador para el uso del protocolo de comunicación I2C20 donde se deben tener
los siguientes status:
-Llamando <número de casa>
-Llamada en proceso
20
I2Cbus, Consultado 15 Oct 2019, https://www.i2c-bus.org/
36
Figura 16. Conectividad pantalla LED con el convertidor I2C y los pines de
raspberryPi
Se decidió utilizar un adaptador para usar I2C para utilizar un mínimo número
de conexiones, como se muestra en la figura 15 solo se necesitan 4 conexiones. De
otra manera estos displays necesitan más de 17 conectores.
El manejo del display se hizo con python se utilizaron las librerías:
• RPi.GPI
• smbus
Además de librerías de código abierto para ver este código completo
consultar en el Anexo II.
3.2 Notificaciones
Se explica a detalle todo el proceso para lanzar notificaciones. El proceso utiliza el
patrón de diseño Publisher/subscriber para esto ya existen librerías y herramientas
en Raspbian. Además, se explica cómo se gestionan las notificaciones usando una
BDD embebida y los diagramas de arquitectura en general de todo el proceso.
21
MQTT, Consultado 15 Oct 2019, http://mqtt.org/
22
Mosquitto MQTT Broker, Consultado 15 Oct 2019, https://mosquitto.org/
38
A continuación, vamos a mostrar los pasos para la configuración del servidor
MQTT dentro de la raspberryPi.
Instalación de las librerías:
Subscribir a un tópico:
39
Figura 20. Cliente android recibiendo mensaje MQTT.
23
SQLLite, Consultado 10 Nov 2019, https://sqlite.org/index.html
24
DB-API 2.0 interface for SQLite databases, Consultado 15 Nov 2019,
https://docs.python.org/2/library/sqlite3.html
40
Figura 21. Estructura de la tabla para gestión de clientes SE.
41
FUENTE: Elaboración Propia.
3.3 Comunicación
En esta sección explica con detalle el proceso de comunicación desde el punto de
vista técnico, así como sus diferentes componentes. También se muestran los
diagramas de arquitectura para ejemplificar con más claridad las interacciones de
los diferentes componentes.
42
Comenzando del lado del SE se está utilizando la librería VLC25 para incorporar en
servidor de voz RTP como se muestra a continuación:
vlc -vvv rtp://@192.168.1.72:22222
Donde:
192.168.1.72 - Ip local del raspberryPi (SE)
22222: puerto a consultar
vvv: parámetro de entrada de la librería
Del lado del cliente existen librerías de android compatibles con RTP las cuales
fueron implementadas en la siguiente sección se explica con mas detalle.
25
libVLC, Consultado 10 Nov 2019, https://wiki.videolan.org/LibVLC
43
audio.setMode(AudioManager.MODE_IN_COMMUNICATION);
AudioGroup audioGroup = new AudioGroup();
audioGroup.setMode(AudioGroup.MODE_NORMAL);
AudioStream audioStream = new
AudioStream(InetAddress.getByAddress(getLocalIPAddress ()));
audioStream.setCodec(AudioCodec.PCMU);
audioStream.setMode(RtpStream.MODE_NORMAL);
audioStream.associate(InetAddress.getByAddress(new byte[]{(byte) 192,
(byte) 168, (byte) 1, (byte) 72}), 22222);
audioStream.join(audioGroup);
26
Gstreamer, Consultado 10 Nov 2019,
https://gstreamer.freedesktop.org/documentation/installing/on-linux.html?gi-language=c
44
facial, así como una extensa documentación en diferentes textos (M. A. O. Vasilescu
& Terzopoulos, 2002). En la siguiente figura vemos el despliegue de la imagen. Para
consultar el código activación cámara ver Anexo I
27
Managefiletransfer, Consultado 15 Oct 2019,
https://managefiletransfer.wordpress.com/2011/08/02/mft-b2bconsulting/
45
Figura 25. Diagrama de comunicación entre componentes protocolo FTP.
3.6 Validación
En esta sección se muestran los resultaos relacionados al seguimiento de lo que se
planteó en el capítulo 2 referente a análisis de riesgos y los resultados que se
obtuvieron tal como especifica la metodología.
☑
El sistema mandara señal de alerta a todos los teléfonos inscritos
RF01
según corresponda.
47
RF02 El Interfon tendrá un buzzer simulando timbre. ☑
RF03 El Interfon tendrá un led para verificar que esta prendido. ☑
RF04 El Interfon mandara stream de audio. ☑
RF05 El Interfon recibirá stream de audio. ☑
El interfon capturara la imagen de la persona que está en la
RF06
puerta. ☑
☑
El cliente Android mandara alerta cuando el inter fon está
RF07
mandando señal.
RF08 El cliente Android tendrá un icono en el escritorio. Siguiente etapa
RF09 El cliente Android alertara como si fuera una llamada entrante. Siguiente etapa
RF09 El cliente Android mandara un stream de audio ☑
RF10 El cliente android desplegara la imagen de la persona. ☑
RF11 El cliente android guardara un historial. Siguiente etapa
48
NF09 las condiciones de error se van a manejar conforme al testing plan ☑
Cuadro 7 Validación de requerimientos no funcionales.
28
Demo1, creado 20 Sep 2019
https://drive.google.com/file/d/13CEyScmJhAg0ZlCeUVBAOFgIW2ZtN9Q3/view?usp=sharing
29
Demo2, creado 20 Sep 2019, https://drive.google.com/file/d/13Afad5Vc-
R1NGGRbXiaRHq_5UnljfmqH/view?usp=sharing
49
Capítulo 4
Impacto
Capítulo 4. Impacto
51
Numero de vigilantes Salario minimo mensual
$3121
$6242
$9363
$3000
52
Cuadro 10. comparativa de costos.
FUENTE: Elaboración Propia.
Como podemos ver en el Cuadro 5 desde el primer caso donde solo se tiene
un vigilante el ahorro es de más de 60% para el caso donde se tengan tres vigilantes
se proyecta un ahorro del más de 85%.
53
Capítulo 5
Trabajo futuro
Capítulo 5. Trabajo Futuro
30
What are microservices?, Consultado 10 Nov 2019, https://microservices.io/
55
En esta próxima implementación cada servicio va habitar en su propio
contenedor Docker31 que a su vez estará orquestado por Kubernetes 32 el cual es un
software propio para administración de microservicios (Balalaie et al 2016).
Cada contenedor por sí mismo es independiente de los demás así además
debe tener sus propios componentes tales como BDD, servidor de aplicaciones, etc.
31
Docker, Consultado 10 Nov 2019, https://www.docker.com/
32
Kubernetes, Consultado 10 Nov 2019, https://kubernetes.io/es/
56
lector de huella digital para que la persona acceda al fraccionamiento deje registro
de sus datos dactilares. Por otra parte, se podría utilizar como un banco de consulta
de imágenes para búsqueda de sospechosos de algún delito en la zona mediante
una interfaz web o móvil para las autoridades policiacas.
Esto está alineado con la tendencia de smart living que se mencionó en la
introducción, debido a que esta tecnología busca mejorar la calidad de la vivienda
además de incrementar la seguridad de la misma, por otra parte, también se busca
mejorar en general la función de un coto privado lo cual se ajusta a un smart
environment como plantean los autores (Herring & Kaplan, 2003).
Por último, se muestra en la figura 29 un bosquejo de la visión final a donde
planteamos llegar la cual sería una smart city que reciba y gestione información de
diferentes smart neighborhood, esta información puede ser aplicada por ejemplo a
recolección de basura, buscar criminales o personas extraviadas, etc.
Figura 29. Smart city acumulando información por parte de diferentes smart
neighborhood.
57
Conclusiones
Conclusiones
59
en lo que se está haciendo actualmente con respecto a las tendencias smart
environment, smart city, planteadas en la sección de introducción.
60
Bibliografía
61
Nader F. Mir (2006) Computer and Communication Networks, Prentice Hall.
Podnar Zarko Ivanna, Broering Arne, Serrano Martha. (2016). Interoperability and
open source solutions for internet of the things pag 12.
Peterson Larry L. and Davie Bruce. (2003). Computer Networks A Systems
Approach.
Sommerville, I. (2011). Software Engineering. 1st ed.
Su K., Li J and Fu. H. (2011). Smart city and the applications. International
Conference on Electronics, Communications and Control.
Tanenbaum, A. S., and Wetherall, D. (2002). Computer networks(pp. I-XVII). 4th
Ed. Prentice hall.
M. A. O. Vasilescu and D. Terzopoulos. (2002). Multilinear image analysis for facial
recognition.
Wang M., Zhang G., Zhang C., Zhang J. and Li C. (2013). An IoT-based appliance
control system for smart homes. Fourth International Conference on
Intelligent Control and Information Processing (ICICIP), Beijing. pp. 744-747.
62
Anexos
63
Anexos
Anexo I: Código activacion cámara.
import pygame
import pygame.camera
from pygame.locals import *
DEVICE = '/dev/video0'
SIZE = (640, 480)
FILENAME = '/home/pi/FTP/files/image4.jpg'
def camstream():
pygame.init()
pygame.camera.init()
display = pygame.display.set_mode(SIZE, 0)
camera = pygame.camera.Camera(DEVICE, SIZE)
camera.start()
screen = pygame.surface.Surface(SIZE, 0, display)
capture = True
while capture:
screen = camera.get_image(screen)
display.blit(screen, (0,0))
pygame.display.flip()
for event in pygame.event.get():
if event.type == QUIT:
capture = False
elif event.type == KEYDOWN and event.key == K_s:
pygame.image.save(screen, FILENAME)
camera.stop()
pygame.quit()
return
if __name__ == '__main__':
camstream()
if __name__ == '__main__':
# Initialize
kp = keypad(columnCount = 3)
64
try:
while True:
# Remember that your sentences can only be 16 characters long!
print("Writing to display")
display.lcd_display_string("Teclee numero d", 1) # Write line of text to first line
of display
display.lcd_display_string("casa seguido *", 2) # Write line of text to second line
of display
##time.sleep(2) # Give time for the message to
be read
##display.lcd_display_string("Teclee numero d", 1) # Refresh the first line of
display with a different message
time.sleep(2) # Give time for the message to be
read
##display.lcd_clear() # Clear the display of any data
##time.sleep(0.5) # Give time for the message
to be read
###### 4 Digit wait ######
seq = []
for i in range(4):
digit = None
while digit == None:
digit = kp.getKey()
seq.append(digit)
time.sleep(0.4)
# Check digit code
print(seq)
display.lcd_clear()
display.lcd_display_string(str(seq), 1)
time.sleep(1)
if seq == [2, 2, 0, '*']:
print("Code accepted")
display.lcd_display_string("Llamando...", 2)
client = mqtt.Client()
client.connect(broker_url,broker_port)
client.publish(topic="topichello", payload="RingFromPython", qos=0,
retain=False)
time.sleep(3)
display.lcd_clear()
else:
print("Code fail")
display.lcd_display_string("No existe tal numero", 2)
time.sleep(3)
display.lcd_clear()
except KeyboardInterrupt: # If there is a KeyboardInterrupt (when you press ctrl+c), exit the
program and cleanup
print("Cleaning up!")
display.lcd_clear()
65
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy= new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audio.setMode(AudioManager.MODE_IN_COMMUNICATION);
AudioGroup audioGroup = new AudioGroup();
audioGroup.setMode(AudioGroup.MODE_NORMAL);
AudioStream audioStream = new
AudioStream(InetAddress.getByAddress(getLocalIPAddress ()));
audioStream.setCodec(AudioCodec.PCMU);
audioStream.setMode(RtpStream.MODE_NORMAL);
audioStream.associate(InetAddress.getByAddress(new byte[] {(byte)192, (byte)168,
(byte)1, (byte)19 }), 22222);
audioStream.join(audioGroup);
} catch (Exception e) {
Log.e("----------------------", e.toString());
e.printStackTrace();
}
}
public static byte[] getLocalIPAddress () {
byte ip[]=null;
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
ip= inetAddress.getAddress();
}
}
}
} catch (SocketException ex) {
Log.i("SocketException ", ex.toString());
}
return ip;
}
}
Anexo IV: Código para recibir audio en cliente android desde el SE.
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.rtp.AudioCodec;
import android.net.rtp.AudioGroup;
import android.net.rtp.AudioStream;
import android.net.rtp.RtpStream;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.StrictMode;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.format.Formatter;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
66
public class MainActivity extends Activity {
AudioStream audioStream;
AudioGroup audioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("On Create", "Create......");
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);
AudioManager audio = (AudioManager)getSystemService(AUDIO_SERVICE);
audio.setMode(AudioManager.MODE_IN_COMMUNICATION);
Log.d("audio", "after audio......");
audioGroup = new AudioGroup();
audioGroup.setMode(AudioGroup.MODE_ECHO_SUPPRESSION);//MODE_ECHO_SUPPRESSION
InetAddress inetAddress;
try {
Log.d("try", "try......");
Log.d("get getLocalHost 000...", InetAddress.getLocalHost().toString());
// Log.d ("get getLocalPort 0...",String.valueOf(audioStream.getLocalPort()));
//inetAddress = InetAddress.getByName("192.168.1.67");
byte[] adressLoc = getLocalIPAddress ();
inetAddress = InetAddress.getByAddress(adressLoc);
Log.d("InetAddress", "InetAddress1......");
Log.d("adressLoc", adressLoc.toString());
audioStream = new AudioStream(inetAddress);
Log.d("InetAddress", "InetAddress2......");
audioStream.setCodec(AudioCodec.PCMU);
Log.d("InetAddress", "InetAddress3......");
audioStream.setMode(RtpStream.MODE_NORMAL);
Log.d("InetAddress", "InetAddress4......");
audioStream.associate(inetAddressRemote, audioStream.getLocalPort());//5001
Log.d("Port", "after Port......");
((TextView)findViewById(R.id.tv_port)).setText(" Port : " +
String.valueOf(audioStream.getLocalPort()));
Log.d("TxtView", "after TxtView......");
audioStream.join(audioGroup);
Log.d("audioStream", "after audioStream......");
}
catch ( UnknownHostException e ) {
e.printStackTrace();
}
catch ( SocketException e ) {
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
67
@Override
public void onStart() {
super.onStart();
Log.d("On Start", "Start..");
}
}
}
import org.eclipse.paho.android.service.MqttAndroidClient;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public MqttMessageService() {
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
pahoMqttClient = new PahoMqttClient();
mqttAndroidClient = pahoMqttClient.getMqttClient(getApplicationContext(),
Constants.MQTT_BROKER_URL, Constants.CLIENT_ID);
mqttAndroidClient.setCallback(new MqttCallbackExtended() {
@Override
public void connectComplete(boolean b, String s) {
68
@Override
public void connectionLost(Throwable throwable) {
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
setMessageNotification(s, new String(mqttMessage.getPayload()));
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
});
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
69