TRABAJO FIN DE GRADO GRADO EN INGENIER´IA DE TECNOLOG´IAS DE ´ TELECOMUNICACION
Plataforma dom´ otica basada en Raspberry Pi y el protocolo MQTT
Autor Alejandro Garc´ıa Soria Director Jorge Navarro Ortiz
´cnica Superior de Ingenier´ıas Informa ´ tica y de Escuela Te ´n Telecomunicacio — Granada, Septiembre de 2017
3
Plataforma dom´ otica basada en Raspberry Pi y el protocolo MQTT
Autor Alejandro Garc´ıa Soria Director Jorge Navarro Ortiz
˜ al, Telema ´ tica y Departamento de Teor´ıa de la Sen Comunicaciones — Granada, Septiembre de 2017
Plataforma dom´ otica basada en Raspberry Pi y el protocolo MQTT Alejandro Garc´ıa Soria Palabras clave: Raspberry Pi, protocolo MQTT, OpenHAB, ESP8266, dom´otica
Resumen En la actualidad, la sociedad est´a muy marcada por los avances tecnol´ogicos, ya sea la perfecci´ on de algunas tecnolog´ıas o el desarrollo de otras nuevas. Asimismo se persigue proporcionar un nivel de bienestar cada vez m´as sofisticado y globalizado. La investigaci´on actual sobre la tecnolog´ıa 5G y las redes de sensores busca concienciar sobre el medioambiente al ser humano. Adem´ as, ayuda a ahorrar en el d´ıa a d´ıa. La dom´ otica es una tecnolog´ıa que ayuda a monitorizar el consumo y la actividad de los diferentes elementos electr´onicos de un hogar. De este modo, las personas pueden controlar en tiempo real el gasto energ´etico. Adem´as, con el uso de redes de sensores se puede obtener mucha m´as informaci´on sobre nuestros h´ abitos de vida y poder aprovecharlos a nuestro favor. Este proyecto trata de acercar la dom´otica a cualquier persona, sin importar su nivel social, para ello, se busca la utilizaci´on de herramientas de bajo coste o gratuitas. OpenHAB es un ejemplo, una herramienta de software libre con una gran compatibilidad y escalabilidad. En este Trabajo Fin de Grado, se utiliza la plataforma Raspberry Pi, la cual tiene una funcionalidad muy amplia, es decir, puede ser empleada tanto para crear un centro de control dom´ otico de bajo coste como para crear un cl´ uster de Us y poder utilizarlo como procesador de datos a baja escala. Se tratar´ a la opci´ on de crear el centro de control de una casa inteligente tanto con una Raspberry Pi 3 como con la Raspberry Pi Zero W. La implementaci´ on del sistema, con una plataforma u otra, depender´a de los requisitos de potencia y procesamiento necesarios para controlar los diferentes elementos inteligentes.
4 Cabe destacar que ser´a empleado un protocolo ligero de comunicaci´on (tipo publicador/suscriptor) entre el servidor y las motas de sensores y actuadores, denominado MQTT (Message Queue Telemetry Transport). En este trabajo se pretende utilizar las funcionalidades, tanto de sensores y actuadores como de servicios externos, de manera autom´atica o tener la capacidad de control en tiempo real sobre los diferentes elementos, con una soluci´ on sencilla y disponible para cualquier persona.
Home automation platform based on Raspberry Pi and MQTT protocol Alejandro Garc´ıa Soria Keywords: Raspberry Pi, MQTT protocol, OpenHAB, ESP8266, home automation
Abstract Nowadays, our society is very influenced by technological advances, either the perfection of some technologies or the development of new ones. Additionally, it is intended to offer a more sophisticated and globalized level of well-being. The current 5G technology and sensor networks research try to provide conscious awareness to human being about the environment, and they also benefit day-to-day savings. Domotics is a technology that helps to monitor the consumption and activity of different electronic appliances in a house, so that people can have a real-time energy expenditure control. Besides, the use of sensors networks lets us get a lot of information about lifestyle, so that we can take full advantage of this knowledge. This project tries to bring the home automation to all people, regardless social classes or standard of living. Low-cost or free tools are used for this purpose, such as OpenHAB. This is a free software program with high compatibility and scalability. In this Bachelor’s Thesis, we use a Raspberry Pi platform, which has a broad functionality. In other words, it can be use to create a low-cost home automation system, or to deploy a computer cluster that can be used as a low-scale datacentre. In this study, we compare the option to create a smart home automation system with two platforms, Raspberry Pi 3 and Raspberry Pi Zero W. Each system is deployed in one platform or another depending on the power and processing requirements, which are necessary to control the different smart elements.
6 It should be noticed that a lightweight messaging protocol (publish/subscribe-based one) is used for small sensors and actuators, brokers, etc. This protocol is called MQTT (Message Queue Telemetry Transport). In this project, we intend to use the functionalities of both sensors/actuators and external services, in order to automatically control of elements and manage their status in real time, as a way to provide a simple and available solution to everyone.
Yo, Alejandro Garc´ıa Soria, alumno de la titulaci´on Grado en Ingenier´ıa de Tecnolog´ıas de la Telecomunicaci´on de la Escuela T´ ecnica Superior de Ingenier´ıas Inform´ atica y de Telecomunicaci´ on de la Universidad de Granada, con DNI 75930522R, autorizo la ubicaci´on de la siguiente copia de mi Trabajo Fin de Grado en la biblioteca del centro para que pueda ser consultada por las personas que lo deseen.
Fdo: Alejandro Garc´ıa Soria
Granada a 12 de Septiembre de 2017.
´ D. Jorge Navarro Ortiz, Profesor del Area de Ingenier´ıa Telem´atica del Departamento Teor´ıa de la Se˜ nal, Telem´atica y Comunicaciones de la Universidad de Granada. Informa: Que el presente trabajo, titulado Plataforma dom´ otica basada en Raspberry Pi y el protocolo MQTT, ha sido realizado bajo su supervisi´on por Alejandro Garc´ıa Soria, y autorizamos la defensa de dicho trabajo ante el tribunal que corresponda. Y para que conste, expiden y firman el presente informe en Granada a 12 de Septiembre de 2017.
El director:
Jorge Navarro Ortiz
Agradecimientos
En los a˜ nos que ha durado este proceso de aprendizaje y preparaci´on profesional, tengo que agradecer a cada una de las personas que ha estado a mi lado, mostrando su apoyo, confianza y ayuda para elegir el camino correcto hasta llegar a la cumbre, marcada con la realizaci´on de este Trabajo Fin de Grado. En especial, tengo que agradecer el constante apoyo incondicional de mi familia en las decisiones que he ido tomando en este largo camino. A mis padres, por sus consejos y ayuda, apostando siempre por mi futuro. A mis hermanos, por la confianza depositada en m´ı. A aquellos amigos que han estado a mi lado en este proceso, apoy´andome y escuchando mis preocupaciones tanto personales como docentes, por todos esos ratos que os he dado y me hab´eis apoyado. A todos aquellos compa˜ neros con los que he compartido este camino, tanto en los momentos de ‘relajaci´on’ como en el estr´es de la ´epoca de ex´amenes. A mi tutor, Jorge, por los consejos y ayuda en los momentos necesarios, y la preocupaci´ on por la consecuci´on, de la mejor manera posible, de este proyecto. A aquellos profesores con los que he compartido alg´ un tiempo durante estos 4 a˜ nos de preparaci´ on. Gracias a todos y cada uno de vosotros, por ayudarme a ser la persona soy a d´ıa de hoy.
GRACIAS
´Indice general 1. Introducci´ on 1.1. Motivaci´ on y Contexto. . . . . . 1.2. Objetivos. . . . . . . . . . . . . . 1.3. Estructura de la memoria. . . . . 1.4. Principales referencias utilizadas.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
2. Estado del arte
1 1 8 9 12 13
3. Especificaci´ on de requisitos 25 3.1. Requisitos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.2. Decisiones previas. . . . . . . . . . . . . . . . . . . . . . . . . 26 4. Planificaci´ on y estimaci´ on de 4.1. Fases de desarrollo . . . . . 4.2. Recursos . . . . . . . . . . . 4.2.1. Recursos humanos. . 4.2.2. Recursos hardware. . 4.2.3. Recursos software. . 4.3. Coste del proyecto . . . . .
costes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
5. Tecnolog´ıas y herramientas utilizadas. 5.1. Raspberry Pi. . . . . . . . . . . . . . . . . . . . 5.1.1. Raspberry Pi 3 y Raspberry Pi Zero W. 5.1.2. Funcionamiento b´ asico. . . . . . . . . . 5.1.3. Consumo energ´etico. . . . . . . . . . . . 5.2. Protocolo MQTT. . . . . . . . . . . . . . . . . 5.3. Mosquitto. . . . . . . . . . . . . . . . . . . . . . 5.4. OpenHAB. . . . . . . . . . . . . . . . . . . . . 5.5. ESP8266. . . . . . . . . . . . . . . . . . . . . . 5.5.1. NodeMCU. . . . . . . . . . . . . . . . . 5.5.2. Wemos D1. . . . . . . . . . . . . . . . . 5.5.3. ESPToy. . . . . . . . . . . . . . . . . . . 5.6. Arduino IDE. . . . . . . . . . . . . . . . . . . . 5.7. Homekit. . . . . . . . . . . . . . . . . . . . . . i
. . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . .
29 29 34 34 34 35 36
. . . . . . . . . . . . .
39 39 39 42 42 43 49 50 52 55 56 58 58 59
´INDICE GENERAL
ii
5.8. OpenVPN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9. ThingSpeak. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.10. Fritzing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. Instalaci´ on y Configuraci´ on. 6.1. Configuraci´ on Raspberry Pi . . . . . . . . 6.2. Instalaci´ on y configuraci´on de Mosquitto . 6.3. Instalaci´ on y configuraci´on de OpenHab2 6.3.1. Descarga e instalaci´on . . . . . . . 6.3.2. GUIs . . . . . . . . . . . . . . . . . 6.3.3. Configuraci´on inicial . . . . . . . . 6.3.4. Bindings . . . . . . . . . . . . . . . 6.3.5. Integraci´on de servicios de terceros 6.3.6. Configuraci´on de MQTT . . . . . . 6.3.7. Configuraci´on de autenticaci´on . . 6.4. Configuraci´ on Arduino IDE - NodeMCU . 6.5. Dise˜ no y programaci´on de la mota MQTT 6.6. Configuraci´ on adicional . . . . . . . . . . 7. Fase de pruebas
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
60 61 63
65 . 65 . 69 . 74 . 75 . 80 . 82 . 89 . 91 . 94 . 97 . 101 . 106 . 115 125
8. Conclusiones y L´ıneas Futuras. 135 8.1. Conclusiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 8.2. L´ıneas futuras. . . . . . . . . . . . . . . . . . . . . . . . . . . 138 8.3. Valoraci´ on personal. . . . . . . . . . . . . . . . . . . . . . . . 139 Bibliograf´ıa
147
A. Manual de
149
B. Ficheros de configuraci´ on openHAB. 161 B.1. prueba.items . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 B.2. prueba.sitemaps . . . . . . . . . . . . . . . . . . . . . . . . . . 163 C. Sketch Mota MQTT
165
´Indice de figuras 1.1. 1.2. 1.3. 1.4. 1.5.
Intel GO Automated Driving. . . . Evoluci´ on IoT seg´ un Cisco. . . . . Internet de Todo, IdT. . . . . . . . Dom´ otica. . . . . . . . . . . . . . . Aspectos del hogar afectados por la
. . . . .
. . . . .
. . . . .
3 4 5 6 8
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.
Jeedom Smart y Jeedom Pro, respectivamente. . . . . . . Controlador eedomus. . . . . . . . . . . . . . . . . . . . . Centros de control VeraEdge y VeraPlus, respectivamente. Concentrador VeraSecure. . . . . . . . . . . . . . . . . . . Dispositivo Zipato ZipaTile. . . . . . . . . . . . . . . . . . Archos Smart Home. . . . . . . . . . . . . . . . . . . . . . Kit b´ asico Xiaomi Smart Home. . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
14 16 17 17 18 20 21
4.1. Diagrama de Gantt. . . . . . . . . . . . . . . . . . . . . . . .
33
5.1. Mini ordenador Raspberry Pi 3. . . . . . . . . . . . . . 5.2. Mini ordenador Raspberry Pi Zero W. . . . . . . . . . 5.3. Consumo energ´etico Raspberry Pi . . . . . . . . . . . 5.4. Logo de MQTT. . . . . . . . . . . . . . . . . . . . . . 5.5. Funcionamiento de cada elemento de MQTT. . . . . . 5.6. Comunicaci´ on establecida entre un cliente y un br´oker. 5.7. Estructura paquete de control de MQTT. . . . . . . . 5.8. Publicaci´ on de datos en funci´on de QoS. . . . . . . . . 5.9. Logo OpenHAB. . . . . . . . . . . . . . . . . . . . . . 5.10. NodeMCU devkit v0.9 y pinout. . . . . . . . . . . . . 5.11. NodeMCU devkit v1.0 y pinout. . . . . . . . . . . . . 5.12. WeMos D1 mini Lite. . . . . . . . . . . . . . . . . . . 5.13. WeMos D1 mini. . . . . . . . . . . . . . . . . . . . . . 5.14. WeMos D1 mini Pro. . . . . . . . . . . . . . . . . . . . 5.15. Diferentes estancias utilizadas en aplicaci´on Home. . . 5.16. Logo OpenVPN. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
40 41 43 44 45 46 47 49 51 55 56 57 57 57 59 60
6.1. Configuraci´ on inicial de Raspberry Pi. . . . . . . . . . . . . .
67
iii
. . . . . . . . . . . . . . . . . . . . . . . . dom´otica.
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
iv
´INDICE DE FIGURAS 6.2. Configuraci´ on de IP est´atica. . . . . . . . . . . . . . . . . . . 6.3. M´etodos de comprobaci´on del servidor de MQTT, Mosquitto. 6.4. Configuraci´ on para disponer de autenticaci´on en el servidor. . 6.5. Configuraci´ on inicial de openHAB 2. . . . . . . . . . . . . . . 6.6. “Paper UI”. . . . . . . . . . . . . . . . . . . . . . . . . 6.7. de control “Basic UI”. . . . . . . . . . . . . . . . . . . . 6.8. Grupos de elementos disponibles en openHAB. . . . . . . . . 6.9. Configuraci´ on modo simple de v´ınculo. . . . . . . . . . . . . . 6.10. Canales de un dispositivo. . . . . . . . . . . . . . . . . . . . . 6.11. Par´ ametros modificables dispositivo de red. . . . . . . . . . . 6.12. Control de canales configurados. . . . . . . . . . . . . . . . . 6.13. Ficheros de configuraci´on “´ıtems” y “sitemaps”. . . . . . . . . 6.14. Configuraci´ on Sitemaps utilizado. . . . . . . . . . . . . . . . . 6.15. Configuraci´ on de un elemento NTP. . . . . . . . . . . . . . . 6.16. Configuraci´ on de un elemento Yahoo Weather. . . . . . . . . 6.17. Integraci´ on de Homekit en openHAB. . . . . . . . . . . . . . 6.18. Configuraci´ on de la nube de openHAB. . . . . . . . . . . . . . 6.19. P´ agina de inicio de myopenHAB.org. . . . . . . . . . . . . . . 6.20. Lista de elementos con estados. . . . . . . . . . . . . . . . . . 6.21. Autenticaci´ on frente al servidor web de openHAB. . . . . . . 6.22. Consola de istraci´on de openHAB. . . . . . . . . . . . . 6.23. Configuraci´ on Arduino IDE. . . . . . . . . . . . . . . . . . . . 6.24. Instalaci´ on y elecci´on de tarjetas adicionales. . . . . . . . . . 6.25. Instalaci´ on y elecci´on de tarjetas adicionales. . . . . . . . . . 6.26. Esquem´ atico mota MQTT. . . . . . . . . . . . . . . . . . . . 6.27. Router Mitrastar HGW-2501GN-R2. . . . . . . . . . . . . . . 6.28. Sitio web de No-IP y opciones de control de DNS. . . . . . . 6.29. Configuraci´ on DDNS en el router. . . . . . . . . . . . . . . . 6.30. Configuraci´ on del reenv´ıo de puertos. . . . . . . . . . . . . . . 6.31. Utilizaci´ on de VPN configurada en Windows. . . . . . . . . . 6.32. Conexi´ on a red VPN mediante cliente iOS. . . . . . . . . . .
68 70 73 78 81 82 83 84 85 86 86 87 89 90 91 91 93 93 94 100 101 102 104 105 106 116 117 118 119 122 123
7.1. Demo de sitemaps de openHAB. . . . . . . . . . . . 7.2. Conexi´ on con nuestra instancia de openHAB. . . . . 7.3. Error durante autenticaci´on por incorrecto. . 7.4. Validaci´ on br´ oker MQTT. . . . . . . . . . . . . . . . 7.5. Validaci´ on br´ oker MQTT. . . . . . . . . . . . . . . . 7.6. Salida de monitor serie de Arduino IDE. . . . . . . . 7.7. Control de la mota ejemplo desde terminal m´ovil. . . 7.8. Canal de ThingSpeak. . . . . . . . . . . . . . . . . . 7.9. Notificaciones del servidor al cliente iOS configurado. 7.10. Consumo energ´etico de la mota ejemplo. . . . . . . .
126 127 127 128 129 130 131 132 133 134
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
A.1. Descarga cliente Android de openHAB. . . . . . . . . . . . . 149
´INDICE DE FIGURAS A.2. Configuraci´ on cliente openHAB Android. . . . . . . . . A.3. Ejemplo de utilizaci´ on de instancia openHAB (Android). A.4. Descarga de cliente iOS de openHAB. . . . . . . . . . . A.5. Configuraci´ on cliente openHAB iOS. . . . . . . . . . . . A.6. Ejemplo de utilizaci´ on de instancia openHAB (iOS). . . A.7. Par´ ametros para la integraci´on de Homekit. . . . . . . . A.8. Incorporaci´ on de nuevo rio dom´otico a Homekit. . A.9. Informaci´ on de elementos de instancia openHAB. . . . A.10.Integraci´ on de Homekit y Siri. . . . . . . . . . . . . . . .
v
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
151 152 153 154 155 156 157 158 160
´Indice de tablas 4.1. Aproximaci´ on temporal de la planificaci´on del proyecto. . . . 4.2. Coste asociado a los recursos humanos. . . . . . . . . . . . . . 4.3. Coste asociado a los recursos hardware y software. . . . . . .
32 36 37
5.1. Caracter´ısticas t´ecnicas m´odulo ESP8266E-X. . . . . . . . . .
54
vii
Cap´ıtulo 1
Introducci´ on En este primer cap´ıtulo se recoger´a una introducci´on de los conceptos b´asicos que se tratar´ an en la presente memoria, como puede ser la relevancia que est´a adquiriendo en la actualidad el “Internet de las Cosas” en la vida de las personas y de las empresas. Tambi´en se tratar´a la situaci´on actual de la dom´otica y c´ omo su uso puede mejorar la calidad de vida de las personas. Adem´as, ser´ an incluidas algunas de las principales referencias consultadas tanto para la realizaci´ on de esta memoria como para la implementaci´on de la soluci´ on propuesta. Este proyecto surge por un inter´es y una curiosidad propia por el ´ambito del ‘Internet of Things’, IoT, sobre todo aplicada al hogar, conocida como dom´otica, y la continua necesidad de adentrarme en nuevos retos, como el de realizar un proyecto relacionado con este tema, en continuo auge desde hace alg´ un tiempo. Adem´ as de esto, en este proyecto se busca una soluci´on accesible para un gran abanico de personas, por lo que uno de los requisitos fundamentales siempre ha sido tener ‘un bajo coste’ y esto se tendr´ıa que conseguir mediante la utilizaci´ on de soluciones open-source y un hardware con un precio razonable.
1.1.
Motivaci´ on y Contexto.
La principal motivaci´ on de este proyecto es el continuo crecimiento de soluciones y tecnolog´ıas que est´ an apareciendo en la actualidad y est´an altamente relacionadas con el ‘Internet of Things’. Desde un punto de vista econ´omico, hay que destacar que la mayor´ıa de estas disparan sus precios en el mercado, lo que supone llegar a un reducido campo de clientes. 1
2
1.1. Motivaci´ on y Contexto.
En este ´ ambito de estudio podemos diferenciar algunas ramificaciones del mismo, como puede ser el uso de IoT en la industria, en el hogar, en las ciudades, o simplemente en los diferentes dispositivos que las personas utilizan en su d´ıa a d´ıa. Algunos ejemplos de este u ´ltimo pueden ser: un frigor´ıfico conectado a Internet que te avisa cuando te falta alg´ un alimento configurado previamente; la ropa inteligente, la cual posee una serie de sensores que pueden monitorizar diferentes constantes vitales y posteriormente los datos son enviados a una aplicaci´on en el m´ovil, y que decir de la tecnolog´ıa que avanza d´ıa a d´ıa en el mundo de la automoci´on, acerc´andose cada vez m´ as a la conducci´ on aut´onoma. Seg´ un lo que hemos podido comprobar, la sociedad, en un corto periodo de tiempo, estar´ a altamente conectada a Internet, por lo que no sabremos concebir la vida sin esos elementos inteligentes, continuamente envi´andose datos entre ellos mientras nosotros realizamos nuestra actividad diaria. Esta es la misma visi´on que posee Intel en [1], ‘Imagine cosas m´ as inteligentes y m´ as conectadas’, donde definen el concepto de “Internet de las cosas” como una s´olida red de diferentes dispositivos integrados con electr´ onica, software y diferentes sensores que permiten intercambiar y analizar datos pr´ acticamente en tiempo real. El estudio del IoT va buscando simplificar el camino de las personas para conseguir sus metas, mediante el desarrollo de productos m´as innovadores, la b´ usqueda de la eficiencia en todos los campos, y como no, en la exploraci´on de nuevas formas de negocio. El IoT ya est´ a presente en un amplio abanico de entornos, muy diferentes entre s´ı, como pueden ser:
• Automoci´ on: Los coches del futuro estar´an altamente conectados. Dispondr´an de una serie de sensores, y, de este modo, uniendo un grupo de veh´ıculos de caracter´ısticas similares formar´an una gran red de sensores cuyos datos ser´ an enviados a multitud de servidores. Todo esto estar´a apoyado por una conectividad 5G inteligente, buscando que todas las ciudades se conviertan en ‘smartcities’. Un ejemplo, de este tipo de tecnolog´ıa, lo podemos encontrar en la idea desarrollada por la marca espa˜ nola de coches SEAT, que mediante su sistema en pruebas ‘Ateca Smart City Car’, va buscando que todos los veh´ıculos de su marca sirvan para recopilar informaci´on sobre el tr´afico, aparcamientos, etc. [2].
Introducci´ on
3
Intel posee una soluci´ on para la conducci´on aut´onoma de los autom´oviles, llamada ‘Intel GO’. Con ella busca mejorar la experiencia de conducci´ on y, sobre todo, incrementar la seguridad de los pasajeros. Esta soluci´ on la podemos apreciar en la imagen 1.1. [3].
Figura 1.1: Intel GO Automated Driving.[3] • Industria: La tecnolog´ıa de IoT utilizada en la industria ayuda a interactuar de manera cooperativa a las diferentes m´aquinas, los seres humanos y los sistemas empresariales, buscando una mejora de la eficiencia en el proceso de producci´ on y una reducci´on de costes. • Edificios inteligentes: Los diferentes edificios que componen una ciudad se est´an tornando en construcciones inteligentes. Gracias a la implementaci´on de diferentes soluciones de ‘Internet of Things’ se est´a consiguiendo una mayor eficiencia, seguridad y comodidad de las personas que hacen uso de ellos. Teniendo en cuenta que para tal fin estos ’smartbuildings’ recopilan y analizan datos diariamente.
Por otro lado, se puede destacar el pensamiento de Cisco sobre el “Internet de las Cosas” [4], esta multinacional tiene la visi´on de obtener mejores resultados en los negocios con la adaptaci´on de las empresas a esta tecnolog´ıa. La conectividad de todos los elementos, que conforman una empresa, hace que se creen nuevas oportunidades de negocio y la reducci´on de coste.
4
1.1. Motivaci´ on y Contexto.
Habr´ a compa˜ n´ıas que utilicen datos de IoT para mejorar sus negocios, una gran cantidad de ejecutivos que han sido encuestados tiene en mente desarrollar alguna empresa relacionada con tecnolog´ıas IoT en un corto periodo de tiempo. Hay que destacar que la comunicaci´on entre dispositivos, “machine-to-machine (M2M)”, supondr´a casi la mitad de los dispositivos conectados en el a˜ no 2020.
Figura 1.2: Evoluci´on IoT seg´ un Cisco.[4]
Al igual que Intel, Cisco ve la utilizaci´on del “Internet of Things” en la industria, como un gran avance hacia la mejora de infraestructuras, modernizando las operaciones de las maquinas en colaboraci´on con las personas e incrementando la seguridad en el desarrollo de la actividad. Adem´as, se obtiene una gran cantidad de informaci´on que posteriormente se podr´a utilizar en la automatizaci´ on de procesos. IoT est´ a llegando cada vez m´as lejos, ampliando sus campos de trabajo. Por ejemplo, se puede utilizar en la educaci´on, con la finalidad de hacer que los estudiantes puedan obtener conocimiento de forma m´as sencilla y nuevas formas de investigaci´on [5]; para llevar salud a cualquier lugar sin tener fronteras que lo impidan, mediante la conectividad constante y segura entre pacientes y profesionales [6]; proporcionar un transporte conectado, mejorando as´ı la seguridad y la calidad de vida en las ciudades con una mayor movilidad y eficiencia. Buscando adem´as una mejora del tr´afico, lo cual conlleva un incremento en la calidad de experiencia de los pasajeros y una reducci´ on de la congesti´on [7]. En este punto, podemos observar c´omo todas las compa˜ n´ıas ven en el IoT una gran oportunidad de negocio. Por ello, Microsoft en [8], da las pautas necesarias para transformar una empresa en una compa˜ n´ıa inteligente. En primer lugar, se tienen que desarrollar productos que implementen tecnolog´ıas IoT, como sensores o dispositivos inteligentes, y mantengan un control total sobre las “cosas” propias, para as´ı, poder realizar una captura de datos
Introducci´ on
5
en tiempo real y posteriormente realizar una serie de an´alisis de los mismos para actuar conforme a la informaci´on obtenida. El objetivo principal es mejorar el rendimiento y la eficiencia de la empresa. Otro concepto interesante es “Internet of Everythings”, principalmente acu˜ nado por Cisco, con el cual se engloba toda conexi´on inteligente entre personas, procesos, datos y cosas. IoE surge con la necesidad de diferenciar IoT de conexiones M2M, conceptos muchas veces considerados como sin´onimos. De esta forma, se ampl´ıa el espectro de comunicaciones posibles incorporando conexiones maquina a personas (M2P, machine-to-people) y persona a persona (P2P, people-to-people) asistida por tecnolog´ıa [9]. Cisco mediante sus programas educativos, realiza una formaci´on en IoT. Tiene un curso de introducci´ on a Internet de las Cosas, en el que se presenta una descripci´ on general de los conceptos b´asicos y desaf´ıos de la econom´ıa transformadora de IdT (Internet de Todo), centrando su atenci´on en Internet y c´omo ha ido evolucionando hacia la interconexi´on de las personas, los procesos, los datos y los diferentes objetos que forman parte de la vida diaria [10].
Figura 1.3: Internet de Todo, IdT. [10]
La evoluci´ on de Internet de las Cosas, para Intel en [1], sigue tres pasos fundamentales. En primer lugar, se deben de conectar aquellos elementos que todav´ıa no lo est´en, mediante la implementaci´on de una serie de sensores con los que recopilar informaci´ on y tecnolog´ıa para poder transferir los datos a centros en los cuales ser´ an analizados.
6
1.1. Motivaci´ on y Contexto.
En segundo lugar, crear directamente dispositivos que dispongan de inteligencia y conectividad con las centrales de datos. Intel estima que para 2020 se tendr´ an 50 mil millones de dispositivos conectados, por lo que ante la posibilidad de saturaci´ on de la red se est´a estudiando que solo se transmitan los datos realmente relevantes. Y en u ´ltimo lugar, se busca la creaci´on de un mundo aut´onomo, en el que con los datos recogidos y analizados se puedan implementar tecnolog´ıas que tengan la posibilidad de funcionar libremente y realizar su propia toma de decisiones. Seg´ un podemos leer en [11], la continua evoluci´on de IoT est´a haciendo que algunas multinacionales del sector de las telecomunicaciones se asocien para impulsar la investigaci´on y desarrollo de este campo. Este es el caso de Ericsson y Microsoft, que est´an detr´as de disminuir el tiempo de lanzamiento de servicios IoT m´ oviles en la red. Para ello Ericsson, mediante el uso de su “Acelerador IoT.ayudar´a a las compa˜ n´ıas interesadas en el despliegue de soluciones IoT utilizando el sistema Microsoft Azure, el cual es una colecci´on de servicios en la nube integrados. Los desarrolladores y profesionales del sector de las Tecnolog´ıas de la Informaci´ on (TI) lo utilizan para crear, implementar y istrar aplicaciones a trav´es de la red de centros de datos de Microsoft [12].
Figura 1.4: Dom´otica.[13]
Introducci´ on
7
La dom´ otica, como se puede leer en [14], es un conjunto de tecnolog´ıas aplicadas al control y automatizaci´on inteligente de los sistemas de una vivienda. Permite una gesti´ on eficiente de la energ´ıa, proporcionando seguridad y confort, adem´ as de una continua comunicaci´on entre los inquilinos y el sistema. Un sistema dom´ otico es capaz de recoger informaci´on de una serie de sensores y/o dispositivos diferentes, para procesar la informaci´on y actuar de acorde a ello enviando ´ ordenes a diferentes actuadores reconocidos por el sistema inteligente. Adem´ as, el sistema puede acceder a redes externas de comunicaci´ on o informaci´ on. El uso de la dom´ otica en una vivienda permite dar respuesta a los nuevos requerimientos que plantean los cambios sociales y las nuevas tendencias en la forma de vida diaria de las personas. La dom´ otica es capaz de aportar una serie de mejoras a la calidad de vida del , las cuales podremos estudiar a continuaci´on:
• Ahorro energ´etico: gestiona inteligentemente los diferentes recursos disponibles en una vivienda, como pueden ser la iluminaci´on, el riego, los electrodom´esticos. . . mejorando el consumo de los recursos naturales se obtiene una reducci´ on del coste energ´etico. • Accesibilidad: facilita la utilizaci´on de los diferentes elementos por todos lo inquilinos del hogar, teniendo en cuenta las posibles dificultades de aquellos que presenten alguna discapacidad o problema de alg´ un tipo. • Seguridad: se incrementa el nivel de seguridad del hogar mediante una vigilancia autom´ atica 24/7, actuando de manera aut´onoma ante posibles incidencias o aver´ıas. Para ello se emplean elementos de control de intrusiones, c´ amaras de vigilancia, alarmas t´ecnicas para detecci´ on de incendios, fugas, inundaciones, etc. • Confort: el uso de la dom´otica permite tener un hogar m´as agradable, incorporando control a distancia de ventanas, puertas, luces, electrodom´esticos, climatizaci´on, persianas, etc. a garantizada la conexi´on entre el sistema dom´oti• Comunicaciones: est´ co y los inquilinos del hogar mediante un control y supervisi´on remota
8
1.2. Objetivos. de la vivienda a trav´es de aplicaciones de tel´efonos, servidores web. . . , que permiten la recepci´on de diferentes avisos de anomal´ıas y/o informaci´ on en tiempo real de diferentes equipos o la instalaci´on inteligente de la vivienda.
Figura 1.5: Aspectos del hogar afectados por la dom´otica. [14]
1.2.
Objetivos.
En esta secci´ on del presente ser´an expuestos los objetivos principales del proyecto. El objetivo principal es obtener un servidor dom´otico de bajo coste. Por ello se emplear´ an herramientas bajo licencias open-source o de coste reducido. Alguna de ´estas pueden ser: openHAB (servidor dom´otico open-source), Raspberry Pi (miniordenador de bajo coste con grandes prestaciones), NodeMCU (placa de desarrollo con chip Wi-Fi incluido), Arduino IDE, etc. Para las comunicaciones “machine-to-machine”se emplear´a un protocolo ligero, tipo publicador/suscriptor, denominado MQTT. Este tambi´en posee una licencia de software libre, puesto que se emplear´a el br´oker Mosquitto.
Introducci´ on
9
Otro requisito primordial es la incorporaci´on de mecanismos de seguridad a los diferentes servicios. Para poder cumplirlo se utilizar´a un proxy inverso, configurado en el servidor web Apache. Este realiza la redirecci´on de las peticiones al servidor de openHAB tras haber indicado correctamente su y contrase˜ na. Otra opci´ on de seguridad es la configuraci´on de una red VPN, mediante la cual se realizan las comunicaciones de manera cifrada y segura. Adem´ as, en la medida de lo posible, se utilizar´an protocolo seguros, MQTTS y HTTPS, en las comunicaciones entre dispositivos.
1.3.
Estructura de la memoria.
En esta parte del cap´ıtulo se llevar´a a cabo un resumen de la estructura de la presente memoria, realizando una breve s´ıntesis de cada uno de los cap´ıtulos que la componen. En concreto est´ a formada por ocho cap´ıtulos, en los cuales se explicar´a los conceptos te´ oricos necesarios para entender las herramientas empleadas en la soluci´ on propuesta en este proyecto, y un apartado de bibliograf´ıa. Adicionalmente, se incluir´ an tres anexos, el primero incluir´a el manual de , y los siguientes abarcar´ an los archivos de configuraci´on de OpenHAB y el sketch de la mota MQTT, respectivamente. • Cap´ıtulo 1. Introducci´ on: En este cap´ıtulo se realizar´a una breve introducci´on de los conceptos de “Internet de las Cosas” o IoT, y dom´otica, as´ı como de la situaci´ on de ambos campos en la actualidad y el crecimiento que est´an experimentando. Posteriormente, se expondr´an los objetivos perseguidos en este proyecto, se explicar´a la estructura de la presente memoria y para finalizar se recoger´ an algunas de las referencias bibliogr´aficas, de mayor relevancia, utilizadas en el estudio y realizaci´on del proyecto. • Cap´ıtulo 2. Estado del arte: En este cap´ıtulo se presentar´a un estudio de las diferentes soluciones de mercado, explicando las caracter´ısticas de cada una de ellas y compar´ andolas con la soluci´ on expuesta en esta memoria.
10
1.3. Estructura de la memoria. • Cap´ıtulo 3. Especificaci´on de requisitos: Aqu´ı se realizar´a una introducci´on b´asica a la soluci´on elegida y explicada en este informe, mediante la explicaci´on de los requisitos y decisiones previas llevada a cabo para el correcto funcionamiento de la propuesta de servidor dom´otico. • Cap´ıtulo 4. Planificaci´on y estimaci´on de coste: En esta secci´ on se expondr´a la planificaci´on temporal de la que ha constado este proyecto, prosiguiendo con una escueta explicaci´on de los recursos necesarios y/o imprescindibles para la instalaci´on y configuraci´ on. Este apartado se finalizar´a recogiendo una estimaci´on del coste del proyecto, teniendo en cuenta cada uno de los recursos utilizados y las fases de desarrollo de las que se compone. • Cap´ıtulo 5. Tecnolog´ıas y herramientas utilizadas: En esta parte de la memoria se recoger´a un estudio te´orico detallado de cada una de las tecnolog´ıas o protocolos implicados en el proyecto. Adem´ as, se explicar´an las herramientas utilizadas para poder implementar la soluci´on tratada. • Cap´ıtulo 6. Instalaci´on y configuraci´on: En este cap´ıtulo se expondr´a en detalle el procedimiento seguido para implementar el servidor dom´otico, la configuraci´on utilizada para los sensores de prueba elegidos y para que este utilice el protocolo MQTT en sus comunicaciones. • Cap´ıtulo 7. Fase de pruebas: En este cap´ıtulo se recoger´an algunas de las pruebas realizadas al sistema configurado. Estas ser´an utilizadas como mecanismo de comprobaci´ on del correcto funcionamiento de todos los elementos de los que est´ a compuesto.
Introducci´ on
11
• Cap´ıtulo 8. Conclusiones: Con este apartado se concluye el estudio realizado, en ´el se recoger´ an los aspectos m´ as importantes del presente estudio. Para ello se realizara un breve resumen indicando las diferentes conclusiones a las que se ha llegado durante la integraci´on de las diferentes herramientas. Posteriormente se recoger´ an algunas mejoras posibles o ampliaciones en las que se podr´ıan seguir trabajando. • Bibliograf´ıa: En esta parte de la memoria se recoger´an todos los documentos y/o enlaces bibliogr´ aficos consultados durante la realizaci´on y estudio del presente proyecto. • Anexo: Como u ´ltima parte de la memoria, se expondr´a un anexo explicativo, donde se incluir´ an el mecanismo de instalaci´on y uso de las aplicaciones para los sistemas Android e iOS. Los siguientes contienen los ficheros de configuraci´ on de elementos del servidor openHAB y el sketch de funcionamiento de la mota MQTT.
12
1.4. Principales referencias utilizadas.
1.4.
Principales referencias utilizadas.
En este apartado se recoger´an aquellas referencias bibliogr´aficas m´as relevantes para el estudio te´orico de las diferentes herramientas y protocolos utilizados y para la posterior configuraci´on realizada en el presente proyecto: • Openhab 2 Documentation: Sitio oficial de OpenHAB, el cual dispone de la documentaci´ on para la instalaci´on en diferentes sistemas operativos y el manual de para aprender su utilizaci´on. Disponible en : http://docs.openhab.org/index.html • MQTT: Web oficial del protocolo de comunicaci´on publicador-suscriptor ‘machine to machine’ (M2M), MQTT. Disponible en : http://mqtt.org/ • Arduino IDE: P´ agina oficial de Arduino, sitio web donde encontraremos tutoriales y documentaci´on relacionada con el entorno de desarrollo de Arduino. Disponible en : https://www.arduino.cc/en/Tutorial/HomePage
Cap´ıtulo 2
Estado del arte En este apartado de la memoria se realizar´a un estudio del estado del arte, para ello se expondr´ an las caracter´ısticas m´as relevantes y el coste de diferentes soluciones que actualmente podr´ıan encontrarse en el mercado. Posteriormente se tratar´ an de explicar las caracter´ısticas de la alternativa realizada, y para finalizar el apartado se expondr´a un resumen comparativo con los pros y contras de las diferentes opciones. Ante el actual avance del este sector tecnol´ogico, hay que saber diferenciar y comparar la necesidad y la finalidad de uso de un sistema de estas caracter´ısticas antes de ponerse a buscar alternativas, porque en este mercado hay infinidad de propuestas diferentes con un funcionamiento parecido. A continuaci´ on se explicar´ an algunas de las alternativas m´as punteras del sector y otras que son bastante interesantes, ya sea por el precio u otra caracter´ıstica presente en ellas. •
Jeedom. [15] Jeedom es un software de c´odigo abierto, por lo que cualquier persona con unos conocimientos b´asicos sobre el sistema operativo Linux puede descargarlo e instalarlo. Por ejemplo, se puede realizar su instalaci´ on en una Raspberry Pi, aunque la empresa desarrolladora del mismo tambi´en pone a disposici´on de los clientes soluciones “plug & play”, como pueden ser: • Jeedom Smart: es un concentrador tecnol´ogico que convierte cualquiera casa en una vivienda inteligente. Tiene como base el mini ordenador Odroid C2, bastante m´as potente que una Raspberry, 13
14 cuyo procesador es un ARM Quad-Core a 1.5GHz de 64 bits, posee una memoria RAM DDR3 de 2GB y un disco duro eMMC de 8 GB. Posee un adaptador Z-Wave incorporado de serie y un precio aproximado de 235e.
Figura 2.1: Jeedom Smart y Jeedom Pro, respectivamente. [15]
• Jeedom Pro: es el concentrador avanzado de la marca, recomendado solo para profesionales. Posee un procesador Quad-Core a 1.5GHz de 64 bits, memoria RAM DDR3 de 2 GB, disco duro eMMC de 16 GB, soporta los protocolos Z-Wave, EnOcean, IEEE 802.11 b/g/n y Bluetooth v4.0. Un pack completo con el concentrador Jeedom Pro, siete sensores y actuadores y un router tiene un precio aproximado de 958e[16].
Jeedom es una alternativa bastante completa, la cual ofrece muchas posibilidades como la gesti´on de la seguridad de las personas y los bienes; automatizaci´ on de sistemas de climatizaci´on y ahorro de energ´ıa, consiguiendo una monitorizaci´on completa del consumo de energ´ıa; comunicaci´ on por voz, SMS o aplicaciones m´oviles, gesti´on sencilla y centralizada de todos los automatismos del hogar como puertas, persianas, luces. . . La compa˜ n´ıa desarrolladora proporciona una aplicaci´on m´ovil compatible con dispositivos Android e iOS, con la que se puede controlar el sistema de automatizaci´on de la vivienda, desde dentro de la red local o desde el exterior, mediante la conexi´on 3G o 4G. Una de las principales causas por las que esta alternativa est´a tomando especial importancia en el sector es debida a las cuatro caracter´ısticas principales del proyecto:
Estado del arte
15
• Open Source: El software es de c´odigo abierto, esto supone una garant´ıa de transparencia, para saber qu´e hace el programa con los datos registrados por los sensores y actuadores. Adem´as, cualquier persona con conocimientos de programaci´on puede intervenir en la mejora del mismo. • Multi-Protocolo: es una soluci´on compatible con un gran abanico de protocolos, como puede ser Z-Wave, RFXCOM, RTS Somfy, etc. Esto es posible mediante el sistema de plugins disponible en la tienda de Jeedom. • Aut´ onomo: el sistema no necesita conectividad a servidores externos. La implementaci´on se realiza completamente de manera local, proporcion´ andose as´ı una mayor confidencialidad de los recursos. • Personalizable: la gran flexibilidad y la enorme cantidad de elementos personalizables hacen que cada pueda disponer de un centro dom´ otico Jeedom u ´nico.
•
Eedomus. [17] Eedomus es una soluci´ on que consta de un controlador, diferentes aplicaciones y un sistema en la nube de manera opcional. Con la cantidad de dispositivos compatibles, el cliente puede dise˜ nar su servidor dom´ otico adaptado a las necesidades de su hogar. En primer lugar, se tiene el controlador eedomus que es el centro de control de todos los perif´ericos compatibles utilizados en el dise˜ no desplegado en la vivienda. Este controlador dispone de un puerto Ethernet, dos puertos USB y dos puertos al´ambricos. Por otro lado, este controlador soporta la tecnolog´ıa Z-Wave, de serie, y EnOcean o 433MHz, de manera opcional. Como se ha mencionado anteriormente, dispone de una larga lista de perif´ericos compatibles, los cuales pueden consultarse en [18]. Alg´ un ejemplo de estos puede ser: diferentes enchufes inteligentes, un medidor de energ´ıa Owl, un sensor solar t´ermico Hygro, etc.
16
Figura 2.2: Controlador eedomus. [17] Para controlar los dispositivos, eedomus dispone de aplicaciones para cualquier sistema m´ovil y, adem´as, posee una aplicaci´on HTML5. El servicio de cloud permite acceder a los datos desde cualquier lugar y en cualquier momento de manera segura. De esta forma, se permite la monitorizaci´ on del controlador y el aviso de eventos urgentes mediante correo electr´ onico o env´ıo de SMS. En cuanto al precio del controlador, sin contar con los diferentes perif´ericos, asciende a 259e, en su versi´on normal, o 299e, en la versi´on mejorada “eedomus Plus” [19].
•
Vera. [20] Vera es otra marca de productos dom´oticos. La cual sigue el pensamiento de proporcionar dispositivos con configuraciones sencillas, haciendo que la tecnolog´ıa trabaje para los clientes, suponiendo un gasto asequible en comparaci´on con otras alternativas del sector y expansible de forma personalizada. Para ello, buscan que su soluci´on sea altamente compatible con una gran cantidad de dispositivos inteligentes del mercado. Esta marca posee tres concentradores: • VeraEdge[21]: proporciona seguridad, control remoto y ahorro energ´etico. Posee un procesador a 600 MHz, memoria RAM DDR2 de 128 MB y soporta los est´andares IEEE 802.11 b/g/n y el protocolo Z-Wave Plus. El precio por el que est´a disponible esta opci´on es 77$.
Estado del arte
17
• VeraPlus[22]: es capaz de proporcionar las mismas funcionalidades que el anterior, pero este concentrador est´a compuesto por un procesador a 880 MHz, una memoria RAM DDR3 de 256 MB, es compatible con los mismos est´andares wifi que su hermano menor. A˜ nadiendo IEEE 802.11ac, el protocolo Z-Wave Plus, ZigBee HA 1.2 y Bluetooth v4.0 + BLE. El precio para este concentrador es 127$.
Figura 2.3: Centros de control VeraEdge[21] y VeraPlus[22], respectivamente.
• VeraSecure[23]: es un controlador central con un funcionamiento 24/7, que incluye un sistema completo de seguridad, pero adem´as de esto, es capaz de controlar las luces, las puertas, ventanas, etc. Est´ a compuesto por un procesador Dual-Core a 880 MHz, memoria RAM DDR3 512MB, es compatible con los mismos protocolos que el VeraPlus y, adem´as, incorpora un protocolo al´ambrico propietario, VeraLink, con funcionamiento a 345 MHz o 433 MHz y la posibilidad de incorporar una tarjeta SIM para el uso de datos 3G. El precio de este dispositivo es de 300$.
Figura 2.4: Concentrador VeraSecure. [23]
18 Cabe destacar que los precios proporcionados solo incluyen el controlador del sistema dom´otico, por lo que la cuant´ıa se ver´ıa incrementada dependiendo de los sensores y/o actuadores que se incorporen al sistema. •
Zipato ZipaTile. [24] El sistema Zipato ZipaTile, con los protocolos Z-Wave y ZibBee, es un completo sistema de control unificado en un u ´nico dispositivo que puede ser f´ acilmente alojado en cualquier pared del hogar. Cuenta con un gran n´ umero de sensores incorporados y m´odulos hardware. Este dispositivo a´ una los sistemas de seguridad, un termostato, un controlador de automatizaci´on de eventos, una c´amara IP y una alarma, en un dispositivo inteligente.
Figura 2.5: Dispositivo Zipato ZipaTile. [24] Esta alternativa dispone, en el ´ambito de la seguridad, de sensores de presencia, ruido, vibraci´on, teclado t´actil y monitorizaci´on 24/7; en cuanto a la automatizaci´on del hogar, se puede manejar a distancia mediante un tel´efono inteligente, se pueden crear escenas (configuraci´ on predeterminadas para los actuadores). Permite controlar diferentes aspectos de climatizaci´on del hogar como puede ser un medidor de temperatura para realizar un encendido autom´atico de los sistemas de aire acondicionado, etc. Adem´as, gestiona otros aspectos tan importantes como la intercomunicaci´on, cuidado de personas mayores, control de las c´amaras IP. Todo esto es conseguido mediante un control centralizado con el dispositivo ubicado en la pared.
Estado del arte
19
El precio de esta alternativas es de los m´as elevados, 379e en la web oficial de la marca.
•
Leotec SmartHome.[25] La marca espa˜ nola Leotec SmartHome posee dos kit dom´oticos para convertir una casa en vivienda inteligente, para ello, con su alternativa busca proporcionar: • Seguridad: mediante la utilizaci´on del protocolo seguro de comunicaci´ on, MacBee, que garantiza que los m´odulos est´en a salvo de posibles amenazas externas. • Sencillez de uso: su instalaci´on inicial se basa en situar los diferentes m´ odulos en los lugares deseados y abrir la aplicaci´on en la que se configurar´ an los par´ametros de la red wifi. Posteriormente ser´ an detectados autom´aticamente y se podr´a tener total funcionalidad sobre ellos. • Confort: el inquilino del hogar inteligente podr´a disponer en todo momento de la situaci´ on de su vivienda, recibiendo notificaciones en pantalla o alarmas sonoras ante un posible problema. Leotec tiene dos posibilidades ante las diferentes necesidades de los clientes: el Starter Kit, incluye el m´odulo controlador o gateway, un enchufe inteligente, m´ odulos de control de los aires acondicionados y un sensor de movimiento y el Secure Kit, que dispone del gateway, dos m´ odulos de detecci´ on de movimiento y uno del estado de puertas y ventanas. Estos kit pueden ser ampliados por una lista de sensores propios de la marca. En cuanto al precio al que se encuentran disponibles estos kit es para el primero aproximadamente 113ey para el segundo 95e. [26]
•
Archos Smart Home. [27] El kit dom´ otico de la marca Archos busca la utilizaci´on de elementos miniaturizados e inal´ ambricos (se comunican mediante Bluetooth Smart). Este sistema permite, al igual que el resto, la monitorizaci´on desde cualquier lugar con el empleo de un dispositivo con conexi´on a Internet. Cabe destacar que el kit incluye como centro de control
20 del sistema inteligente una tablet con sistema operativo Android. Esta permite, de manera sencilla, la creaci´on de escenarios autom´aticos ante cualquier evento recogido por los diferentes sensores de los que dispone. El kit incluye la tablet Smart-Home, dos mini-c´amaras con resoluci´ on VGA con un ´angulo de visi´on de 110o , dos peque˜ nos sensores de temperatura y humedad, y dos sensores de movimiento, que tambi´en pueden ser utilizados para detectar la apertura o cierre de las puertas.
Figura 2.6: Archos Smart Home. [27]
•
Xiaomi Smart Home kit. [28] El Xiaomi Smart Home es el kit dom´otico desarrollado por la empresa china Xiaomi. Este puede encontrarse en tres versiones diferentes, en formato kit, desde cuatro hasta seis componentes, y con precios que var´ıan desde 45ehasta 70e, respectivamente [29]. Todos los kit est´ an compuestos por un dispositivo utilizado como gateway central, encargado de controlar al resto de dispositivos utilizados.
Estado del arte
21
Figura 2.7: Kit b´ asico Xiaomi Smart Home. [28]
Una caracter´ıstica interesante de este centro dom´otico es la multitud de dispositivos diferentes que se le pueden a˜ nadir. Dentro de estos podemos destacar la opciones de interruptores y enchufes inteligentes, sensores de puertas y ventanas, sensores de presencia, de temperatura y humedad, de calidad del aire, etc. Hay que destacar que dependiendo de la combinaci´on de elementos que se realicen se podr´ an programar unas acciones u otras. Se tiene a disposici´ on del una aplicaci´on propietaria, llamada “MiHome”, para llevar a cabo el control de todo el sistema dom´otico desplegado. Como inconveniente m´ as importante de esta soluci´on es que algunas de las funciones disponibles solo pueden ser utilizadas en China y el idioma oficial de la aplicaci´ on m´ovil es el chino. Aunque hay algunas versiones de terceros que disponen de algunos apartados en espa˜ nol e ingl´es.
Por otro lado, podemos estudiar dos alternativas de software open-source, similares a la utilizada en la soluci´on propuesta en este proyecto.
•
Domoticz. [30] Domoticz es un sistema dom´otico muy ligero y de c´odigo abierto que permite monitorizar y configurar varios actuadores como luces o interruptores y sensores de temperatura, lluvia, viento, gas, etc. Las
22 notificaciones generadas por el sistema pueden ser recibidas por cualquier dispositivo m´ovil. La interfaz gr´afica del sistema es una web front-end escalable de HTML5, y es totalmente compatible con dispositivos de escritorio o m´oviles. Puede ser utilizado con dispositivos RFXCOM, Z-Wave, EnOcean, entre otros. Es capaz de realizar autoaprendizaje de sensores y switches y enviar notificaciones push a dispositivos tanto Android como iOS. Posee una gu´ıa de instalaci´on paso a paso para diferentes sistemas operativos. Es compatible con una gran cantidad de dispositivos inteligentes y/o servicios diferentes, los cuales pueden ser consultados en [31].
•
Home Assistant. [32] Home Assistant es otra alternativa de software libre. Es una plataforma de automatizaci´on del hogar que funciona sobre Python3 y se encarga de rastrear y controlar los diferentes dispositivos de la vivienda y automatizar su control. Es una alternativa perfecta para instalar en una Raspberry Pi como sistema de bajo coste. Comprueba el estado de todos los dispositivos de la casa y los controla con una interfaz u ´nica y compatible con los dispositivos m´oviles. Home Assistant permite manejar los elementos inteligentes sin necesidad de utilizar un servicio en la nube, por lo que proporciona m´as privacidad al hogar. Para conseguir la automatizaci´on de la vivienda establece una serie de reglas ante posibles eventos ocasionales o programados. Al igual que la mayor´ıa de alternativas de c´odigo abierto, posee manuales paso a paso de instalaci´on, configuraci´on y utilizaci´on.
Tras haber recopilado algunas de las alternativas disponibles en el mercado del sector dom´ otico, se realizar´a una breve explicaci´on de las alternativas elegidas que componen la soluci´on final del proyecto y el porqu´e de cada una de estas.
Estado del arte
23
En primer lugar, tendremos dos opciones de arquitectura, una basada en una Raspberry Pi Zero W, que ser´a utilizada para aquellos hogares en los que se desee monitorizar un peque˜ no n´ umero de elementos, y otra en una Raspberry Pi 3, para aquellos casos en los que se desee un control m´as avanzado y con un mayor despliegue de elementos. La u ´ltima opci´on de plataforma base es m´ as potente que la primera. Se ha elegido esta arquitectura hardware puesto que facilita la unificaci´on de servicios y es una propuesta con bastante soporte en la actualidad. Por otro lado, se ha escogido OpenHAB, una herramienta de c´odigo abierto, porque es compatible con una gran cantidad de elementos inteligentes de multitud de marcas, as´ı como, diferentes servicios externos que pueden utilizarse y darle un punto m´as de personalizaci´on a nuestro sistema. Este servidor se puede controlar desde cualquier dispositivo; se pueden automatizar servicios, en el caso de que se den determinadas condiciones, y dispone de la posibilidad de configuraci´on de notificaciones mediante correo electr´onico, Twitter o Telegram. La u ´ltima caracter´ıstica, no por ello menos importante, es el coste que supone realizar un despliegue de este tipo, en el caso de que se emplee la primera alternativa es de aproximadamente 20e, mientras que la segunda supone un gasto de 45e. A estas cantidades se deber´a a˜ nadir el precio del NodeMCU y los sensores o actuadores utilizados. Si se implementan como en el caso de este proyecto, puede suponer un desembolso adicional de 15e. Por lo tanto, estamos ante una alternativa para crear un centro de control dom´otico con un coste bastante reducido, aproximadamente 35-60e, respectivamente.
Cap´ıtulo 3
Especificaci´ on de requisitos En este cap´ıtulo se pretende realizar un an´alisis del dise˜ no realizado en el presente proyecto. Se expondr´ a, de la manera m´as detallada posible, los requerimientos fundamentales, que ser´a necesario satisfacer en posteriores etapas de dise˜ no e implementaci´ on. Cabe destacar que para la correcta realizaci´on de esta fase del proyecto, tendremos que tener muy presente los principales objetivos del desarrollo de este trabajo. Estos pueden ser la implementaci´on de un sistema dom´otico de bajo coste e intuitivo, o hacer uso de software libre. A continuaci´ on, se pormenorizar´an los requisitos de la soluci´on y las principales decisiones tomadas al inicio del proyecto.
3.1.
Requisitos.
Dentro de los requisitos deberemos de contemplar aquellas caracter´ısticas de la implementaci´ on necesarias para el correcto funcionamiento del sistema. Se tendr´ a que tener en cuenta: cu´al es la finalidad del proyecto, las condiciones de funcionamiento del mismo, etc. • Env´ıo de informaci´ on con protocolo M2M: El sistema tiene que ser capaz de enviar autom´ aticamente la informaci´on entre los diferentes servicios, mediante una comunicaci´on machine-to-machine, para ello, dichos servicios deber´ an estar configurados correctamente para tal fin.
25
26
3.2. Decisiones previas. • Funcionamiento del servidor dom´otico: El servidor dom´otico implementado deber´ a mantener un funcionamiento constante, analizando los datos recibidos y actuando en tiempo real, con ello se obtiene una respuesta m´ as natural, independientemente de que la actuaci´on se realice de manera remota. • Autenticaci´ on de los clientes: Los clientes deben de realizar una autenticaci´ on antes de acceder a los servicios desplegados, proporcionando, de esta manera, una mayor seguridad de datos tan importantes como la presencia de los inquilinos del hogar o el estado de las puertas o ventanas de la vivienda. • Conexi´ on al´ ambrica: Otro requisito fundamental es la conexi´on continua del servicio para poder acceder a ´el en cualquier momento y desde cualquier lugar. Por lo tanto, ser´a necesaria la utilizaci´on de una conexi´ on al´ ambrica a la red local disponible en la vivienda. Adem´as, se deber´ a de utilizar una conexi´on directa a la red energ´etica que provea electricidad al hogar donde se encuentre desplegado. • Dispositivo m´ ovil: Ser´a necesaria la utilizaci´on de un dispositivo m´ovil para la monitorizaci´on y control del sistema de manera remota.
3.2.
Decisiones previas.
Como decisiones previas se incluir´an aquellas caracter´ısticas que aplican un atributo o imponen una restricci´on a la implementaci´on. Ser´a este apartado el que incluya las diferentes soluciones software utilizadas para cada una de las herramientas hardware que componen el desarrollo del proyecto. • MQTT: El protocolo de comunicaci´on M2M utilizado en la soluci´on implementada, es MQTT. Un protocolo publicador/subscriptor compatible con la mayor´ıa de sistemas actuales, se puede destacar que todos los empleados en el presente proyecto presentan esta caracter´ıstica. Esto hace que el sistema implementado tenga la posibilidad de ser migrado a otros tipos de sistemas operativos y/o sistemas diferentes.
Especificaci´ on de requisitos
27
• OpenHAB: El uso del servidor dom´otico OpenHAB ser´a el escogido para el desarrollo del presente proyecto, debido al gran soporte que tiene la comunidad que lo istra. Adem´as de ser compatibles con los sistemas operativos m´ as utilizados actualmente en el ´ambito dom´otico. • Raspberry Pi: La plataforma escogida para realizar el despliegue de los servicios que proporcionen el empleo del protocolo MQTT para las comunicaciones y el servidor dom´otico, es Raspberry Pi. Esto es debido a que se trata de un sistema de bajo coste, de peque˜ nas proporciones y bastante potente. Adem´ as, el servidor OpenHAB tiene una distribuci´ on de Raspbian con la configuraci´on b´asica para poder realizar su despliegue de manera m´ as sencilla, aunque esta u ´ltima no ha sido utilizada y se ha instalado y configurado ´ıntegramente desde cero. • NodeMCU: Para la realizaci´on de un peque˜ no ejemplo de prueba de funcionamiento del sistema dom´otico se emplear´a la placa de desarrollo NodeMCU, compuesta por un chip ESP12-E, con el cual se proporciona conectividad a internet a los diferentes sensores y actuadores empleados. Tambi´en ser´ a la encargada de registrar los datos y enviarlos al servidor mediante la utilizaci´on del protocolo MQTT. • Arduino IDE: Para la programaci´on del ejemplo de funcionamiento del servidor, realizado sobre la placa NodeMCU, ser´a necesario el empleo de la herramienta de programaci´on proporcionada por la organizaci´on de Arduino. Aunque, a esta se le deber´an unos plugins para que se pueda utilizar con nuestra placa de desarrollo. • Android/iOS: Se podr´ a utilizar un dispositivo m´ovil con sistema operativo Android para la consulta, monitorizaci´on y control de los diferentes elementos disponibles en el sistema implementado. Puesto que se busca que el sistema sea interoperable, como se describir´a en el siguiente punto, tambi´en se podr´an utilizar sistemas iOS con la misma finalidad. En este u ´ltimo caso, el servidor podr´a ser controlado mediante la aplicaci´ on Home de Apple, adem´as del propio cliente de openHAB.
28
3.2. Decisiones previas. • Interoperatividad: El sistema desarrollado se pretende que sea interoperativo con los diferentes sistemas de los dispositivos m´oviles m´as relevante en el ´ ambito internacional. Se har´a uso de la aplicaci´on desarrollada, tanto para Android como para iOS, realizada por la misma organizaci´ on de OpenHAB. Adem´as de estos sistemas, mediante la utilizaci´ on de la interfaz web tambi´en podr´a ser controlado por otros sistemas como Windows, Linux o Mac. • Coste: Como se ha mencionado en m´ ultiples ocasiones en esta memoria, se busca que el sistema desarrollado sea de bajo coste, por lo que se utilizar´ a en su mayor medida software Open-Source. • Escalbilidad: El sistema se desarrollar´a de tal forma que sea escalable, para poder expandir el grado de actuaci´on del sistema dentro del hogar. Para ello, se podr´an desplegar m´as sensores, actuadores o displays diferentes, teniendo en cuenta que habr´a que realizar alg´ un cambio y/o modificaci´ on en la configuraci´on. • Usabilidad: Se deber´a de facilitar la utilizaci´on de los diferentes elementos del sistema por los s potenciales. En el caso de disponer un dispositivo m´ ovil iOS, la soluci´on propuesta ser´a operable mediante la utilizaci´ on del asistente personal Siri, a la cual se podr´a pedir informaci´ on de los sensores o decirle que efect´ ue alguna acci´on determinada sobre los actuadores..
Cap´ıtulo 4
Planificaci´ on y estimaci´ on de costes En este cap´ıtulo se recoge toda la informaci´on relacionada con la planificaci´on seguida en la realizaci´ on del proyecto, para la cual se detallar´an las diferentes fases de las que ha constado. Posteriormente, se tratar´an de describir los diferentes recursos utilizados para la consecuci´on de la instalaci´on, configuraci´ on y desarrollo de la memoria. Este apartado finaliza con una estimaci´ on de los costes asociados a cada una de las fases de desarrollo, as´ı como de los diferentes recursos descritos.
4.1.
Fases de desarrollo
En esta secci´ on del cap´ıtulo se recoger´a un an´alisis de las diferentes fases que componen el proyecto, en la cuales se recoger´an los aspectos m´as relevantes de cada una de ellas y, adem´as, una estimaci´on del tiempo necesario para su consecuci´ on. Dicho tiempo ser´a utilizado m´as adelante para realizar una estimaci´ on del coste. Finalmente, se incluir´a un diagrama de Gantt para visualizar una planificaci´ on temporal aproximada de cada fase. A continuaci´ on se realizar´ a la enumeraci´on de las diferentes fases con una breve descripci´ on:
29
30
4.1. Fases de desarrollo • Fase 1: Definici´ on del proyecto. En esta primera fase se tratar´a de realizar una definici´on completa del proyecto a realizar, en la cual se plantear´an los diferentes objetivos principales buscados con la realizaci´on del mismo. Se realizar´ a un estudio superficial de algunas de las posibles herramientas y protocolos utilizados. Por lo tanto, en esta fase se elegir´a el uso de la herramienta OpenHAB; de la placa de desarrollo, NodeMCU, programada mediante Arduino y el protocolo MQTT para la comunicaci´on de los sensores. • Fase 2: Especificaci´on de requisitos. Una vez se han definido tanto los objetivos del proyecto como las herramientas que se utilizar´an, pasaremos a definir los diferentes requisitos y decisiones iniciales. De esta forma, al finalizar esta etapa junto con la anterior quedar´an fijadas las bases del proyecto sobre el que ir investigando y realizando algunas pruebas para familiarizarse con las diferentes herramientas. • Fase 3: Estudio de alternativas disponibles En este apartado se realiza un estudio del mercado actual, mediante la b´ usqueda de diferentes alternativas que provean un servicio similar al planteado en la presente memoria. Durante este estudio se llevar´ a a cabo una comparaci´on de las diferentes soluciones, teniendo en cuenta aspectos tan importantes como la interoperatividad con diferentes sistemas y el precio final al . • Fase 4: Familiarizaci´on con las herramientas utilizadas. En esta fase se desarrollar´a un estudio exhaustivo de las diferentes herramientas y protocolos utilizados, para ello se utilizar´a, en un primer lugar, la documentaci´on oficial de cada una de ellas. Posteriormente, se buscar´ an ejemplos de uso para poder observar casos pr´acticos y determinar si se han elegido los elementos id´oneos para la problem´atica propuesta.
Planificaci´ on y estimaci´ on de costes
31
• Fase 5: Dise˜ no. Esta fase consistir´ a en el dise˜ no tanto del hardware como del software, es decir, ser´ a necesario definir el prototipo hardware mediante la utilizaci´ on de la placa de desarrollo NodeMCU y de los diferentes sensores incluidos para realizar una muestra de uso. Adem´as, se incluye el uso de una Raspberry Pi (Model 3 o Zero W) donde estar´a alojado tanto el br´ oker de MQTT como el servidor donde est´a definida la topolog´ıa de la ‘smarthome’, OpenHAB. • Fase 6: Configuraci´ on. Esta parte del proyecto consistir´a en el apartado de desarrollo del mismo, en el cual se deber´ a de realizar el montaje del servidor dom´otico y su configuraci´ on. Incluir´ a el desarrollo del sketch de Arduino cargado en NodeMCU, el cual controlar´a los sensores conectados a la misma y definir´ a el uso del protocolo MQTT para la actualizaci´on de estados de los diferentes elementos utilizados. Es una de las fases m´ as costosas, en t´erminos de tiempo, puesto que abarca un gran abanico de acciones que deben ser realizadas, con el fin de obtener una correcta configuraci´on de servicios y un exitoso resultado. • Fase 7: Pruebas y validaci´ on. Esta etapa conlleva la realizaci´on de una bater´ıa de pruebas para cerciorarse del correcto funcionamiento de los diferentes elementos que conforman la soluci´ on. Se realizar´an pruebas del funcionamiento de los sensores y actuadores y de conexi´on con el servidor tanto desde la red interna como desde el exterior, as´ı como la adecuada actividad de los diferentes protocolos utilizados en ella. • Fase 8: Redacci´ on de la memoria y revisi´on bibliogr´afica. La u ´ltima fase, antes de la finalizaci´on del proyecto, es la realizaci´on de la memoria, aunque se trate de una etapa que se extiende desde el inicio de la primera fase junto con la revisi´on bibliogr´afica. Se recoger´an de forma escrita todos los aspectos relevantes de las fases anteriores; explicando tanto el apartado te´orico, para situar al lector, como los apartados pr´ acticos.
32
4.1. Fases de desarrollo
Una vez se han definido las diferentes etapas que conforman el proyecto, se plantear´ a una planificaci´on temporal de cada una de ellas, mediante la cual se estimar´ a el tiempo necesario para la precisa realizaci´on de los diferentes pasos para la documentaci´on y desarrollo del proyecto. Esta planificaci´on puede estudiarse en el diagrama de Gantt mostrado en la figura 4.1).
En dicho diagrama se puede ver el gasto temporal de cada una de las tareas a realizar, adem´ as, se puede apreciar como algunas de ellas se extienden a lo largo del tiempo y se realizan conjuntamente con otras. Las m´as significativas son la redacci´on de la memoria y el estudio de las diferentes herramientas, las cuales se llevan a cabo conforme se realiza el dise˜ no y la implementaci´ on. En la tabla (4.1) se puede contemplar, aproximadamente, el n´ umero de horas asignadas a cada una de las diferentes tareas que componen el presente proyecto.
Asignaci´on horaria de las etapas del proyecto Fase de realizaci´ on Fase 1 Fase 2 Fase 3 Fase 4 Fase 5 Fase 6 Fase 7 Fase 8
Descripci´on
Tiempo aproximado
Definici´on del proyecto Especificaci´on de requisitos Estudio de alternativas disponibles Familiarizaci´on con las herramientas utilizadas Dise˜ no Implementaci´on Pruebas y validaci´on Redacci´on de la memoria y revisi´on bibliogr´afica
12 Horas 12 Horas 31 Horas 80 Horas 35 Horas 65 Horas 35 Horas 190 Horas
Tabla 4.1: Aproximaci´on temporal de la planificaci´on del proyecto. El tiempo total dedicado a la realizaci´on de este Trabajo Fin de Grado, teniendo en cuenta todas las fases, asciende a 460 horas.
Planificaci´ on y estimaci´ on de costes
Figura 4.1: Diagrama de Gantt.
33
34
4.2. Recursos
4.2.
Recursos
En esta parte se tratar´a de reunir todos los recursos utilizados durante la realizaci´ on del presente estudio. Se abarcar´an tanto los recursos humanos como los recursos hardware y software.
4.2.1.
Recursos humanos.
• D. Jorge Navarro Ortiz, en calidad de tutor del proyecto y profesor contratado doctor del Departamento de Teor´ıa de la Se˜ nal, Telem´atica y Comunicaciones de la Universidad de Granada. • Alejandro Garc´ıa Soria, alumno del Grado en Ingenier´ıa de Tecnolog´ıas de Telecomunicaci´ on y autor del presente proyecto.
4.2.2.
Recursos hardware.
• HP Envy 15 j006ss, el cual dispone de un procesador Intel Core i53230M (2,6 GHz, 3 MB L3 de cach´e), 8 GB de memoria RAM y 750 GB de disco duro. Este dispositivo ha sido utilizado para la implementaci´ on de los diferentes sketches de Arduino que posteriormente ser´ıan grabados en el chip ESP8266. • Raspberry Pi 3, dispone de un procesador de 64-bit quad-core ARMv8 – 1.2 GHz, 1 GB de memoria RAM, compatible con IEEE 802.11n. • Raspberry Pi Zero W, dispone de un procesador Single-Core a 1 GHz, 512 MB de memoria RAM, compatible con IEEE 802.11n y bluetooth 4.1, conexiones mini HDMI y USB On-The-Go. • iPhone 6s Plus, el cual dispone de un procesador Twister Dual-Core de 1.84 GHz. 2 GB de memoria RAM y 64 GB de almacenamiento. • BQ Aquiris M10, con procesador Mediatek MT8163B, Cortex-A53 Quad-Core a 1.3GHz, 2GB de memoria RAM y 16 GB de almacenamiento.
Planificaci´ on y estimaci´ on de costes
35
• NodeMCU, dispone de un chip ESP8266 (ESP-12-E) y 4 MBytes de memoria flash. • Sensores y actuadores utilizados para de las diferentes pruebas. En este proyecto han sido usados un sensor de temperatura y humedad DHT22 y un led. • Diferentes elementos de dise˜ no hardware: protoboard, resistencias, cables de prototipado.
4.2.3.
Recursos software.
• Sistema operativo Windows 10, utilizado en el equipo HP Envy 15 para la implementaci´ on y apoyo de los diferentes servicios y elementos. • Sistema operativo Raspbian Jessie, en la Raspberry Pi, en el cual estar´ a alojado el servidor de MQTT y de OpenHab. • Sistema operativo iOS 10.3, en un iPhone 6s Plus, para realizar las pruebas de la aplicaci´ on OpenHab para dispositivos iOS y la integraci´ on de homekit. • Arduino IDE. Entorno de desarrollo de Arduino, con el cual se puede desarrollar los programas y subirlos a las diferentes placas compatibles con el mismo. • Openhab. Software open-source utilizado para definir las diferentes estancias o elementos de la smarthom, y, de este modo, tenerlos todas bajo control. • Eclipse MosquittoTM . Es un br´oker de mensajes de c´odigo abierto que implementa el protocolo MQTT en sus versiones 3.1 y 3.1.1. • Homekit. Aplicaci´ on nativa de dispositivos iOS utilizada para automatizar los elementos inteligentes del hogar. • Overleaf y TexMaker. Editores de texto en LATEX.
36
4.3. Coste del proyecto
4.3.
Coste del proyecto
En esta secci´ on se realizar´a una aproximaci´on del coste que conlleva el estudio y la implementaci´on del proyecto. Para ello, tendremos en cuenta cada uno de los elementos y las fases de desarrollo de las que se compone, descritos en los apartados anteriores. En primer lugar, tenemos los recursos humanos que han sido necesarios. Consideraremos que el precio de un ingeniero con el grado en Ingenier´ıa de Tecnolog´ıas de Telecomunicaci´on es de aproximadamente 20 euros/hora, mientras que el coste medio de un profesor Doctor en la Universidad de Granada es de 50 euros/hora. En la Tabla 4.2 se recoge detalladamente una estimaci´ on del coste de cada una de las fases del proyecto, teniendo en cuenta las horas indicadas en el apartado 4.1. Tareas Definici´ on del proyecto Especificaci´ on de requisitos Estudio de alternativas disponibles Familiarizaci´ on con las herramientas utilizadas Dise˜ no Implementaci´on Pruebas y validaci´on Redacci´ on de la memoria y revisi´on bibliogr´afica Tutorias
Tiempo empleado 12 Horas 12 Horas 31 Horas
Coste 240 e 240 e 620 e
80 Horas
1600 e
35 Horas 65 Horas 35 Horas
700 e 1300 e 700 e
190 Horas
3800 e
20 Horas 1000 e Coste total: 10200 e
Tabla 4.2: Coste asociado a los recursos humanos.
Por otro lado, deberemos contabilizar el coste que suponen tanto los recursos hardware como software. Cabe destacar que estos u ´ltimos, al tratarse en su gran mayor´ıa de software open-source, son gratuitos y el coste asociado a los diferentes sistemas operativos, excepto Raspbian que es libre, va incluido en el importe del dispositivo donde se ejecuta. Por lo tanto, la utilizaci´ on del software necesario no conllevar´a un incremento de la cuant´ıa total. En la tabla 4.3 se recoge el precio asociado a cada uno de los recursos utilizados para realizar una correcta implementaci´on del presente proyecto.
Planificaci´ on y estimaci´ on de costes
37
Podremos apreciar exclusivamente el coste de los recursos hardware puesto que el software utilizado es gratuito, como se mencion´o anteriormente. Recursos Ordenador HP Envy 15 iPhone 6s Plus 64GB BQ Aquiaris M10 Raspberry Pi 3 Raspberry Pi Zero W NodeMCU (ESP-12-E) Sensores y actuadores Elementos de prototipado
Coste 800 e 970 e 300 e 40 e 15 e 5e 5e 15 e
Ciclo de vida Coste 48 meses 167 e 36 meses 270 e 36 meses 83 e 36 meses 11 e 12 meses 13 e 5e 5e 15 e Coste total: 569 e
Tabla 4.3: Coste asociado a los recursos hardware y software.
Para concluir este cap´ıtulo, observaremos el presupuesto necesario para la realizaci´ on ´ıntegra del proyecto, para ello deberemos de sumar la cuant´ıa que suponen los recursos humanos y los recursos del hardware y software, detallado en el apartado anterior. Por lo tanto, el presupuesto final del proyecto sabiendo que el valor de los recursos humanos es de 10200 euros y de hardware de 569 euros, asciende a un montante de 10769 euros.
Cap´ıtulo 5
Tecnolog´ıas y herramientas utilizadas. En este cap´ıtulo se llevar´ a a cabo un estudio te´orico de las diferentes herramientas utilizadas en las posteriores fases de dise˜ no, implementaci´on y pruebas, as´ı como las diferentes tecnolog´ıas o protocolos implicados en cada una de las partes necesarias para el correcto funcionamiento del sistema.
5.1.
Raspberry Pi.
La Raspberry Pi [33] surge como trabajo de una fundaci´on que recibe ese mismo nombre, con el objetivo de poner en manos de la gente el poder digital que avanza a pasos agigantados. Su misi´ on principal consiste en crear ordenadores de bajo coste y peque˜ nas dimensiones, pero que a su vez posean un alto rendimiento con el que las personas de todo el mundo puedan aprender, crear, innovar, investigar, en fin, resolver problemas a la vez que se divierten. Adem´as de esto, proporcionan la informaci´ on y educaci´ on necesaria para ayudar a que las personas puedan acceder al mundo de la inform´atica y a la creaci´on digital.
5.1.1.
Raspberry Pi 3 y Raspberry Pi Zero W.
Actualmente se pueden encontrar varios minicomputadores de la fundaci´on, pero nos centraremos en la Raspberry Pi 3 y la Raspberry Pi Zero W, que ser´an las utilizadas en las siguientes fases del proyecto.
39
40
5.1. Raspberry Pi.
En primer lugar, tenemos la Raspberry Pi 3 (v´ease figura 5.1), actualmente es la versi´ on m´ as potente que proporciona la marca, podemos observar una mejora considerable, en componentes hardware, con respecto a su antecesora. Esto se traduce en un incremento de las prestaciones consiguiendo un aumento del rendimiento obtenido.
Figura 5.1: Mini ordenador Raspberry Pi 3.
Esta tercera generaci´on de Raspberry Pi presenta el SoC Broadcom BCM2837, un Quad-Core de 64-bit con estructura ARMv8-A, compuesto por el procesador (U) Cortex-A53. Este procesador funciona a 1.2 GHz y contiene 32 kB de memoria cach´e de nivel 1 y 512 kB de cach´e de nivel 2, este procesador es un 50 % m´as r´apido que el disponible en su antecesora y posee una memoria RAM LPDDR2 de 1GB [34]. La Raspberry Pi 3 contiene un procesador gr´afico Broadcom VideoCore IV 400MHz, que soporta OpenGL ES 2.0. Este procesador gr´afico, tipo multimedia de baja potencia, posee una arquitectura DSP bidimensional que hace que sea flexible y eficiente para descodificar con una serie de c´odecs. El resto de caracter´ısticas podemos estudiarlas en [35], donde podemos destacar que, en cuanto a conectividad, posee un puerto Ethernet 10/100 Mbps, tiene integrados chips para Wi-Fi 802.11n y bluetooth v4.1 (BLE) de bajo consumo. Adem´ as, posee cuatro puertos USB, cuarenta pines GPIO, HDMI, un conector Jack combinado de 3.5 mm para audio o v´ıdeo compues-
Tecnolog´ıas y herramientas utilizadas.
41
to, una ranura para tarjetas de memoria SD con funcionamiento push-pull en lugar de push-push como en las generaciones anteriores, en la cual ser´an grabadas las im´ agenes del sistema operativo a utilizar, y por u ´ltimo posee interfaces de conexi´ on para una c´ amara o una pantalla, proporcionadas de manera adicional por la propia fundaci´on, encargada de gestionar los recursos de este peque˜ no pero potente dispositivo. Este posee un precio bastante reducido, 35e. En este punto, podemos pensar que la Raspberry Pi 3 es el miniordenador con WiFi integrado m´ as barato del mercado, pero no estar´ıamos en lo cierto, puesto que la otra alternativa propuesta en este estudio, la Raspberry Pi Zero W (v´ease figura 5.2), es m´ as barata a´ un. La ‘W’ del nombre la recibe tras haber integrado chips de WiFi y bluetooth, como veremos a continuaci´on.
Figura 5.2: Mini ordenador Raspberry Pi Zero W.
Seg´ un hemos podido estudiar en [36], esta posee las mismas especificaciones que su versi´ on antecesora, la Raspberry Pi Zero, a las que a˜ nade conectividad mediante un adaptador Wi-Fi 802.11 b/g/n y bluetooth v4.1 de bajo consumo. Esto lo consigue con la incorporaci´on de un m´odulo de conectividad Cypress CYW43438. Las caracter´ısticas compartidas entre ambas versiones son un procesador de n´ ucleo u ´nico con funcionamiento a 1 GHz, memoria RAM de 512 MB, y diferentes puertos de conexi´on de perif´ericos, como pueden ser: Mini-HDMI, Micro-USB con funcionalidad OTG (para controlar los posibles perif´ericos conectados a este puerto), 40 pines GPIO (compatibles con HAT), a los que a˜ nade pines adicionales para salida de v´ıdeo compuesto, un bot´ on de reset, y conector de la c´amara de la marca, mediante un adaptador incluido en algunos de los kit disponibles.
42
5.1.2.
5.1. Raspberry Pi.
Funcionamiento b´ asico.
Para poder utilizar este peque˜ no ordenador se debe de instalar algunos de los sistemas operativos disponibles en una tarjeta micro-SD. Los sistemas principales son: Raspbian, una distribuci´on de Debian optimizada para su utilizaci´ on en este tipo de arquitecturas, adem´as, es el sistema operativo oficial de la fundaci´ on Raspberry y NOOBS [37]. Este u ´ltimo es un instalador de diferentes sistemas operativos, entre los cuales se incluye Raspbian en su versi´ on completa o de l´ınea de comandos (Lite), Pidora que es una distribuci´ on de Fedora para la Raspberry, OSMC o LibreELEC que son distribuciones utilizadas para crear nuestro propio centro multimedia para la televisi´ on, Lakka que es un emulador de consolas tipo retro, etc. Una vez hayamos elegido el sistema operativo a utilizar y se tenga grabado en la tarjeta de memoria, lo primero que deberemos de hacer, ser´a introducir la tarjeta micro-SD en la ranura. Conectar la Raspberry a una pantalla, ya sea mediante el conector HDMI o utilizando la salida de v´ıdeo RCA y, en caso de que se desee, a˜ nadiremos un teclado y rat´on mediante USB. Se puede conectar a Internet mediante el puerto Ethernet integrado o con una conexi´ on wifi. Para finalizar, conectamos la fuente de alimentaci´ on al puerto micro-USB, destinado a tal fin, y esperamos a que se inicie el sistema para poder comenzar a utilizarlo.
5.1.3.
Consumo energ´ etico.
Los miniordenadores de la fundaci´on Raspberry poseen un bajo consumo energ´etico que, adem´as, var´ıa en funci´on del nivel de utilizaci´on de los diferentes componentes que los forman. En un portal dedicado al estudio de Raspberry, cada vez que se lanza un nuevo modelo se encargan de realizar una bater´ıa de pruebas para calcular el consumo de las diferentes alternativas y/o generaciones de ordenadores Raspberry. En [38] podemos observar una comparativa del consumo energ´etico de los diferentes modelos. Este estudio se obtiene mediante la realizaci´on de cuatro tareas en cada una de las Raspberry y almacenando los resultados obtenidos. (v´ease figura 5.3)
Las cuatro tareas para las que se recogieron datos de consumo fueron: el estado de reposo, cargando la interfaz gr´afica, realizando la visualizaci´on de un v´ıdeo a una resoluci´on de 1080p y realizando la captura de un v´ıdeo para la misma resoluci´ on.
Tecnolog´ıas y herramientas utilizadas.
43
Figura 5.3: Tabla comparativa consumo energ´etico diferentes Raspberry Pi. [38] Aunque en la imagen 5.3 se observa el estudio de todas las Raspberry Pi que han pasado por el mercado, nos interesar´a estudiar la comparativa de los datos obtenidos para el modelo Zero W y el modelo 3B. En primer lugar, se observa un consumo bastante mayor, incluso en el estado de reposo, para el caso del modelo 3B, lo cual se traduce en un rendimiento bastante superior. Por lo que dependiendo de las necesidades que se tengan, en cuanto a la implementaci´on de los diferentes servicios dom´oticos, ser´ a necesaria la utilizaci´on de una u otra. Para implementaciones sencillas sin necesidad de muchos elementos a controlar y sin la utilizaci´ on de servicios demasiado pesados, se podr´a utilizar el modelo Zero W. Mientras que si se desea implementar un sistema de monitorizaci´ on, automatizaci´ on y control de un hogar inteligente m´as avanzado se deber´ a utilizar la Raspberry Pi 3 Model B. En cuanto al resto de modelos, podemos ver que para la obtenci´on de un rendimiento similar los modelos iniciales A, B, A+, B+, presentaban casi en la totalidad de los casos un consumo superior que los modelos de “bajas prestaciones” actuales, Zero y Zero W.
5.2.
Protocolo MQTT.
MQTT (Message Queue Telemetry Transport) [39] es un protocolo de conectividad m´ aquina a m´ aquina (M2M), utilizado en “Internet de las Cosas”. Fue dise˜ nado como un transporte de mensajer´ıa basado en publicaci´on/suscripci´on, extremadamente ligero y sencillo, utilizado por dispositivos conectados en ubicaciones remotas y a redes con limitaciones de recursos como ancho de banda limitado, alta latencia y no confiables. Una de las principales finalidades era minimizar el ancho de banda necesario para el env´ıo
44
5.2. Protocolo MQTT.
de informaci´ on y los requisitos en recursos necesarios para los dispositivos, sobre todo en aquellos casos que empleen sistemas inal´ambricos, donde una caracter´ıstica de relevancia es la bater´ıa consumida por el dispositivo, debido a la utilizaci´ on de este protocolo. Por ello, MQTT es ideal para aplicaciones m´ oviles dado su bajo consumo, paquetes minimizados y distribuci´on eficiente de la informaci´ on entre los receptores.
Figura 5.4: Logo de MQTT. [39]
El protocolo MQTT permite, a diferentes dispositivos, publicar informaci´ on sobre un tema determinado en un servidor que act´ ua como intermediario entre los publicadores de datos y los consumidores. Una vez que el servidor ha registrado los datos recibidos, este los env´ıa a aquellos clientes que se han suscrito a ese tema concreto. Los “topic” (temas) en MQTT tienen una estructura jer´ arquica, donde los clientes deciden el nivel al que desean suscribirse. Con motivo de la utilizaci´on de esta jerarqu´ıa y modo de operaci´on, este protocolo es una buena alternativa para redes inal´ambricas donde hay restricciones de ancho de banda o conexiones poco fiables. Por ejemplo, para el caso en que la comunicaci´on con un cliente sea interrumpida, el servidor mantendr´ a la informaci´ on y volver´a a ser enviada cuando esta comunicaci´on sea restablecida. MQTT, seg´ un podemos estudiar en [40, 41, 42], fue desarrollado por el Dr. Andy Standford-Clark de IBM y Arlen Nipper de Arcom (actualmente Eurotech) en el a˜ no 1999, para obtener una forma rentable y confiable de conectar diferentes dispositivos de monitorizaci´on utilizados en la industria petrolera cuyos servidores estaban en ubicaciones diferentes. El motivo del desarrollo de este protocolo fue desafiarlos a enviar datos desde los sensores de los oleoductos a sistemas SCADA ubicados en lugares alejados. Por ello, decidieron dise˜ nar una topolog´ıa de comunicaci´on publicaci´on/suscripci´on basada en el modelo T/IP. En un principio era un protocolo asociado a IBM, pero actualmente se trata de un protocolo abierto y desde 2013 est´a en proceso de normalizaci´on supervisado por la Organizaci´on para el Avance de Est´andares de Informaci´ on Estructurada (OASIS, Organization for the Advancement of Structured Information Standards).
Tecnolog´ıas y herramientas utilizadas.
45
El protocolo MQTT posee puertos T/IP estandarizados para poder utilizarlo. El 1883 est´ a reservado con IANA (Internet Assigned Numbers Authority) para su uso b´ asico, y, por otro lado, tiene registrado el puerto 8883 para los casos de comunicaciones seguras mediante TLS/SSL. El empleo de este protocolo para realizar el cifrado de los datos supone una sobrecarga significativa de la red, por ello, puede que en algunos casos no se desee la utilizaci´ on de esta alternativa de MQTT; puesto que el protocolo se dise˜ n´o principalmente, como ya se ha mencionado anteriormente, para dispositivos con restricci´ on de recursos.
Figura 5.5: Funcionamiento de cada elemento de MQTT.[43]
El servidor puede gestionar una o varias comunicaciones con uno o m´ ultiples clientes de manera simult´ anea. Una comunicaci´on MQTT puede dividirse en las siguientes etapas: conexi´on, autenticaci´on, suscripci´on, anulaci´on de suscripci´ on, publicaci´ on y desconexi´on. En la etapa de conexi´ on, un cliente intenta establecer un enlace con un servidor o intermediario del protocolo MQTT. Posteriormente, se inicia la negociaci´ on de certificados, para el caso de MQTT seguro. En caso de optar por esta opci´ on del protocolo, la autenticaci´on del cliente se realizar´a de manera segura con SSL/TLS. Por el contrario, el proceso de autenticaci´on se realizar´ a en texto plano con la secuencia de paquetes CONNECT/CONNACK. Cabe destacar que algunos br´oker est´an configurados de tal forma que aceptan comunicaciones de clientes an´onimos. Durante la comunicaci´ on entre clientes y br´oker (servidor), el primero, puede realizar la suscripci´ on a un “topic” o tema determinado, para ello se
46
5.2. Protocolo MQTT.
utilizar´ an la pareja de mensajes SUBSCRIBE/SUBACK. La estructura de los “topics” es jer´ arquica, separando con el car´acter “/” los niveles tem´aticos. De esta forma, se simplifica de manera considerable la posibilidad de que un cliente se suscriba a un grupo de temas de su inter´es, mediante la utilizaci´ on de algunos caracteres especiales. As´ı, por ejemplo, se puede utilizar en aplicaciones dom´ oticas y separar los diferentes sensores en diferentes temas y un receptor o int´erprete de los datos de los sensores se subscriba a un sub´ arbol de “topics” de la siguiente forma: /casa/sal´ on/sensores/# (se utiliza para recibir la informaci´on de todos los sensores), en lugar de definir los siguientes “topics” para el mismo cliente: /casa/sal´ on/sensores/temperatura y /casa/sal´ on/sensores/humedad (se tiene un tema para el sensor de temperatura y otro para el sensor de humedad).
Figura 5.6: Comunicaci´on establecida entre un cliente y un br´oker.[44]
La utilizaci´ on de estas cadenas de caracteres como “topics” tambi´en es necesaria para realizar la anulaci´on de la suscripci´on, pero en este caso se realizar´ıa intercambiando con el servidor la dupla de mensajes UNSUBSCRIBE/UNSUBACK. La acci´ on de publicaci´on se estudiar´a m´as adelante, puesto que se pueden diferenciar varios casos, teniendo en cuenta los diferentes niveles de calidad de servicio definidos en el protocolo. Una opci´ on bastante interesante, que tiene en cuenta el protocolo, es la comprobaci´ on de la conexi´on entre el cliente y el br´oker, con la finalidad de mantener la conexi´ on activa y asegurar una conexi´on T entre los extremos. Esta verificaci´ on consiste en hacer ping al servidor mediante el env´ıo de la secuencia de paquetes PINGREQ/PINGRESP.
Tecnolog´ıas y herramientas utilizadas.
47
La u ´ltima alternativa que posee el cliente en la comunicaci´on con el br´oker consta del cierre de la conexi´on, para lo cual realizar´a el env´ıo de un mensaje DISCONNECT y posteriormente finalizar´a el enlace establecido. Los mensajes de comunicaci´ on del protocolo MQTT poseen una peque˜ na huella de c´ odigo, y cada uno de ellos est´a compuesto por un encabezado fijo, 2 bytes; un encabezado variable, utilizado solo en algunos de los mensajes, y una carga u ´til o payload limitada a 256 MB de informaci´on. Adem´as, en todos los mensajes se informar´a del nivel de calidad de servicios (QoS). (V´ease figura 5.7)
(a) Paquete de control MQTT.
(b) Estructura paquete de control de MQTT.
Figura 5.7: Estructura paquete de control de MQTT. [42]
MQTT reconoce tres nivele diferentes de calidad de servicio, los cuales son utilizados para gestionar de manera ´optima la comunicaci´on, en funci´on de la aplicaci´ on en que se utilice. Se puede destacar que los niveles superiores de calidad de servicio permiten comunicaciones m´as confiables, pero esto tambi´en conlleva una latencia mayor y unos requisitos de ancho de banda superiores. A continuaci´ on, se estudiar´ an cada uno de los niveles de QoS en el proceso de publicaci´ on de datos. En primer lugar, tenemos el nivel m´as b´asico, recibe el nombre de “como m´ aximo una vez” (QoS0) o servicio no reconocido (figura 5.8a), se env´ıa una secuencia de paquetes PUBLISH al br´oker para un tema determinado y este lo reenv´ıa una sola vez hacia los clientes suscritos a dicho “topic”. Por lo tanto, no se hace uso de ning´ un mecanismo que compruebe su correcta recepci´ on y el servidor no mantiene los mensajes en su memoria.
48
5.2. Protocolo MQTT.
El segundo nivel de calidad de servicio es denominado “al menos una vez” (QoS1) o servicio reconocido (figura 5.8b). En este caso se utiliza una secuencia de mensajes PUBLISH/PUBACK entre el publicador y el br´oker y entre este y los diferentes suscriptores. Adem´as, se utilizar´a un acuse de recibo para indicar la correcta recepci´on de la informaci´on. De este modo, si no se recibe este acuse, el br´oker volver´a a enviar el contenido original de la publicaci´ on; dando lugar, como inconveniente, a una posible duplicidad de la informaci´ on. Por u ´ltimo, se tiene el tercer nivel de calidad de servicio, conocido como “exactamente una vez” (QoS2) o servicio asegurado (figura 5.8c). La entrega de la informaci´ on se realiza en dos duplas de mensajes. La primera de ellas, est´ a compuesta por los paquetes PUBLISH/PUBREC y la segunda por PUBREL/PUBCOMP. Mediante este mecanismo se asegura que la informaci´on ser´ a enviada solamente una vez independientemente del n´ umero de intentos realizados.
(a) Calidad de servicio nivel 0 (QoS0).
(b) Calidad de servicio nivel 1 (QoS1).
Tecnolog´ıas y herramientas utilizadas.
49
(c) Calidad de servicio nivel 2 (QoS2).
Figura 5.8: Publicaci´ on de datos en funci´on de QoS. [44]
5.3.
Mosquitto.
Seg´ un se puede estudiar en [45], Mosquitto es un br´oker de c´odigo abierto que implementa la versi´ on 3.1.1 del protocolo MQTT. Esto lo convierte en un potencial servidor de este protocolo para implementaciones de “Internet de las Cosas” en sistema con recursos limitados. Est´a destinado para su utilizaci´ on en cualquier situaci´ on en la que exista la necesidad de mensajer´ıa ligera, tanto en m´ aquinas muy potentes como en sistemas empotrados y de baja potencia. Normalmente, la implementaci´on actual de Mosquitto tiene un ejecutable que pesa en torno a 120 kB y consume aproximadamente 3MB de RAM si se conectan 1000 clientes simult´ aneamente. Cabe destacar que esta implementaci´ on del protocolo MQTT es capaz de establecer conexiones con otros servidores de MQTT e incluso otras instancias de Mosquitto mediante la utilizaci´ on de un “bridge” implementado, adem´as de otros clientes MQTT. Esto permite la utilizaci´ on de Mosquitto para la creaci´on de redes de servidores MQTT, consiguiendo una conectividad total entre diferentes puntos de este tipo de redes. [46]. El proyecto Mosquitto [47] es miembro de la Fundaci´on Eclipse y consta de tres partes fundamentales y bien diferenciadas:
50
5.4. OpenHAB. • El servidor Mosquitto. • El cliente “mosquitto pub”, utilizado para realizar publicaciones en el servidor y el cliente “mosquitto sub”, empleado para poder suscribirse a un tema, por lo tanto, son los m´etodos de comunicaci´on de los clientes con el br´ oker del protocolo. • Una biblioteca cliente de MQTT escrita en C, con un contenedor en C++.
Mosquitto es un proyecto utilizado en otras herramientas de c´odigo abierto, como puede ser OpenHAB, para la automatizaci´on dom´otica, como veremos a continuaci´ on, y OwnTracks, proyecto para el rastreo de la localizaci´on personal. Adem´ as de este tipo de productos, ha sido integrado en otros de tipo comercial.
5.4.
OpenHAB.
OpenHAB [48] es un software, desarrollado en Java y basado en Eclipse SmartHome, utilizado para la integraci´on de diferentes sistemas y tecnolog´ıas relacionadas con el ´ambito dom´otico. Permite utilizar reglas de automatizaci´ on y dispone de diferentes interfaces para s uniformes. Esto hace que OpenHAB est´e dise˜ nado para ser neutral, tanto en t´erminos software como hardware, para integrar una gran cantidad de tecnolog´ıas dom´ oticas diferentes en una sola. Puede ser ejecutado en cualquier dispositivo que soporte una JVM (Java Virtual Machine) y posee un potente motor de reglas para la automatizaci´on del centro dom´otico instalado, adem´as de disponer de mecanismos de persistencia para poder realizar gr´aficos y an´alisis de algunos sensores instalados. OpenHAB es una soluci´on de software libre, posee interfaces web accesibles desde cualquier dispositivo con navegador y, adem´as, presenta una aplicaci´ on nativa para sistema iOS y Android. Cabe destacar que es f´acilmente extensible mediante la integraci´on con nuevos dispositivos y sistemas, esto es posible gracias a diferentes APIs desarrolladas.
Tecnolog´ıas y herramientas utilizadas.
51
Figura 5.9: Logo OpenHAB. [48]
Este software es altamente flexible y personalizable.. Esto conlleva un ‘coste’, en t´erminos de tiempo del , el cual deber´a de aprender los conceptos b´ asicos de funcionamiento y configuraci´on para poder aplicarlo a sus propias necesidades. La creaci´ on de un sistema OpenHAB est´a destinado a un p´ ublico que tenga algunos conocimientos m´as avanzados, pero una vez est´e instalado y configurado, el resto de de la familia podr´a hacer uso de este sistema de manera sencilla e intuitiva. OpenHAB es muy estable y posee aplicaciones para todos los dispositivos de los s. En el mercado hay multitud de soluciones dom´oticas y de Internet de las Cosas, pero, estas son u ´tiles en las situaciones problem´aticas marcadas por el fabricante. En el instante cuando los clientes de dichas alternativas presentan otros deseos ‘dom´ oticos’, no son compatibles y es necesaria la utilizaci´on de otro sistema. Ah´ı, entra en juego OpenHAB, sirviendo como integrador de sistemas y minimizando esa brecha de deseos de automatizaci´on del hogar y de comunicaci´ on entre dispositivos sin satisfacer. Debido a esta filosof´ıa de funcionamiento, tenemos que OpenHAB es la apuesta m´ as acertada en una instalaci´on para obtener una Smart Home de futuro y teniendo en cuenta que la privacidad de los datos de los s es cada vez m´ as importante, ser´ an ellos mismo los que gestionen el env´ıo, o no, de esta informaci´ on hacia el exterior. Esta soluci´on puede ser utilizada sin remoto, por lo que todos los datos recogidos por los diferentes elementos inteligentes, que compongan el sistema dom´otico, se mantendr´an seguros dentro de la intranet del hogar. OpenHAB no es una alternativa del sector del Internet de las Cosas que intente desbancar a otras soluciones, su pretensi´on consiste en mejorar el funcionamiento y la integraci´ on entre los diferentes sistemas utilizados en el centro inteligente instalado en una vivienda. Adem´as, este software utiliza una abstracci´ on de los ‘objetos’ configurados, esto quiere decir que pueden ser tanto dispositivos f´ısicos como ‘virtuales’ (servicio web), para as´ı tener la opci´on de modificar u ´nicamente la definici´on de los mismos, sin necesidad de realizar cambios en las diferentes reglas de automatizaci´on, persistencia, interfaces de , etc.
52
5.5. ESP8266.
OpenHAB es un software basado en Eclipse SmartHome. Seg´ un se define en [49], es un framework de desarrollo, no una soluci´on lista para la utilizaci´ on de los s. Ofrece un gran conjunto de caracter´ısticas para elegir, y poder dise˜ nar un sistema inteligente espec´ıfico para la persona que lo utilice. Se trata de un software modular que dispone de multitud de combinaciones y altamente extensible debido a esta propiedad. Eclipse SmartHome es capaz de diferenciar entre la parte f´ısica y funcional del sistema. La parte f´ısica es necesaria para la instalaci´on, configuraci´on, resoluci´ on de problemas. . . , mientras que la parte funcional implica aquella informaci´ on que utilizan las diferentes aplicaciones, como las distintas interfaces de disponibles y la l´ogica de automatizaci´on implementada. En [50] se recogen algunos de los conceptos m´as relevantes en relaci´on con este software. Las ‘Cosas’ (Things) son entidades que pueden ser a˜ nadidas al sistema f´ısicamente y potencialmente pueden proporcionar varias funcionalidades a la vez. Es importante tener en cuenta que los ‘Cosas’ no tienen por qu´e ser dispositivos f´ısicos, tambi´en podr´ıa tratarse de alg´ un servicio web o cualquier otra fuente de informaci´on y funcionalidades. Las ’Cosas’ son capaces de proveer alguna funcionalidad gracias a un conjunto de ‘Canales’ (Channel). Estos pueden ser ‘pasivos’ y pueden ser considerados como la declaraci´ on de aquello que una ‘Cosa’ puede ofrecer. En una configuraci´on individual, los ‘Canales’ activos son utilizados a trav´es de ‘Objetos’ (Items). Los ‘Objetos’ representan la funcionalidad que puede ser utilizada por una aplicaci´ on, interfaz de o regla de automatizaci´on. Los ‘Objetos’ pueden tener estados y son capaces de recibir comandos. La uni´on entre las ‘Cosas’ y los ‘Objetos’ son los ‘Enlaces’, que no es m´as que una asociaci´on entre el ‘Canal’ de una ‘Cosa’ y un ‘Objeto’. Los ‘Canales’ se pueden vincular a varios ‘Objetos’ y estos a su vez pueden ser enlazados a varios ‘Canales’.
5.5.
ESP8266.
El ESP8266E-X [51] de Espressif ofrece una soluci´on completa de wifi en un SoC altamente integrado, desarrollado para satisfacer las diferentes necesidades de sus s en implementaciones de eficiencia energ´etica, dise˜ nos compactos y altamente relacionados con Internet de las Cosas.
Tecnolog´ıas y herramientas utilizadas.
53
Las aplicaciones ejecutadas en el ESP8266E-X se inician autom´aticamente cuando se le conecta una fuente de alimentaci´on, son cargadas en la memoria flash. Adem´ as, la utilizaci´on de una memoria cach´e integrada, de alta velocidad, proporciona un aumento de rendimiento del sistema. Una caracter´ıstica importante presente en todas las versiones de este m´odulo es la posibilidad de conectarle sensores externos u otros dispositivos mediante los GPIOs. Al tratarse de un dispositivo de peque˜ nas dimensiones, se consigue una minimizaci´ on de tama˜ no de las PCBs dise˜ nadas. En la tabla 5.1 se recogen algunos par´ametros referentes a la conexi´on wifi, hardware y software, del m´ odulo ESP8266E-X. Caracter´ısticas
Objetos Est´ andares Protocolos Rango de frecuencias Potencia transmitida
Wi-Fi
Sensibilidad recibida
Antena
U
Interfaces perif´ericas Hardware
Voltaje de operaci´on Corriente de operaci´on Rango de temperatura de operaci´on
Par´ametros FCC/ CE/ TELEC/ SRRC 802.11 b/g/n/e/i 2.4G – 2.5G (2400M – 2483.5M) 802.11 b: +20 dBm 802.11 g: +17 dBm 802.11 n: +14 dBm 802.11 b: -91 dbm (11Mbps) 802.11 g: -75 dbm (54Mbps) 802.11 n: -72 dbm (MCS7) Rastreo PCB, Externa, Conector IPEX, Chip cer´amico Microcontrolador Tensilica L106 32-bit. Control remoto UART/ SDIO/ SPI/ I2C/ I2S/ IR 2.5V – 3.6V Valor medio: 80mA -40o C – 125o C
54
5.5. ESP8266.
Caracter´ısticas
Objetos Rango de temperatura de almacenamiento Tama˜ no del paquete Interfaz externa Modos de Wi-Fi Seguridad soportada Encriptaci´on soportada Actualizaci´on de firmware
Software
Desarrollo software
Protocolos de red
Configuraci´on de
Par´ametros -40o C – 125o C Pin-QFN32 (5 mm x 5 mm) Estaci´on/SoftAP/SoftAP + Estaci´on WPA/WPA2 WEP/TKIP/AES Descarga UART / OTA (a trav´es de la red) Soporta Cloud Server Desarrollo / Firmware y SDK para la programaci´on r´apida en el chip IPv4, T/ UDP/ HTTP/ FTP Conjunto de instrucciones AT, Cloud Server, aplicaci´on Android/iOS
Tabla 5.1: Caracter´ısticas t´ecnicas m´odulo ESP8266E-X. [51] El m´ odulo es utilizado principalmente para proyectos relacionados con Internet de las Cosas, por ello, algunas de sus aplicaciones m´as frecuentes son: automatizaci´ on del hogar, redes de sensores, control de luces, control inal´ ambrico industrial, c´amaras IP, dispositivos wearables, sistemas de posicionamiento wifi (tramas beacons), etc. El chip ESP8266, en [52], se presenta mediante diferentes m´odulos ESPNN, los cuales posee algunas diferencias, como puede ser la distribuci´on y n´ umero de pines GPIO, el valor de resistencias limitadoras de corriente para proteger algunos de los componentes de los que est´an compuestos, etc.
Tecnolog´ıas y herramientas utilizadas.
55
Este chip wifi tambi´en puede encontrarse en multitud de placas de desarrollo como pueden ser NodeMCU, Wemos D1, ESPToy. Posteriormente se analizar´ a algunos detalles de estas placas.
5.5.1.
NodeMCU.
NodeMCU ([53]) es un kit de desarrollo basado en el chip ESP8266, integra diez pines GPIO, los cuales pueden ser PWM, IIC, Serial y ADC. Es utilizado para conectar elementos inteligentes con la filosof´ıa de “Internet de las Cosas” y mediante el empleo de un firmware de c´odigo abierto. Las caracter´ısticas m´ as relevantes de este kit de desarrollo son que es abierto, interactivo, programable, de bajo coste, simple, inteligente e incorpora conectividad wifi. Con ´el se permite control de hardware IO mediante una API avanzada, consiguiendo una reducci´on del trabajo de configuraci´on y manipulaci´ on hardware mediante lenguaje Arduino. Adem´as, posee una API orientada a eventos para aplicaciones de red, facilitando la ejecuci´on de c´odigo en una MCU de peque˜ nas dimensiones y mejorando la velocidad de desarrollo de aplicaciones IoT. Multitud de empresas est´ an desarrollando este tipo de placas basadas en el chip ESP8266, adem´ as, se disponen de dos versiones oficiales de esta NodeMCU, como podemos analizar en [54]. En primer lugar, tenemos la NodeMCU v0.9, la cual est´a compuesta por un m´odulo ESP-12 y 4 MB de memoria flash, 10 pines GPIO. El mayor inconveniente es debido a su forma, que la hace dif´ıcil de utilizar en las protoboards.
Figura 5.10: NodeMCU devkit v0.9 y pinout. [54]
56
5.5. ESP8266.
En segundo lugar, tenemos la NodeMCU v1, presenta una actualizaci´on del chip WiFi utilizado de un ESP-12 a un ESP-12E. Algunos de los pines de la versi´ on anterior han sido modificados, y otros reservados, se han utilizado para nuevas funciones.
Figura 5.11: NodeMCU devkit v1.0 y pinout. [54]
En el mercado actual tenemos algunas alternativas interesantes a esta placa de desarrollo, muchas de ellas utilizan versiones similares del chip ESP8266, como pueden ser: Sparkfun ESP8266 Thing, Adafruit HUZZAH ESP8266 Breakout (ambas son alternativas algo m´as caras que NodeMCU) o WeMos D1, que analizaremos a continuaci´on.
5.5.2.
Wemos D1.
WeMos D1 ([54]), en sus diferentes variantes, resulta ser la alternativa m´ as factible a NodeMCU, en cuanto a dimensiones, es pr´acticamente igual en ancho, pero es casi un tercio m´as corta. A diferencia de NodeMCU, funciona con el m´ odulo ESP8266-EX y posee nueve pines GPIO, que la ponen en buen lugar para aquel p´ ublico cuyo objetivo es desarrollar aplicaciones IoT. Cabe destacar que es compatible con Arduino y NodeMCU, aunque, el u ´nico inconveniente son los pines, que deben ser ser soldados manualmente por el . • WeMos D1 mini Lite: [55] es una placa de desarrollo WiFi basada en el chip ESP8285 y con 1 MB de memoria flash. Posee once entradas digitales que soportan interrupciones, PWM, I2C y conexi´on serial (excepto el pin D0) y una entrada anal´ogica con 3.2 V m´aximo.
Tecnolog´ıas y herramientas utilizadas.
57
Figura 5.12: WeMos D1 mini Lite. [55] • WeMos D1 mini: [56] es una placa de desarrollo al igual que la anterior, pero esta est´ a basada en la utilizaci´on del chip ESP8266-EX y 4 MB de memoria flash. Dispone de la misma distribuci´on de pines GPIO que la WeMos D1 mini Lite.
Figura 5.13: WeMos D1 mini. [56] • WeMos D1 mini Pro: [57] se trata de una miniplaca WiFi con 16 MB de memoria flash, un conector de antena externo y una antena cer´amica integrada, al igual que su hermano menor el WeMos D1 mini, est´a basado en la utilizaci´ on del chip ESP8266-EX. Posee la misma asignaci´ on de pines GPIO que las anteriores, pero, adem´as, el puerto USB utiliza el chip 2104 para conexi´on USB-a-UART.
Figura 5.14: WeMos D1 mini Pro. [57]
58
5.5.3.
5.6. Arduino IDE.
ESPToy.
ESPToy [58] es un kit de desarrollo basado en la utilizaci´on del chip ESP8266, al igual que los anteriores. Este viene de f´abrica con el firmware compatible con Arduino y un script de prueba cargado en memoria. Anteriormente utilizaba el firmware de Lua, pero se ha comprobado que la utilizaci´ on del lenguaje de programaci´on de Arduino es m´as recomendable debido a su flexibilidad y eficiencia de memoria. Esta placa de desarrollo contiene un m´odulo ESP-12E WiFi, un led RGB un pulsador; el cual est´a cableado al pin GPIO0, utilizado para cargar el arranque del sistema y puede ser utilizado como un interruptor de prop´osito general, puerto micro USB con chip serial CH340G, bater´ıa LiPo de 3.7 V integrada con chip de carga TP4054 y led indicador. Posee conectores adicionales para enlazar componentes externos y poder realizar pruebas de conexi´ on con los pines GPIO.
5.6.
Arduino IDE.
Arduino IDE [59] es una herramienta de c´odigo abierto y f´acil de usar, proporcionada por la empresa desarrolladora de la placa Arduino. Esta herramienta es utilizada para crear c´odigo y poder cargarlo directamente en la placa deseada. Este entorno de desarrollo integrado (IDE) est´a escrito en lenguaje Java y basado en procesamiento y otros softwares de c´odigo abierto. Adem´ as de esta herramienta, Arduino proporciona un editor de c´odigo en l´ınea, con el que se puede crear y guardar los sketchs creados en la nube. Estas herramientas son utilizadas para programar cualquier placa de Arduino o incluso para otras placas de desarrollo compatibles con este entorno. Para saber c´ omo funcionar con esta herramienta, en [60], se explica el proceso paso a paso de descarga y configuraci´on del entorno para una placa determinada. El primer paso consiste en realizar la descarga del entorno de desarrollo integrado, para ello, en la web oficial de Arduino tendremos la opci´ on de descarga o el entorno en l´ınea. Para obtener la herramienta deberemos de actuar de diferente forma en funci´on del sistema operativo utilizado. Para s del sistema Windows hay disponibles dos opciones, un instalador (opci´ on recomendada) y un paquete ZIP.
Tecnolog´ıas y herramientas utilizadas.
59
Una vez se haya realizado la instalaci´on de la herramienta queda comenzar con la configuraci´ on, lo primero que se deber´a de hacer es conectar la placa Arduino (o similar) al PC de desarrollo y configurar las opciones necesarias para que el programa la reconozca correctamente. Inicialmente lanzaremos un ejemplo incluido en el entorno, seleccionaremos en el men´ u “Herramientas.el modelo de placa utilizada y, posteriormente, deberemos de seleccionar el puerto serie asignado por el sistema a la comunicaci´on serie y cargaremos el programa de prueba elegido.
5.7.
Homekit.
Homekit [61] es una aplicaci´ on propietaria de Apple, disponible en todos sus dispositivos iPhone e iPad, con ella se consigue controlar de forma segura todos los rios compatibles con esta. Adem´as, es completamente funcional mediante Siri, el asistente personal de Apple, por lo que hace mucho m´ as sencilla la interacci´ on con los diferentes dispositivos realizando preguntas o peticiones a Siri. Homekit busca facilitar la configuraci´on y control de todos los dispositivos inteligentes, aun siendo de diferentes marcas desde una misma aplicaci´ on. En [62] se puede analizar la lista completa de elementos compatibles con esta aplicaci´ on. La aplicaci´ on Home, permite agrupar los diferentes dispositivos y ordenarlos por estancias del hogar. De este modo, si por ejemplo se tiene una serie de luces en el sal´ on, podemos pedirle a Siri que las apague simplemente dici´endole “Apaga las luces del sal´on”, sin necesidad de ir nombr´andoselas una a una. Adem´ as, con la tecnolog´ıa 3D Touch presente en algunos dispositivos de la marca se puede interaccionar con estos elementos.
Figura 5.15: Diferentes estancias utilizadas en aplicaci´on Home. [61]
60
5.8. OpenVPN.
Otra funcionalidad interesante es la creaci´on de ambientes, que consiste en una serie de combinaciones de diferentes sensores o actuadores instalados en el hogar. Por ejemplo, el ambiente “Salir de casa” provocar´ıa el apagado de todas las luces conectadas, cerrar´ıa las puertas y controlar´ıa el termostato hasta el nivel programado. En la web oficial de Apple podemos ver otros ambientes de ejemplo. Al igual que se pueden crear diferentes ambientes, tambi´en se programan acciones en funci´ on de la hora del d´ıa, de donde nos encontremos, de eventos concretos detectados por los sensores, pero, como se mencionar´a un poco m´ as adelante, para hacer esto posible ser´a necesaria la utilizaci´on de otro dispositivo de la marca, el Apple TV. Como ya se ha mencionado anteriormente, se tiene la opci´on de utilizar Siri mediante comandos de voz para que act´ ue sobre los dispositivos inteligentes. Cabe destacar que todo esto es posible en el caso de estar dentro de la misma red local en donde se encuentren los elementos, aunque esto puede ser resuelto, seg´ un Apple, mediante el uso del Apple TV. Este dispositivo actuar´ıa de puente entre los diferentes rios y el iPhone o iPad en aquellas ocasiones en las que se est´e fuera del hogar.
5.8.
OpenVPN.
OpenVPN [63] es un software de c´odigo abierto para la creaci´on de redes virtuales sobre las que proporcionar servicios de comunicaci´on segura, confiable y escalable. Utilizado no solo para soportar los requerimientos de las redes VPN tradicionales sino tambi´en para las redes futuras, seg´ un se explica en [64].
Figura 5.16: Logo OpenVPN. [64]
En [65] se explica que OpenVPN es una herramienta de tunelizaci´on robusta y altamente flexible utilizada para encapsular de forma segura redes IP mediante el uso de un u ´nico puerto T/UDP. Este software permite una amplia gama de configuraciones y puede ser empleado para la creaci´on de
Tecnolog´ıas y herramientas utilizadas.
61
una granja de servidores VPN escalables y con balanceo de carga, utilizando una o m´ as m´ aquinas para manejar miles de conexiones din´amicas de clientes VPN. Es capaz de utilizar todas las funciones de encriptaci´on, autenticaci´on y certificaci´ on de la biblioteca OpenSSL para asegurar el tr´afico cursado por la red interna. Permite usar cualquier tama˜ no de clave compatible con OpenSSL, encriptaci´ on convencional o cifrado de clave p´ ublica basada en certificados, claves est´ aticas, precompartidas o intercambio din´amico de claves basado en TLS. Es compatible con t´ uneles donde los puntos p´ ublicos son din´amicos, configur´andolos con DDNS y t´ uneles desplegados sobre redes NAT. Tambi´en permite la creaci´ on de t´ uneles a trav´es de firewall sin necesidad de creaci´on de reglas determinadas. El modelo de seguridad que emplea se basa en el protocolo SSL (como se ha mencionado anteriormente, utilizando las librer´ıas de OpenSSL) que es el est´ andar de comunicaciones seguras a trav´es de Internet. OpenVPN implementa la extensi´ on de seguridad de las capas 2 y 3 del modelo OSI mediante el uso del protocolo SSL/TLS, con los que soporta autenticaci´on de clientes basados en certificados, tarjetas inteligentes y/o autenticaci´on de doble factor. Permite, de este modo, pol´ıticas de control de espec´ıficas para grupos o s determinados. OpenVPN utiliza el protocolo TLS para realizar la criptograf´ıa de las comunicaciones, por el simple hecho de tratarse de la u ´ltima versi´on de la familia TLS/SSL. Se obtiene as´ı, un mayor fortalecimiento de la encriptaci´on necesaria para garantizar la seguridad en las comunicaciones realizadas a trav´es de los t´ uneles creados con la ayuda de este software. Hay que destacar que OpenVPN, al tratarse de VPN mediante SSL, no es compatible con otros protocolos como IPSec, L2TP o PPTP. Cada cual presenta sus ventajas e inconvenientes, la principal ventaja, por la que se utiliza OpenVPN en un despliegue de red, es la posibilidad de portabilidad, la facilidad de la configuraci´ on y la compatibilidad con redes NAT y DDNS.
5.9.
ThingSpeak.
ThingSpeak [66] es una plataforma de an´alisis de datos IoT que permite agregar, visualizar y analizar flujos de informaci´on en tiempo real, enviando a la nube los datos recogidos por diferentes sensores. ThingSpeak, pues-
62
5.9. ThingSpeak.
to que fue creado por MathWorks, proporciona la capacidad de ejecutar c´ odigo MATLAB en su servicio. De este modo, se facilita el an´alisis y procesamiento en l´ınea de los datos. Algunas de las capacidades clave que provee ThingSpeak son: • Configuraci´ on sencilla de dispositivos para enviar datos a los servidores de ThingSpeak utilizando protocolos comunes en IoT. • Visualizaci´ on de los datos recogidos por los diferentes sensores en tiempo real. • Agregaci´ on de datos a petici´on de fuentes de terceros. • Utilizaci´ on de MATLAB para analizar la informaci´on recogida. • An´ alisis IoT autom´aticos bas´andose en horarios o eventos determinados. • Prototipado y construcci´on de sistemas IoT sin necesidad de configurar servidores o desarrollar software web. • Actuaci´ on autom´ atica sobre los datos y comunicaciones mediante el uso de herramientas de terceros como Twitter.
La funci´ on principal de ThingSpeak es la recolecci´on de datos de diferentes sensores, enviando estos a una nube de manera privada. De esta forma, los sensores desplegados en los diferentes ´ambitos de nuestra vida podr´an ser controlados y/o analizados desde un mismo lugar. ThingSpeak dispone de canales de datos privados, que solo podr´an ser accesibles por el propietario del canal, o p´ ublicos, donde compartir los datos con otros s de este servicio. Una vez los datos hayan sido recogidos en un canal, pueden ser analizados y visualizados, se pueden calcular nuevos datos a partir de ellos o se puede interactuar con diferentes medios sociales, servicios web u otros dispositivos. Los an´ alisis de datos se pueden realizar mediante las herramientas anal´ıticas en l´ınea, con las que se podr´ıan descubrir diferentes patrones o tendencias. Adicionalmente, se pueden visualizar en parcelas, gr´aficos o calibres. Por u ´ltimo, se puede actuar sobre los diferentes sistemas utilizados mediante acciones en algunos medios sociales como Twitter; con el que se pueden automatizar algunas acciones, como recibir un tuit cuando la temperatura recogida por un sensor concreto supere un umbral. Adem´as, permite la
Tecnolog´ıas y herramientas utilizadas.
63
interacci´ on entre diferentes dispositivos y, de esta forma, cuando un sensor recoja unos datos determinados se puede automatizar una acci´on en otro dispositivo, como un motor.
5.10.
Fritzing.
Fritzing [67] es una iniciativa de software libre que hace de la electr´onica un mundo m´ as accesible, como si de material creativo se tratase, para cualquier persona que tenga inter´es en esta rama del conocimiento. Se proporciona una herramienta software, una comunidad web y diferentes servicios guiados por el esp´ıritu de Arduino y similares. Para conseguir esto, buscan el fomento de un ecosistema creativo que permita a los s documentar y compartir sus prototipos y/o proyectos. De este modo, tambi´en se consigue acercar la electr´ onica a la ense˜ nanza y facilitar el desarrollo y fabricaci´on profesional de placas PCBs. En la web oficial de esta herramienta se pueden encontrar varios tutoriales que exponen los conocimientos necesarios para el prototipado de los circuitos electr´ onicos con diferentes componentes, dise˜ no y producci´on de PCBs, creaci´ on de nuevos elementos electr´onicos para nuestros propios proyectos. Adem´ as, en las u ´ltimas versiones de Fritzing, podemos encontrar, aunque de manera experimental, un apartado de programaci´on de c´odigo.
Cap´ıtulo 6
Instalaci´ on y Configuraci´ on. Este cap´ıtulo se compone de un recopilatorio de los pasos necesarios para la instalaci´ on de los diferentes servicios y/o herramientas utilizadas en este proyecto. Comenzando con la descarga, instalaci´on y configuraci´on inicial del sistema Raspbian y prosiguiendo con la instalaci´on y configuraci´on del br´oker MQTT utilizado, en este caso, se trata de Mosquitto y OpenHAB. Para finalizar, se tratar´ a de explicar la configuraci´on inicial necesaria para la utilizaci´ on de Arduino IDE en la programaci´on de la placa de desarrollo NodeMCU, comentar el sketch para el control de los sensores y actuadores integrados en el sistema, y describir el env´ıo de datos mediante la comunicaci´on MQTT con OpenHAB. Los pasos descritos a continuaci´on se pueden realizar en cualquier modelo de Raspberry. En este proyecto se har´a uso de una Raspberry Pi 3 y una Raspberry Pi Zero W.
6.1.
Configuraci´ on Raspberry Pi
En este primer apartado se llevar´a a cabo una explicaci´on de los pasos necesarios para la descarga y configuraci´on de Raspbian en la Raspberry deseada. Se describir´ a la configuraci´on inicial de las interfaces necesarias con la herramienta ‘raspi-config’ y las interfaces de red, para las cuales utilizaremos una IP fija, necesaria en caso de los servicios desplegados. Antes de comenzar, deberemos de tener descargado el sistema Raspbian, en caso contrario, podemos encontrar la versi´on m´as reciente en [68], tanto aquella con interfaz gr´ afica como la que dispone u ´nicamente de l´ınea de 65
66
6.1. Configuraci´ on Raspberry Pi
comandos. Para montar el sistema operativo en la tarjeta SD, necesitaremos la herramienta “win32diskmanager” en un ordenador con sistema Windows. Su utilizaci´ on es sencilla, basta con seleccionar el archivo con la imagen de Raspbian y la unidad extra´ıble correcta, clicar en ‘Write’ y esperar a que el proceso termine. En el caso de que la imagen se haya montado satisfactoriamente, deberemos de observar una nueva ventana que indica ‘Write Successful’. Una vez hayamos realizado estos pasos, podremos proceder con el primer inicio de nuestra Raspberry con Raspbian, para ello, tendremos que hacer uso de un monitor mediante una conexi´on RCA o HDMI y de un rat´on USB, con los cuales configuraremos las conexiones y/o interfaces necesarias para poder conectarnos mediante SSH y VNC. Para esto deberemos de ir al men´ u de opciones (bot´on con el s´ımbolo de Raspberry) → “Preferencias” → “Configuraci´on de Raspberry Pi” (v´ease figura 6.1a). En la ventana emergente que aparece debemos ir a la pesta˜ na de “Interfaces” e indicar que queremos activar las opciones de SSH y VNC (v´ease figura 6.1b), para poder acceder de manera remota a la Raspberry y configurarla de forma m´as sencilla.
(a) Configuraci´on Raspberry Pi.
Instalaci´ on y Configuraci´ on.
67
(b) Elecci´ on de interfaces a activar.
(c) Configuraci´on del sistema.
Figura 6.1: Configuraci´on inicial de Raspberry Pi.
Adem´ as, en este asistente de configuraci´on podremos modificar el idioma del sistema y del teclado, la zona horaria, la contrase˜ na del , etc. Por otro lado, tendremos que configurar las interfaces de red para asignar una direcci´ on IP fija a la Raspberry Pi. Esta es necesaria para tener a los diferentes servicios desde el resto de dispositivos del proyecto. Para realizar la configuraci´ on deberemos de abrir un terminal y situarnos en el directorio “/etc/network/ ”, cuyo contenido son los ficheros de configuraci´on de las interfaces de red reconocidas por el sistema operativo, el cual recibe el nombre “interfaces”. Para modificarlo deberemos de utilizar el siguiente comando: $ sudo leafpad / etc / network / interfaces
68
6.1. Configuraci´ on Raspberry Pi
Veremos que se abre una nueva ventana, donde nos aparecer´a la configuraci´ on actual de las interfaces de red. Se deber´an elegir aquellas interfaces a las que le asignaremos la direcci´on IP, “eth0 ” es la conexi´on Ethernet y “wlan0 ” es para wifi (utilizando el adaptador interno). En este caso se ha elegido configurar la interfaz “wlan0 ”, para asignarle una direcci´on est´atica deberemos de modificar el fichero indicando las siguientes opciones (v´ease figura 6.2): iface wlan0 inet static address $ < $direccion IP Raspberry$ > $ netmask $ < $mascara de red *$ > $ gateway $ < $direccion IP puerta de enlace$ > $
(a) Comando para configurar interfaces.
(b) Configuraci´on interfaces de red.
Figura 6.2: Configuraci´on de IP est´atica.
Instalaci´ on y Configuraci´ on.
6.2.
69
Instalaci´ on y configuraci´ on de Mosquitto
En este apartado se recogen los pasos necesarios para la descarga e instalaci´on de Mosquitto como br´ oker del protocolo MQTT, as´ı como la configuraci´ on necesaria de esta herramienta, la asignaci´on del puerto a utilizar y la incorporaci´ on de medidas de seguridad a las conexiones con la adici´on de mecanismos de autenticaci´ on. Como gu´ıa de instalaci´on y configuraci´on se han seguido las referencias [69, 70, 71]. En primer lugar, deberemos de a˜ nadir el repositorio oficial de Mosquitto y la clave p´ ublica de este para poder iniciar la descarga sin ning´ un problema. Posteriormente actualizaremos los repositorios utilizados en Raspbian y procederemos a descargar e instalar “mosquitto, mosquitto-client y pythonmosquitto”. Para realizar estos pasos deberemos de ejecutar los siguientes comandos en un terminal: $ $ $ $ $ $ $
curl -O http :// repo . mosquitto . org / debian / mosquitto - repo . gpg . key sudo apt - key add mosquitto - repo . gpg . key rm mosquitto - repo . gpg . key cd / etc / apt / sources . list . d / sudo curl -O http :// repo . mosquitto . org / debian / mosquitto - jessie . list sudo apt - get update sudo apt - get install mosquitto mosquitto - clients python - mosquitto
Si todo el proceso ha concluido satisfactoriamente, deberemos de tener el servidor de mosquitto funcionando y escuchando peticiones MQTT en el puerto por defecto, 1883. Este servidor de MQTT posee un registro de errores en “/var/log/mosquitto/mosquitto.log”, y el archivo de configuraci´on es localizable en “/etc/mosquitto/mosquitto.conf ”. Adem´as, el funcionamiento del servicio se puede comprobar mediante dos comandos: “netstat –an –ip -p”, el cual es una herramienta de l´ınea de comandos que muestra todas las conexiones activas en el sistema, y “sudo systemctl status mosquitto.service”, indica el estado de un servicio, como se puede observar en las figuras 6.3a y 6.3b, respectivamente.
70
6.2. Instalaci´ on y configuraci´ on de Mosquitto
(a) Comprobaci´on de puertos a la escucha con “netstat”.
(b) Comprobaci´on de activaci´on del proceso.
Figura 6.3: M´etodos de comprobaci´on del servidor de MQTT, Mosquitto.
En este punto tendr´ıamos la configuraci´on por defecto para Mosquitto, pero en nuestro caso, tenemos especial inter´es en habilitar el soporte de cifrado SSL/TLS, para lo cual ser´a necesaria la creaci´on de un certificado firmado por una autoridad certificadora y a˜ nadirlo a nuestra instalaci´on. Hay multitud de alternativas para obtener un certificado firmado, tanto oficiales, firmados por Verising, como no oficiales, generados y firmados por nosotros mismos. Para simplificar este procedimiento, en [70] podemos encontrar que JeanPiet Mens ha desarrollado un script que realiza todos los pasos necesarios para la obtenci´ on autom´atica del certificado autofirmado y la configuraci´on
Instalaci´ on y Configuraci´ on.
71
correspondiente. Cabe destacar que los pasos indicados, en esta referencia, no se pueden seguir al pie de la letra y hay que modificar el m´etodo de obtenci´on de la herramienta, puesto que la URL utilizada ha sido modificada. Para obtener este script y poder proseguir con la configuraci´on deberemos de utilizar los siguientes comandos desde el terminal: $ $ $ $ $ $
git clone https :// github . com / owntracks / tools . git cd tools chmod + x mosquitto - setup . sh cd TLS chmod + x generate - CA . sh cd ..
Antes de proceder con la ejecuci´on del script “mosquitto-setup.sh”, deberemos de modificar algunas sentencias del archivo para elegir correctamente las rutas de nuestra instalaci´ on y aquellas donde se guardar´a el certificado, adem´as de indicar el puerto en el que escuchar´a el br´oker de MQTT. Para realizar estos cambios utilizaremos las siguientes ordenes: $ sed -i ’s / MOSQHOME =\/ tmp \/ mosquitto / MOSQHOME =\/ etc \/ mosquitto /g ’ mosquitto - setup . sh $ sed -i ’s / cafile $MOSQHOME \/ ca . crt / cafile $MOSQHOME \/ ca _ ce rt if i ca te s \/ ca . crt /g ’ mosquitto - setup . sh $ sed -i ’s / certfile $MOSQHOME \/ server . crt / certfile $MOSQHOME \/ certs \/ server . crt /g ’ mosquitto - setup . sh $ sed -i ’s / keyfile $MOSQHOME \/ server . key / keyfile $MOSQHOME \/ certs \/ server . key /g ’ mosquitto - setup . sh $ sed -i ’s /# listener 1883/ listener 1883/ g ’ mosquitto - setup . sh $ sed -i ’s / listener 1883 127.0.0.1/# listener 1883 127.0.0.1/ g ’ mosquitto - setup . sh $ sed -i ’s / MOSQUITTO = $ { MOSQUITTO := $ }/ MOSQUITTO = mosquitto /g ’ mosquitto - setup . sh $ sed -i ’s / CACERT = $ { DIR }\/ ca / CACERT = $ { DIR }\/ c a_ ce rt i fi ca t es \/ ca /g ’ TLS / generate - CA . sh $ sed -i ’s / SERVER =\" $ { DIR }\/ $ { host }\"/ SERVER =\ $ { DIR }\/ certs \/ server /g ’ TLS / generate - CA . sh
Opcionalmente se pueden realizar algunos cambios, si se desea, en el script “generate-CA.sh”, las variables ALT HOSTNAMES, CA ORG, CA DN a los valores que consideremos oportunos. La modificaci´on, o no, de estas variables no supondr´ a ning´ un cambio funcional, u ´nicamente ser´a posible apreciar las diferencias en las propiedades de los certificados creados. Una vez se haya concluido la configuraci´on de las diferentes rutas y/o variables, podremos continuar con la ejecuci´on del script “mosquitto setup.sh”.
72
6.2. Instalaci´ on y configuraci´ on de Mosquitto
Finalmente deberemos de comprobar que se han generado los diferentes certificados en las carpetas seleccionadas previamente. Llegados a este punto, podremos iniciar el servicio o comprobar su correcta actividad mediante dos comandos diferentes, pero de igual resultado. sudo / etc / init . d / mosquitto start *
o ´ sudo systemctl start * mosquitto . service
*start=iniciar, status=comprobar estado, restart=reiniciar, stop=detener Recapitulando, en la instalaci´on de Mosquitto actual tenemos la opci´on de establecer comunicaciones no seguras, con el puerto 1883, o seguras utilizando TLS/SSL, con el puerto 8883. Para ello, hemos debido obtener los certificados y claves necesarias, pero seguimos teniendo un problema, cualquier persona podr´ıa suscribirse a los diferentes topics del servidor (en el caso de no utilizar conexiones seguras, por el contrario, necesitar´ıa los certificados del servidor para poder establecer la conexi´on), puesto que el br´oker no dispone de autenticaci´on. Para solucionar este inconveniente, se deber´an de realizar las pertinentes modificaciones del fichero de configuraci´on, para que tenga el mismo contenido que el mostrado en la imagen 6.4.
Instalaci´ on y Configuraci´ on.
73
Figura 6.4: Configuraci´ on para disponer de autenticaci´on en el servidor.
Los apartados recuadrados en rojo son las l´ıneas importantes de la configuraci´on necesaria en el servidor, para que sea capaz de utilizar autenticaci´on de s y cifrado de las comunicaciones. La primera l´ınea, “allow anonymous false”, hace que el br´oker no permita comunicaciones de s que no se hayan autenticado, por lo que entonces se necesitar´ a un archivo donde el servidor pueda comprobar la veracidad de las contrase˜ nas de cada cliente. Por ello, es necesario especificar la ruta del fichero que contiene las duplas de :contrase˜ na, en nuestro caso es “ file /etc/mosquitto/wd.pw ”. Como inciso podemos saber que con la configuraci´on mostrada en la imagen 6.4, tenemos la posibilidad de establecer conexiones tanto no cifradas al puerto 1883, como cifradas al 8883, como se ha mencionado en varias ocasiones. Para este u ´ltimo caso, podemos observar que en el archivo de configuraci´ on es necesario especificar la ruta donde se encuentran los archivos de certificados y claves y la versi´ on del protocolo TLS utilizada.
74
6.3. Instalaci´ on y configuraci´ on de OpenHab2
Para finalizar la configuraci´on de autenticaci´on, ser´a necesaria la creaci´on del fichero de claves de . Para ello, utilizaremos el siguiente comando en la terminal de Raspbian: $ $ $ $
cd / etc / mosquitto / m o sq u i t t o _ p a s s w d -c wd . pw openHAB m o sq u i t t o _ p a s s w d -U wd . pw < nombre de > chown mosquitto : mosquitto wd . pw
Con el comando “mosquitto wd –c wd.pw openHAB ” es creado un nuevo fichero de contrase˜ nas para el servidor, y se registra el ‘openHAB’, “mosquitto wd –U <nombre de >” es una opci´ on para actualizar o convertir un fichero de contrase˜ nas utilizando claves en texto plano y almacenando un hash de cada una de ellas, y, finalmente, “chown mosquitto:mosquitto wd.pw ” modifica el propietario y el grupo del archivo de contrase˜ nas utilizadas por Mosquitto. Para activar las diferentes modificaciones del archivo de configuraci´on y, as´ı, se requiera la autenticaci´on de los diferentes clientes del servidor, se deber´ a reiniciar el servicio de Mosquitto mediante la utilizaci´on del comando: $ sudo systemctl restart mosquitto . service
Realizando correctamente los pasos descritos en este apartado del cap´ıtulo 6, deberemos de tener instalado y configurado satisfactoriamente el servidor de MQTT, Mosquitto, para que sea capaz de realizar autenticaci´on de s mediante la petici´on de y contrase˜ na, y realizar comunicaciones con MQTT y MQTT sobre SSLT/TLS...
6.3.
Instalaci´ on y configuraci´ on de OpenHab2
En este apartado se recoge todo lo realizado para la descarga, instalaci´on y configuraci´ on de OpenHAB, adem´as se explicar´a paso a paso la definici´on de los diferentes servicios utilizados y la comunicaci´on del servidor con la mota MQTT que hace uso del NodeMCU. Para llevar a cabo todo lo descrito en este apartado se han consultado las referencias [72, 73].
Instalaci´ on y Configuraci´ on.
6.3.1.
75
Descarga e instalaci´ on
Antes de comenzar con la instalaci´on deberemos de comprobar que se cumplen algunos requisitos. En la Raspberry tiene que estar instalado un int´erprete de Java, la organizaci´ on de OpenHAB recomienda Zulu que es el que aporta el mayor soporte, aunque la distribuci´on de Oracle tambi´en es adecuada para la mayor´ıa de configuraciones posibles. Por otro lado, se dispone de OpenJDK, pero este tiene algunas limitaciones conocidas con openHAB y no es recomendada su utilizaci´on. Cabe destacar que para plataformas ARM se aconseja el uso de la versi´on de 32 bits de la JVM, aunque se disponga de un sistema operativo de 64 bits. Esto se debe a que las conexiones serie no funcionan con una JVM de 64 bits. Tampoco es recomendable el uso de Java 9, porque a´ un no es compatible con openHAB 2. Para conseguir una mejor compatibilidad se recomienda, como requisito m´ınimo, la revisi´ on “101” de Java 8. Desde la terminal se puede comprobar la versi´ on de Java instalada en el sistema operativo, para ello, se debe de utilizar el siguiente comando: $ java - version
En la Raspberry utilizada la versi´on de Java disponible es “1.8.0 131”. En caso de no disponer de una versi´on adecuada de Java, podremos obtenerlo e instalarlo mediante los siguientes comandos: $ echo " deb http :// ppa . launchpad . net / webupd8team / java / ubuntu xenial main " | sudo tee / etc / apt / sources . list . d / webupd8team - java . list $ echo " deb - src http :// ppa . launchpad . net / webupd8team / java / ubuntu xenial main " | sudo tee -a / etc / apt / sources . list . d / webupd8team java . list $ sudo apt - key adv -- keyserver hkp :// keyserver . ubuntu . com :80 -- recv keys EEA14886 $ sudo apt - get update $ sudo apt - get install oracle - java8 - installer $ sudo apt - get install oracle - java8 - set - default
Posteriormente, se preceder´ a con la descarga e instalaci´on de openHAB 2, cabe destacar que se puede instalar a trav´es de un repositorio de paquetes o de forma manual desde un archivo. El m´etodo recomendado de instalaci´on es mediante los repositorios de paquetes con la herramienta “apt-get”, en el caso de Raspbian.
76
6.3. Instalaci´ on y configuraci´ on de OpenHab2
El primer paso a seguir es agregar la clave del repositorio de openHAB 2 Bintray al gestor de paquetes “apt” y, de este modo, se permita la utilizaci´on del protocolo HTTPS. Para a˜ nadir estas claves deberemos de utilizar los siguientes comandos: $ wget - qO - ’ https :// bintray . com / / d o w n l o a d S u b j e c t P u b l i c K e y ? name = openhab ’ | sudo apt - key add $ sudo apt - get install apt - transport - https
Para la instalaci´ on de openHAB 2, deberemos de agregar un nuevo repositorio, se puede elegir entre tres alternativas: las compilaciones oficiales (estable), beta o instant´anea. • Versi´ on estable: compilaci´on que contiene la u ´ltima versi´on oficial con caracter´ısticas probadas. El repositorio de la versi´on estable de openHAB 2 podemos a˜ nadirlo a la lista de fuentes del sistema con el uso del comando: $ echo ’ deb https :// dl . bintray . com / openhab / apt - repo2 stable main ’ | sudo tee / etc / apt / sources . list . d / openhab2 . list
• Versi´ on beta (liberaci´on): estas versiones salen con menos frecuencia, pero poseen algunas caracter´ısticas que se encuentra en fase de pruebas. El repositorio se agrega con la siguiente sentencia en la terminal: $ echo ’ deb https :// dl . bintray . com / openhab / apt - repo2 testing main ’ | sudo tee / etc / apt / sources . list . d / openhab2 . list
• Versi´ on de instant´ aneas: la organizaci´on lanza nuevas versiones de instant´ aneas diariamente, estas incluyen algunos cambios en el n´ ucleo y complementos. Estos cambios pueden no ser estables, por lo que solo se aconseja su utilizaci´on en aquellas instalaciones destinadas a pruebas y/o desarrollo. $ echo ’ deb https :// openhab . jfrog . io / openhab / openhab - linuxpkg unstable main ’ | sudo tee / etc / apt / sources . list . d / openhab2 . list
En nuestro caso se ha utilizado la versi´on estable, puesto que es la que menos fallos presenta. Posteriormente, se deber´a actualizar el ´ındice de paquetes e instalar openHAB 2 y, para evitar posibles contratiempos de conexi´ on a internet al instalar alguno de los complementos, se descargar´a un
Instalaci´ on y Configuraci´ on.
77
paquete que los contiene (openhab2-addons). Para esto tendremos que usar las siguientes sentencias: $ sudo apt - get update $ sudo apt - get install openhab2 $ sudo apt - get install openhab2 - addons
Opcionalmente, se pueden instalar los complementos de la versi´on 1.x de openHAB, “openhab2-addons-legacy”. Puesto que se est´ a utilizando Raspbian Jessie, y se trata de un sistema basado en systemd, para poder iniciar y controlar el servicio de openHAB se emplear´ an los comandos: $ sudo systemctl start openhab2 . service $ sudo systemctl status openhab2 . service
Por otro lado, para realizar el registro del servicio y, de este modo, se pueda ejecutar autom´ aticamente con el inicio del sistema, ser´an necesarias las sentencias: $ sudo systemctl daemon - reload $ sudo systemctl enable openhab2 . service
El servidor web de openHAB 2 puede ser accesible en la URL: “http://
:8080 ”. Cabe destacar que el primer inicio del servicio puede llevar algo de tiempo. En la imagen 6.5, se muestra la p´agina principal del servidor de openHAB 2, en la que se realizar´a una configuraci´ on inicial del servicio.
78
6.3. Instalaci´ on y configuraci´ on de OpenHab2
Figura 6.5: Configuraci´on inicial de openHAB 2.
El servicio de openHAB funciona en segundo plano, por ello, para poder controlar el funcionamiento de este se deber´a de utilizar algunos comandos. • Mostrar el estado actual del servicio: $ sudo systemctl status openhab2 . service
• Iniciar en segundo plano el servicio que controla openHAB 2: $ sudo systemctl start openhab2 . service
• Reiniciar el servicio: $ sudo systemctl restart openhab2 . service
• Detener el proceso que controla openHAB: $ sudo systemctl stop openhab2 . service
Los comandos siguientes son u ´tiles para cargar el servicio en el inicio del sistema, como se mencion´o anteriormente, de este modo, se arranca el servicio autom´ aticamente al encender la Raspberry.
Instalaci´ on y Configuraci´ on.
79
$ sudo systemctl daemon - reload $ sudo systemctl enable openhab2 . service
Para mantener al d´ıa la instalaci´on de openHAB puede ser recomendable la realizaci´ on de actualizaciones peri´odicas, m´as si cabe, la alternativa utilizada es la de instant´ aneas, puesto que se publican correcciones a diario. La configuraci´ on personal se mantendr´a en las reiteradas actualizaciones, pero, de todos modos, es aconsejable realizar copias de seguridad de manera peri´odica. Para realizar la actualizaci´ on se emplear´an los comandos mostrados a continuaci´ on: $ sudo apt - get update $ sudo apt - get upgrade
Para poder ver las diferentes versiones disponibles y poder realizar una elecci´on acertada, actualizar la distribuci´on o elegir una versi´on anterior (porque esta sea m´ as estable). $ sudo apt - get update $ apt - cache showpkg openhab2
Una vez se tenga elegida la versi´on bastar´a con utilizar el comando siguiente para instalarla. $ sudo apt - get install openhab2 = 2.1.0 -1
Antes de finalizar la explicaci´ on sobre la descarga e instalaci´on de openHAB 2, es necesario saber c´ omo realizar las copias de seguridad de nuestra instalaci´ on, conservando la configuraci´on y archivos de , para evitar posibles problemas de funcionamiento cuando este est´e activo. # Detiene el servicio de openHAB $ sudo systemctl stop openhab2 . service # Prepara el directorio donde se guardar ´ a n las copias de seguridad $ BACKUPDIR ="/ srv / openhab2 - backup / openhab2 - backup - $ ( date + %Y %m %d_ %H %M % S)"
80
6.3. Instalaci´ on y configuraci´ on de OpenHab2
$ mkdir -p $BACKUPDIR # $ $ $ $
Copia de seguridad de la instalaci o ´ n y configuraci ´ o n actual - arv / etc / openhab2 " $BACKUPDIR / conf " - arv / var / lib / openhab2 " $BACKUPDIR / data " rm - rf " $BACKUPDIR / data / cache " rm - rf " $BACKUPDIR / data / tmp "
# Reinicia la instancia de openHAB $ sudo systemctl start openhab2 . service
Para restaurar una copia de seguridad solo es necesario reemplazar los archivos en los directorios de instalaci´on de openHAB. Para ello, podemos utilizar las siguientes sentencias desde la terminal de Raspbian. # Detiene el servicio de openHAB $ sudo systemctl stop openhab2 . service # Restablece los ficheros de configuraci ´ o n y proporcionan los permisos necesarios $ sudo - arv / srv / openhab2 - backup / openhab2 - backup -20160131 _235959 / conf /* / etc / openhab2 / $ sudo - arv / srv / openhab2 - backup / openhab2 - backup -20160131 _235959 / data /* / var / lib / openhab2 / $ sudo chown -R openhab / var / lib / openhab2 # Reinicia el proceso de openHAB $ sudo systemctl start openhab2 . service
6.3.2.
GUIs
El servicio de openHAB posee un servidor web, el cual escucha peticiones HTTP en el puerto 8080 y HTTPS en el 8443. La primera vez que se inicia observaremos un de control en el que tendremos diferentes opciones de configuraci´ on inicial (v´ease figura 6.5). Elegiremos la versi´on “Standard ”, que es la recomendada en la web oficial. Esta instalar´a tres es de control diferentes: • Paper UI: con este podemos instalar complementos a nuestro servidor, ´ para realizar la confidescubrir y configurar algunos objetos, etc. Util guraci´ on de nuestra instancia openHAB mediante una interfaz gr´afica. Actualmente es un aspecto en desarrollo porque no contiene todas las funcionalidades previstas. ◦ istraci´ on de complementos: instala y desinstala complementos a openHAB.
Instalaci´ on y Configuraci´ on.
81
◦ Descubrimiento de dispositivos: incorporaci´on de elementos o servicios disponibles en la red. ◦ Vinculaci´ on de elementos con canales: en vez de realizar la configuraci´ on de los enlaces en el fichero de definici´on de ´ıtems, se pueden conectar directamente canales a los elementos de manera gr´ afica.
Hay que destacar que todav´ıa se pueden definir: elementos, sitemaps (zonas configuradas del lugar en el servidor dom´otico), configuraciones de persistencia y reglas, desde los archivos de configuraci´on.
Figura 6.6: “Paper UI”.
• Basic UI: desde el cual se pueden controlar los diferentes “sitemaps” creados, o diferentes zonas, y/u objetos configurados (v´ease figura 6.x.). Posee las siguientes caracter´ısticas: ◦ Dise˜ no adaptable para varios tama˜ nos de pantalla. ◦ Navegaci´ on AJAX. ◦ Actualizaci´ on en tiempo real.
82
6.3. Instalaci´ on y configuraci´ on de OpenHab2
Figura 6.7: de control “Basic UI”.
• HAB: es una funcionalidad que permite la creaci´on de es de control din´ amicos para los art´ıculos incorporados en el servidor.
Adicionalmente, es posible la incorporaci´on de la interfaz de cl´ asica, “Classic UI ”. Esta hay que instalarla como complemento, y muestra la misma informaci´ on que “Basic UI ” pero haciendo uso de un aspecto diferente. Con el paso del tiempo, la comunidad va creando nuevas interfaces de que pueden ser agregadas de manera opcional. Terminada la introducci´on al servidor web de nuestra instancia de openHAB se proceder´ a con el an´alisis de la configuraci´on y creaci´on de sitemaps y objetos en el servidor.
6.3.3.
Configuraci´ on inicial
Para llevar a cabo una primera configuraci´on de los dispositivos y complementos, reconocidos por el servidor, deberemos de utilizar la interfaz “Paper UI ”. Iniciada esta interfaz, se comenzar´a localizado en la pesta˜ na “Inbox ”. Este es el lugar donde se puede realizar el descubrimiento de nuevos elementos disponibles en la red. Para poder a˜ nadirlos, primero se deber´a incorporar la vinculaci´ on o grupo correspondiente. Esta instalaci´ on se realiza en la opci´on “Add-ons” del men´ u izquierdo, el cual incorpora adem´ as interfaces de adicionales, opciones de persis-
Instalaci´ on y Configuraci´ on.
83
tencia, acciones y transformaciones de datos, servicios de voz e integraci´on de sistemas de terceros.
Figura 6.8: Grupos de elementos disponibles en openHAB.
En primer lugar, se instalar´ a “Network Bindings”, con ´el se pueden crear algunas reglas como utilizar un actuador cuando se detecte que un dispositivo concreto se conecta a la red local, o simplemente para ver si est´a en l´ınea y por cuanto tiempo. Esto nos servir´a para comenzar algunas pruebas de funcionamiento de openHAB y empezar a entender la metodolog´ıa de actuaci´on. Volviendo a la pesta˜ na “Inbox ” y clicando en el bot´on “+”, deber´a aparecernos la opci´ on instalada para descubrir los dispositivos de nuestra red. Dicho descubrimiento se realiza mediante el env´ıo de tramas ICMP. Sobre los “Things” (dispositivos) mostrados se puede actuar de diferente manera: • Agregarlos al servidor clicando en el icono de verificaci´on. • Ignorarlo haciendo uso del ojo tachado. Esto har´a que desaparezca de la lista de entradas visibles, pero podr´a recuperarse haciendo clic en el bot´ on “Mostrar ignorado”. • Eliminarlo clicando en la papelera. No ser´a visible de manera permanente hasta que se realice un nuevo proceso de descubrimiento.
84
6.3. Instalaci´ on y configuraci´ on de OpenHab2
El dispositivo a˜ nadido deber´a de tener una direcci´on IP est´atica, de lo contrario, aunque se encuentre en la red local, openHAB no ser´a capaz de reconocerlo. A˜ nadiremos un dispositivo determinado y le cambiaremos el nombre por alguno que sea identificativo y haremos clic en “ADD AS THINGS ”, con lo cual quedar´ a a˜ nadido a nuestra instancia. Antes de continuar, cambiaremos una de las opciones de configuraci´on predeterminada del sistema openHAB para facilitar el proceso de vinculaci´ on de los dispositivos a los canales. El procedimiento a seguir es: “Configuraci´ on” → “Sistema” en el men´ u de la izquierda, se deber´a de buscar el apartado “Item Linking” (Vincular art´ıculo) y se activar´a el “modo simple”. Para salvar los cambios se deber´a hacer clic en el bot´on “SAVE ”.
Figura 6.9: Configuraci´on modo simple de v´ınculo.
Ahora, podremos ir a “Configuraci´on” → “Things”, donde se encontrar´a el dispositivo agregado previamente. Si se hace clic en dicho objeto, podremos apreciar los posibles canales de informaci´on disponibles. En el caso de un dispositivo de red como este, tendremos: el estado; si se encuentra en l´ınea, o no, y el tiempo que lleva conectado.
Instalaci´ on y Configuraci´ on.
85
Figura 6.10: Canales de un dispositivo.
Una caracter´ıstica de especial relevancia es que los canales no est´an “vinculados” tras el proceso de descubrimiento, sino que vincularlos significar crear un elemento de openHAB que se encargue de representar, en este caso, el estado del dispositivo. Gracias a la activaci´on del m´etodo simple de v´ınculo, se puede realizar esta tarea haciendo clic en el bot´on a la izquierda de cada uno de los canales. Para la mayor´ıa de canales, se pueden modificar algunos par´ametros como: el nombre, la ubicaci´ on y las opciones vinculadas. En un dispositivo de red pueden ser modificados par´ ametros como: la direcci´on IP y el puerto, el tiempo de espera, el intervalo de refresco, etc. (V´ease figura 6.11).
86
6.3. Instalaci´ on y configuraci´ on de OpenHab2
Figura 6.11: Par´ametros modificables dispositivo de red.
La informaci´ on de los canales configurados puede verse en la pesta˜ na “Control” del men´ u de la izquierda. Aqu´ı, se podr´an observar los elementos para las diferentes zonas configuradas. Los canales del mismo elemento aparecer´ an juntos, recogidos bajo el nombre de dicho elemento. Un ejemplo de visualizaci´on de canales un poco m´as completo es el mostrado en la figura 6.12
Figura 6.12: Control de canales configurados.
Esta es la filosof´ıa seguida para la configuraci´on de los diferentes dispositivos mediante la interfaz de “Paper UI”, por lo que el resto de elementos se configura pr´acticamente igual que ´este.
Instalaci´ on y Configuraci´ on. •
87
Definici´ on de sitemaps.
Desde la interfaz “Paper UI” se pueden controlar algunos aspectos de los objetos agregados al servidor, pero esto est´a muy limitado. Si se desea crear una vista propia se puede crear un “sitemaps”, el cual puede ser visualizado y controlado desde la interfaz de b´asica. Antes de comenzar, es necesario indicar que este proceso se realizara mediante la modificaci´ on y/o creaci´on de algunos ficheros de configuraci´on. La ubicaci´ on de estos es el directorio de instalaci´on de openHAB. Tenemos: el fichero que define los ´ıtems que est´a localizado en la carpeta con el mismo nombre, cabe destacar que la denominaci´on de este archivo debe de ser <nombre>.items, y por otro lado tenemos el archivo que define el sitemaps en s´ı, ubicado en la carpeta “sitemaps” y con una nomenclatura regida por una regla muy parecida a la del caso anterior, <nombre>.sitemaps.
Figura 6.13: Ficheros de configuraci´on “´ıtems” y “sitemaps”.
Puede ser interesante crear estos archivos en el PC personal con la herramienta Eclipse SmartHome Designer, puesto que, as´ı, evitaremos posibles errores de sintaxis. Posteriormente, al copiarlos de nuevo al directorio de instalaci´on de openHAB se deber´ a de modificar el propietario de estos, para que el servidor sea capaz de reconocerlos. Esta modificaci´on la realizaremos con el comando: $ sudo chown -R openhab : openhab / etc / openhab2 /
88
6.3. Instalaci´ on y configuraci´ on de OpenHab2
En primer lugar, tenemos el fichero “prueba.items” donde se definir´an los elementos. La sintaxis a seguir es: ItemType ItemName " It e mD es cr i pt io n " < ItemIcon > { ItemToThingChannelLink }
Un aspecto de vital relevancia es el nombre de los elementos, debe de ser u ´nico para cada uno de los diferentes art´ıculos y el tipo debe ser acorde al funcionamiento que queramos que tenga el elemento en nuestro servidor. Siguiendo con el ejemplo anterior, la definici´on del elemento, para este caso, en el que se indica la presencia de un dispositivo de red es la siguiente: Switch P r e s e n c e _ B r o t h e r _ P r i n t e r " Brother Printer " < network > { channel = " network : device :1 92.168.1 .40: online "}
El canal enlazado puede ser consultado en todo momento desde la interfaz de “Paper UI”, eligiendo el elemento y observando el ID del canal deseado. Para poder ver estos elementos desde la interfaz de b´asica es necesaria la creaci´ on de un sitemaps, encargada de la definici´on de la estructura de visualizaci´ on. La sintaxis de este fichero es bastante sencilla: sitemap sitemapsName label = " My first sitemap " { ItemType item = ItemName label = " Description of the item shown on the webpage " }
El archivo siempre tiene que comenzar con la palabra “sitemaps”, seguido del nombre asignado al mismo (debe de coincidir con el nombre del fichero), y una etiqueta que act´ ua como t´ıtulo. El bloque de elementos est´a acotado por llaves del tipo “{}”. La definici´ on de ItemType e ItemName debe ser el mismo que en el fichero de definici´ on y por u ´ltimo se a˜ nade una descripci´on para el art´ıculo que ser´ a mostrada en la interfaz gr´afica. Para el ejemplo quedar´ıa tal que as´ı: sitemap prueba label =" Main Menu "{ Switch item = P r e s e n c e _ B r o t h e r _ P r i n t e r }
label =" Brother Printer "
Instalaci´ on y Configuraci´ on.
89
Por u ´ltimo, se tiene que indicar el sitemaps a utilizar. Para ello, en la interfaz “Paper UI”, tendremos que ir a “Configuration” → “Services” → “UI” → “Basic UI” → “Configure”. En la ventana emergente, buscaremos el apartado “Default Sitemaps” e indicaremos el nombre del archivo, para guardar los cambias pincharemos en “SAVE”. (V´ease figura 6.14).
Figura 6.14: Configuraci´on Sitemaps utilizado.
Finalizada esta toma de o con el m´etodo de definici´on de elementos en la instancia de openHAB, a continuaci´on se explicar´an la configuraci´on del resto de elementos incorporados.
6.3.4.
Bindings
Primero se estudiar´ an los diferentes complementos agregados, los cuales pueden ser reunidos en los siguientes grupos: • Astro Binding: puede ser utilizado para obtener los niveles de radiaci´on del sol durante el d´ıa, adem´ as de las posiciones del sol y la luna, y en funci´ on de estas, programar alguna acci´on. • HTTP Binding: u ´til cuando se desea enviar comandos a los elementos definidos o actualice el estado de los mismos mediante sondeos en una URL.
90
6.3. Instalaci´ on y configuraci´ on de OpenHab2 • MQTT Binding: permite que openHAB act´ ue como un cliente MQTT. Utilizado para la actualizaci´on de los valores recogidos desde el sensor de la mota MQTT y para encender/apagar el LED. • Network Binding: permite comprobar los dispositivos que hay disponible actualmente en la red. Esto es posible mediante el empleo de tramas ICMP. • NTP Binding: es utilizada para mostrar la fecha y la hora, basando la actualizaci´ on en el empleo de un servidor de NTP. • Weather Binding: proporciona informaci´on del tiempo actual mediante el empleo de diferentes APIs gratuitas. • Yahoo Weather Binding: utiliza los servicios de Yahoo Weather para proporcionar informaci´on del tiempo actual.
Una vez tengamos agregados los grupos de elementos deseados, podemos proceder a la incorporaci´on de los mismos a la instancia y su posterior configuraci´ on. En la figura 6.15 podemos observar la configuraci´on realizada para un art´ıculo NTP, en el cual podemos configurar la zona horaria, el servidor NTP utilizado, el intervalo de refresco, etc.
Figura 6.15: Configuraci´on de un elemento NTP.
A continuaci´ on, en la figura 6.16, podemos estudiar la configuraci´on de un elemento del grupo Yahoo Weather, utilizado para saber la temperatura
Instalaci´ on y Configuraci´ on.
91
y humedad del exterior de nuestro hogar. La localizaci´on ha de ser configurada mediante el empleo de un identificador WOEID (Where On Earth IDentifier ), el cual es un n´ umero de referencia u ´nico de 32 bits, originalmente definido por GeoPlanet y posteriormente asignado a Yahoo. En [74] podremos buscar el WOEID correspondiente a nuestra localizaci´on.
Figura 6.16: Configuraci´ on de un elemento Yahoo Weather.
6.3.5.
Integraci´ on de servicios de terceros
Adem´ as, se incorporar´ a la integraci´on de Homekit y la nube de openHAB (apartado MISC de la pesta˜ na “Add-ons” del men´ u de la izquierda). En la figura 6.17 se puede observar la configuraci´on utilizada para realizar la integraci´ on de Homekit en la instancia de openHAB. Se deber´a de configurar el puerto de escucha y la direcci´on IP del servidor, adem´as de una clave que se pedir´ a en el momento del emparejamiento entre los dispositivos.
Figura 6.17: Integraci´ on de Homekit en openHAB.
92
6.3. Instalaci´ on y configuraci´ on de OpenHab2
El m´etodo de integraci´on de Homekit, en la versi´on 2 de openHAB, no funciona correctamente, y puede dar fallos al reiniciar el servidor donde est´a instalada la instancia de openHAB. Esto es debido a un problema en el momento de instalaci´ on de “Homekit Integration”, puesto que deber´ıa de configurar una base de datos JSON y no lo realiza correctamente. El fichero creado queda incompleto y da error cuando se intenta iniciar el servicio. Para resolver este contratiempo deberemos de desinstalar “Homekit Integration” y eliminar el fichero de configuraci´on, situado en la ruta “/var/lib/openhab2/jsondb/homekit.json”. En este punto, deberemos de realizar la instalaci´ on del complemento y configurarlo, pero antes de realizar el emparejamiento deberemos de comprobar que en el fichero “homekit.json” est´a correctamente la entrada que indica la direcci´on MAC del dispositivo. En caso afirmativo, se puede proceder con el emparejamiento de los dispositivos. Por el contrario, se tendr´a que realizar este proceso una y otra vez hasta que se instale correctamente. Los ´ıtems utilizados con Homekit deben definir unas etiquetas caracter´ısticas, dependiendo del elemento de que se trate. As´ı, por ejemplo, un sensor de temperatura deber´a incluir en su definici´on la etiqueta [“CurrentTemperature”] y un sensor de humedad [“CurrentHumidity”]. Adicionalmente, HAB. En la imagen de openHAB no es HAB y el modo de notificaciones).
podemos configurar un servicio en la nube para open6.18 podemos observar que la configuraci´on de la nube m´ as que indicar la URL del servidor cloud de openactuaci´on (notificaci´on y remoto o u ´nicamente
Instalaci´ on y Configuraci´ on.
93
Figura 6.18: Configuraci´on de la nube de openHAB.
Deberemos crear un en el servidor “myopenHAB.org”, indicando un identificador UUID y una clave (secreto) caracter´ıstica de nuestro servidor. El primero puede ser encontrado en la ruta “var/lib/openhab2/uuid ” mientras que el segundo est´ a en “var/lib/openhab2/openhabcloud/secret”, aceptaremos los t´erminos y haremos clic en “ ”. La p´ agina a la que accedemos de manera habitual, una vez tenemos la cuenta creada, debe ser algo similar a la mostrada en la imagen 6.19.
Figura 6.19: P´ agina de inicio de myopenHAB.org.
Desde este servidor podemos estudiar los eventos y notificaciones de la instancia de openHAB, as´ı como, el estado de los elementos agregados a nuestra instalaci´ on.
94
6.3. Instalaci´ on y configuraci´ on de OpenHab2
Adem´ as, posee una herramienta que permite la comunicaci´on con los dispositivos de control conectados mediante el env´ıo de notificaciones. En la figura siguiente se puede apreciar el apartado que muestra el estado de los elementos del servidor de openHAB.
Figura 6.20: Lista de elementos con estados.
6.3.6.
Configuraci´ on de MQTT
Tambi´en es necesario realizar la configuraci´on del MQTT Binding, el cual hace que openHAB act´ ue como un cliente m´as del protocolo MQTT. El fichero de configuraci´on que debemos de modificar se encuentra en “/etc/openhab2/services/mqtt.cfg”. En este fichero hemos modificado las siguientes l´ıneas (modificaciones en negrita): # URL to the MQTT broker , e . g . t :// localhost :1883 or ssl :// localhost :8883 \ textbf { openhab . url = t :// localhost :1883} # Optional . Client id ( max 23 chars ) to use when connecting to the broker . # If not provided a default one is generated . \ textbf { openhab . clientId = Openhab } # Optional . id to authenticate with the broker . \ textbf { openhab . = openHAB } # Optional . to authenticate with the broker . \ textbf { openhab . pwd = openHAB }
Instalaci´ on y Configuraci´ on.
95
Una vez se ha configurado correctamente el protocolo MQTT en los ficheros de configuraci´ on, se puede proceder con la definici´on de aquellos elementos en los que se har´ a uso de este m´etodo de comunicaci´on con la mota. La sintaxis seguida para la configuraci´on de los diferentes elementos es la siguiente: Item myItem { mqtt =" < direction >[ < broker >: < topic >: < type >: < transformer >] , < direction >[ < broker >: < topic >: < type >: < transformation >] , ..."}
La direcci´ on del s´ımbolo diferencia entre mensajes entrantes y salientes: “<” para entrantes y “>” para salientes. Como ejemplo, el LED se configurar´ıa de la siguiente forma: Switch Light _H_Livin g " Light "( H_Living ) [" Lighting "] { mqtt =" >[ openhab :/ house / living / light / com : command : on :1] , >[ openhab :/ house / living / light / com : command : off :0] , <[ openhab :/ house / living / light / com / state : state : default ]"}
A continuaci´ on, se comentar´ an las configuraciones de elementos utilizadas en los archivos “prueba.items” y “prueba.sitemaps”. Para la modificaci´on se ha seguido la sintaxis indicada en el manual de de openHAB [75]. En caso de que quiera estudiarse el contenido de estos ficheros, pueden estudiarse en el anexo B. En primer lugar, se tratar´ a el fichero que define los elementos incorporados al servidor, “prueba.items”. En este se utilizan los grupos para realizar una organizaci´ on mediante niveles, de este modo, todos los elementos ser´an m´as localizables y estar´ an mejor ordenados. Como ejemplo de definici´ on de algunos elementos se pondr´a: uno que utiliza mensajes entrantes de MQTT (LED), otro que utiliza la implementaci´on de los mensajes salientes y, por u ´ltimo, uno de los que utiliza los servicios de tiempo de Yahoo. Todos ellos est´an incluidos en el complemento de integraci´ on de Homekit.
96
6.3. Instalaci´ on y configuraci´ on de OpenHab2
El led anterior es el que utiliza los mensajes entrantes del servidor MQTT, por lo tanto, pasaremos a aquel que utiliza una comunicaci´on de MQTT saliente. Number T e m p e r a t u r e _ H _ L i v i n g " Temperature [ %.1 f ◦ C ]" < temperature > ( H_Living ) [" C u r r e n t T e m p e r a t u r e "] { mqtt = " <[ openhab :/ house / living / temperature / state : state : default ]"}
Por u ´ltimo, el ejemplo de los servicios de Yahoo, se han escogido ambos como elementos de temperatura para que se pueda comparar c´omo se define cada tipo de manera sencilla. Number T e m p e r a t u r e _ O u t d o o r " Temperature [ %.1 f ◦ C ]" < temperature > ( Outdoor ) [" C u r r e n t T e m p e r a t u r e "] { channel =" yahooweather : weather : granada : temperature " }
El archivo “prueba.sitemaps” define la informaci´on gr´afica mostrada en la interfaz de b´asica. Principalmente, se configura la apariencia y descripci´ on de cada grupo de elementos. Como ejemplos se ha elegido la definici´ on de los grupos de elementos y la fecha. El resto de configuraci´on puede estudiarse, como se mencion´o anteriormente, en el anexo B. Definici´ on de los grupos: Frame { Group item = H label =" House " icon =" house " Group item = Outdoor icon =" garden " }
Definici´ on de c´ omo se mostrar´a la fecha (el formato de visualizaci´on en s´ı es definido en “prueba.items”): Frame label =" Date " { Text item = Date }
Una vez tengamos creados los elementos que deseamos y configurada la representaci´ on de los mismos en la interfaz b´asica, procederemos con el u ´ltimo apartado de esta secci´on, la cual consiste en proporcionar mecanismos de autenticaci´ on al servidor para agregar un poco m´as de seguridad.
Instalaci´ on y Configuraci´ on.
6.3.7.
97
Configuraci´ on de autenticaci´ on
Para esta adici´ on se emplear´ a el servidor web Apache y un proxy inverso, con el que se redireccionar´ an los puertos de escucha. Primero de todo, se deber´ a de actualizar los repositorios de descarga para actualizar Apache e instalar sus utilidades adicionales. Para este proceso se utilizar´an los comandos siguientes: $ sudo apt - get update $ sudo apt - get install apache2 apache2 - utils
Terminada la instalaci´ on, procederemos con la creaci´on del fichero que contiene los s y contrase˜ nas, mediante la instrucci´on: $ sudo htwd -c / etc / apache2 /. htwd openhab
La ejecuci´ on del comando anterior pedir´a que se introduzca una contrase˜ na y se crear´ a el fichero. En caso de ya existir, dicho archivo ser´a sobrescrito. Si se desea crear m´ as s, basta con quitar el argumento “-c” al comando anterior. A continuaci´ on, se realizar´ an las modificaciones necesarias en el fichero de configuraci´ on de Apache para que realice una petici´on de autenticaci´on antes de dar al contenido del servidor de openHAB. En esta parte se diferenciar´ an dos apartados, uno para el caso de utilizar el protocolo HTTP y otro para HTTPS. En primer lugar, se configurar´a el mediante HTTP. El archivo a modificar se encuentra en la ruta “/etc/apache2/sites-enabled/000default.conf ” y se deber´ a cambiar el contenido existente por el siguiente: < VirtualHost *:80 > Proxy / http : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / P r o x y P a s s R e v e r se / http : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / < Location / > AuthType Basic AuthName " OpenHab2 Restricted " AuthFile / etc / apache2 /. htwd Require valid -
98
6.3. Instalaci´ on y configuraci´ on de OpenHab2
Esto configura el redireccionamiento del puerto 80 hacia el puerto de openHAB, 8080, una vez se haya realizado satisfactoriamente el proceso de autenticaci´ on. El paso siguiente es la habilitaci´on de algunos m´odulos de Apache para que todo funcione correctamente. $ sudo a2enmod proxy proxy_http proxy_ajp rewrite deflate headers prox y_balanc er proxy_connect proxy_html xml2enc
Posteriormente, se deber´ıa de reiniciar el servicio de Apache, pero como se va a configurar el al servidor mediante HTTPS se realizar´a al final. La configuraci´ on de uso de HTTPS es altamente recomendable para todos los casos en los que se realice una conexi´on a un servidor web. En este caso, se deber´ an instalar los paquetes de “openssl ” y “ssl-cert”. Este u ´ltimo generar´ a autom´ aticamente el certificado autofirmado para el nombre de host empleado. Este certificado se encuentra en la ruta de instalaci´on del paquete, “/etc/ssl/certs/ ”. Al igual que en el paso anterior, ser´a necesario habilitar alg´ un m´ odulo adicional de Apache y completar el fichero de configuraci´on. Con el comando siguiente se habilita el empleo del protocolo SSL por el servidor web Apache. $ sudo a2enmod ssl
Al archivo de configuraci´on se deber´an a˜ nadir las siguientes l´ıneas: < VirtualHost *:443 > SSLEngine on SSLCertificateFile / etc / ssl / certs / ssl - cert - snakeoil . pem S S L C e r t i f i c a t e K e y F i l e / etc / ssl / private / ssl - cert - snakeoil . key Proxy / http : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / P r o x y P a s s R e v e r se / http : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / RequestHeader set X - Forwarded - Proto " https " env = HTTPS < Location / > AuthType Basic AuthName " OpenHab2 Restricted " AuthFile / etc / apache2 /. htwd Require valid -
Instalaci´ on y Configuraci´ on.
99
En este caso se realiza el redireccionamiento del puerto 443 (utilizado para HTTPS) hacia el puerto de openHAB, 8443, comprobando el y contrase˜ na introducida y los archivos del certificado para SSL. El u ´ltimo paso para tener toda la configuraci´on operativa consiste en reiniciar el servicio de Apache mediante el empleo de alguno de los comandos siguientes: $ sudo service apache2 restart $ sudo systemctl restart apache2 . service
Ahora podemos comprobar el funcionamiento en cualquier navegador web y utilizando las siguientes URLs siguientes, dependiendo del tipo de conexi´on que se desee establecer: http://
´o https://
(desde la red interna). http://garciasoria.ddns.net ´ o https://garciasoria.ddns.net (desde una red externa, la configuraci´ on de un DNS din´amico se ver´a en la secci´on 6.6).
(a) Petici´ on de autenticaci´on en conexi´on HTTP.
100
6.3. Instalaci´ on y configuraci´ on de OpenHab2
(b) Petici´ on de autenticaci´on en conexi´on HTTPS.
Figura 6.21: Autenticaci´on frente al servidor web de openHAB. No se puede terminar este apartado sin mencionar que openHAB dispone de una consola de istraci´on, con la cual se puede monitorizar en tiempo real el registro de log, istrar los paquetes y ejecutar al instante algunos comandos. Es posible acceder a ella mediante una conexi´on SSH al puerto 8101 de “localhost”. Usaremos el comando mostrado a continuaci´on: $ ssh -p 8101 o p e n h a b @ l o c a l h o s t
Las credenciales por defecto son, → openhab, Contrase˜ na → habopen.
Instalaci´ on y Configuraci´ on.
101
Figura 6.22: Consola de istraci´on de openHAB.
6.4.
Configuraci´ on Arduino IDE - NodeMCU
En esta secci´ on se recoger´ a c´ omo se realiza la configuraci´on inicial del IDE de Arduino para poder utilizarlo en la programaci´on del sketch de la mota, y cargarlo a la placa NodeMCU. En este proyecto se utiliz´ o el entorno de desarrollo de Arduino para programar el ejemplo de mota inteligente. Para poder utilizar Arduino IDE en la programaci´ on del sketch del proyecto, deberemos de configurar un plugin adicional, mediante el cual el entorno de programaci´on de Arduino sea capaz de reconocer las placas compuestas por el chip ESP8266. Antes de nada, deberemos tener Arduino IDE, como nuestro entorno de desarrollo. En caso contrario, podremos descargarlo en [59], eligiendo la opci´on adecuada para nuestro sistema operativo. Ejecutamos el IDE de Arduino y si vamos a “Herramientas”→ “Placa”, podremos observar c´ omo no est´ an disponibles las diferentes opciones para programar el chip ESP8266. Para habilitarlo, deberemos de seguir los pasos descritos en [76]. En las opciones superiores elegiremos “Archivo en el desplegable que aparece tendremos que buscar “Preferencias hacer clic en ella, para que se abra una nueva ventana emergente donde podemos encontrar toda la configuraci´ on referente al entorno de programaci´on. 2
2
102
6.4. Configuraci´ on Arduino IDE - NodeMCU
(a) Preferencias de Arduino IDE.
(b) Gestor de URLs de tarjetas adicionales.
Figura 6.23: Configuraci´on Arduino IDE.
Instalaci´ on y Configuraci´ on.
103
En la ventana de preferencias deberemos de buscar el apartado del ‘Gestor de URLs Adicionales de Tarjetas’, como podemos apreciar en la imagen 6.23b. Se puede escribir directamente en el campo habilitado para ello, separando las diferentes URLs mediante comas o haciendo clic en el bot´on a la derecha de este campo. La URL que necesitamos introducir en este caso es: http://arduino.esp8266.com/stable/package esp8266com index.json Una vez hayamos a˜ nadido de manera satisfactoria el repositorio de placas de desarrollo basadas en el ESP8266, podremos gestionarlas, instalando o desinstalando algunas versiones. Para proceder con la instalaci´on de estas deberemos de ir a “Herramientas”→ “Placa”→ “Gestor de tarjetas”, se abrir´ a una ventana emergente, en la cual podremos filtrar las tarjetas mostradas por diferentes campos: las que se puedan actualizar, las placas de Arduino o certificadas por ellos, etc. Pero, en nuestro caso, realizaremos una b´ usqueda por nombre, donde escribiremos “esp8266 ”. Se obtendr´a un resultado que consta de aquellas placas de desarrollo soportadas por la comunidad ESP8266, entre las cuales se encuentra la que a nosotros nos incumbe, la NodeMCU. Para a˜ nadirla a nuestro entorno deberemos de elegir la versi´on deseada y haremos clic en el bot´ on “Instalar ”. Posteriormente, deberemos de elegir la placa de desarrollo que deseemos utilizar. Para ello, deberemos de ir a “Herramientas” → “Placa”, y navegar a trav´es del desplegable, donde elegiremos, en nuestro caso, NodeMCU 1.0 (ESP-12E Module). En la figura 6.25 podemos observar el procedimiento de manera visual.
104
6.4. Configuraci´ on Arduino IDE - NodeMCU
(a) Gestor de tarjetas.
(b) B´ usqueda de tarjetas esp8266.
(c) Elecci´on de NodeMCU en Arduino IDE.
Figura 6.24: Instalaci´on y elecci´on de tarjetas adicionales.
Instalaci´ on y Configuraci´ on.
105
Teniendo elegida la placa a utilizar, podremos observar alguna informaci´on de la misma, como: el tipo de comunicaci´on, la frecuencia de U, memoria flash y la velocidad de subida de los datos. Adem´as, se deber´a de comprobar que el puerto de comunicaci´on detectado es el correcto. En el apartado “Port: COMx ”, se indica el n´ umero de puerto asignado por el ordenador a dicha comunicaci´ on serial. Asimismo, podemos corroborar que se trata de ese y no otro, empleando la utilidad “ de dispositivos” del sistema Windows.
(a) Informaci´ on de la placa en Arduino IDE.
(b) Puerto de comunicaci´on de NodeMCU visto desde el de dispositivos.
Figura 6.25: Instalaci´ on y elecci´on de tarjetas adicionales.
106
6.5. Dise˜ no y programaci´ on de la mota MQTT
Una vez hayamos realizado todos estos pasos para la correcta configuraci´ on del entorno de programaci´on de Arduino, podremos comenzar su utilizaci´ on con la placa de desarrollo NodeMCU, mediante algunas pruebas b´ asicas, con el empleo de los ejemplos incorporados en las propias librer´ıas a˜ nadidas.
6.5.
Dise˜ no y programaci´ on de la mota MQTT
En esta secci´ on del cap´ıtulo se recoger´a el an´alisis de la mota ejemplo de MQTT utilizada en este proyecto, en ´el se mostrar´a la estructura de esta con la ayuda de Fritzing y se comentar´a el sketch cargado en el NodeMCU para que funcione correctamente. En primer lugar, se enumerar´an los elementos que componen la mota y posteriormente se estudiar´a el sketch programado con Arduino. El ejemplo est´ a compuesto principalmente por: el NodeMCU, como unidad de control, un sensor de temperatura y humedad DHT22 y un led con una resistencia de 330Ω. En la imagen 6.26 podemos ver la distribuci´on de los diferentes elementos de la mota.
Figura 6.26: Esquem´atico mota MQTT.
A continuaci´ on, podremos estudiar el sketch realizado con Arduino IDE, el cual se encarga de configurar el NodeMCU (a medida que se explica el funcionamiento de cada parte se incluir´an extractos del c´odigo), realizar la conectividad a la red local mediante una comunicaci´on Wi-Fi, y al servidor de ThingSpeak para enviar y analizar los datos del sensor, y por u ´ltimo, se encarga de leer los datos de sensores y comunicaciones MQTT.
Instalaci´ on y Configuraci´ on.
107
El funcionamiento del programa es simple, se realiza la lectura del sensor, tanto temperatura como humedad, y se env´ıan los datos con MQTT al servidor de OpenHAB. Desde el cliente de OpenHAB se enviar´an los valores “ 0 (OFF) / 1 (ON)” con este protocolo a un ‘topics’ determinado. El sketch realiza una lectura peri´ odica de este “topics”, en el caso de recibir el valor 0, se apaga el led poniendo en bajo el pin digital al cual est´a conectado al ´anodo, la patilla larga. Por el contrario, si se recibe un 1, se pondr´a el pin en alto y se encender´ a el led. Esta actividad se lleva a cabo en forma de bucle. Primero de todo, deberemos a˜ nadir las librer´ıas necesarias que en este caso son ESP8266WiFi, WiFiClient, DHT, PubSubClient, y definir los pines GPIO del NodeMCU a utilizar por cada elemento. En el caso del pin utilizado por el sensor DHT22, se deber´a especificar el tipo de DHT de que se trata...
Definici´ on de pines NodeMCU
1 2 3
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ DHT22 Sensor ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ #define DHTPIN 4 #define DHTTYPE DHT22
4 5 6
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ LED ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ #define LED 5
Antes de comenzar con las diferentes funciones programados, se deben establecer las variables empleadas de manera global. En el c´odigo siguiente, podemos ver la definici´ on de las constantes necesarias y el cliente WiFi. En primer lugar, tenemos aquellas utilizadas para la conexi´on WiFi de la red local y las relacionadas con el servidor MQTT, que son la direcci´on IP, el puerto de escucha y el y contrase˜ na. Como se explic´o en la secci´on 6.2, estos valores ser´ an u ´tiles debido al proceso de autenticaci´on incorporado al servidor. Tambi´en, es necesario definir el servidor de ThingSpeak y la clave del canal utilizado en este, puesto que es la manera de identificar a donde enviar los datos.
108
6.5. Dise˜ no y programaci´ on de la mota MQTT
En segundo lugar, podemos apreciar que se define el cliente MQTT de la librer´ıa PubSubClient, pero antes se debe definir la funci´on “callback ”, puesto que, de lo contrario, lanzar´ıa un error al compilar. Adem´as, se realiza la definici´ on del sensor DHT empleado, con los valores especificados anteriormente. Por u ´ltimo, se incluyen dos variables temporales, utilizadas para realizar lecturas del sensor cada 5 segundos.
Definici´ on de constantes
1 2 3
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ WiFi Access Point ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ const char∗ ssid = ”SSID WIFI” ; const char∗ = ” WIFI” ;
4 5 6 7 8 9 10 11
WiFiClient espClient; /∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ MQTT Server ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗/ // IP Address of your MQTT Server const byte mqtt server[] = { 192, 168, 1, 150 }; const int mqtt server port = 1883; const char∗ MQTT = ”openHAB”; const char∗ MQTT = ”openHAB”;
12 13 14 15
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ThingSpeak ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ const String apiKey = ”DCJLP1UI7UXBNAFD”; const char∗ server = ”api.thingspeak.com”;
16 17 18 19 20
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ MQTT client ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ // Define function callback MQTT void callback(char∗ topic, byte∗ payload, unsigned int length); PubSubClient mqttClient(mqtt server, mqtt server port, callback, espClient);
21 22 23
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ DHT Sensor ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ DHT dht(DHTPIN, DHTTYPE);
24 25
float hum, temp;
// Valores leidos del sensor
26 27 28 29
// Almacena el valor de tiempo en la ultima lectura unsigned long previousMillis = 0; const long interval = 5000;// Intervalo entre lecturas del sensor
Una vez terminada la explicaci´on de las variables y constantes definidas, se proceder´ a al an´ alisis de los diferentes m´etodos empleados en la consecuci´ on de cada una de las tareas programadas para esta mota de MQTT.
Instalaci´ on y Configuraci´ on.
109
Se comenzar´ a con el m´etodo “callback()”, encargado de controlar cu´ando se recibe un nuevo mensaje en alguna de las suscripciones creadas por el cliente MQTT utilizado. En el monitor serie de Arduino IDE se muestra que ha llegado un mensaje al “topic” pasado por referencia. Adem´as, se muestra, car´ acter a car´ acter, el mensaje recibido mediante el empleo de un bucle. Finalmente, se realiza una comparaci´on del mensaje entrante con dos opciones “0/1 ” para proceder con el apagado/ encendido de un LED.
Lectura del canal MQTT
1 2 3 4 5 6 7 8
void callback(char∗ topic, byte∗ payload, unsigned int length){ Serial.print(”Message arrived [”); Serial.print(topic); Serial.print(”] ”); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println();
9
//Comprueba los mensajes recibidos en el canal de MQTT para controlar un LED Serial.println(strcmp(topic,”house/living/light/com”)); if(strcmp(topic,”/house/living/light/com”)==0){ if ((char)payload[0] == ’0’ ) { // Apaga el LED cuando se recibe un 0 en el ”topic” digitalWrite(LED, LOW);
10 11 12 13 14 15 16
// Enciende el LED cuando se recibe un 1 en el ”topic” digitalWrite(LED, HIGH);
17 18
}
19
}
20 21
}
El m´etodo “wifiConnect()” es utilizado para realizar la conexi´on a la red local, es necesario el empleo de las constantes que contiene el SSID y la contrase˜ na. Se ir´ a mostrando el progreso de la conexi´on en el monitor serie. Esta funci´ on principalmente entra en un bucle while, cuya condici´on consiste en comprobar el estado de la conexi´on wifi hasta que pasa a estado “conectado”. Finalmente, se muestra la direcci´on IP asignada al NodeMCU.
110
6.5. Dise˜ no y programaci´ on de la mota MQTT
Funci´ on de configuraci´on Wi-Fi
1 2
void wifiConnect() { WiFi.begin(ssid, );
3
Serial.println(); Serial.println(); Serial.print(”Connecting to ”); Serial.println(ssid);
4 5 6 7 8
while (WiFi.status() != WL CONNECTED) { delay(500); Serial.print(”.”); } Serial.println(””); Serial.println(”WiFi connected”); Serial.println(”\n\rESP8266 && DHT22 based temperature and humidity sensor working!”); Serial.print(”\n\rIP address: ”); Serial.println(WiFi.localIP());
9 10 11 12 13 14 15 16 17 18
}
Una vez se est´e conectado a la red local, podremos realizar la conexi´on con el servidor de MQTT. Para ello, tendremos que utilizar la funci´on “void reconnect()”, el funcionamiento es sencillo, se basa en la ejecuci´on de un bucle hasta que el cliente de MQTT est´e conectado al servidor. Posteriormente, comprobar´ a la condici´on de conexi´on con el y la contrase˜ na deseados. En caso afirmativo, se realiza una suscripci´on al “topic” utilizado para el env´ıo y recepci´on de toda la informaci´on. Por el contrario, si la comunicaci´ on es fallida se esperar´an 5 segundos antes de reintentar la vinculaci´ on.
Funci´ on para conectar o reconectar al servidor MQTT
1 2 3 4 5 6
void reconnect() { // Bucle hasta que estemos conectados con el servidor while (!mqttClient.connected()) { Serial.print(”Attempting MQTT connection to ”); Serial.print(”192.168.1.150”); Serial.print(” −−> ”);
7 8 9 10 11
// Intento de conexion if (mqttClient.connect(”ESP8266”,MQTT,MQTT)) { Serial.println(”connected”); mqttClient.subscribe(”/house/living/#”);
Instalaci´ on y Configuraci´ on.
111
} else { Serial.print(”failed, rc=”); Serial.print(mqttClient.state()); Serial.println(” try again in 5 seconds”);
12 13 14 15 16
// Espera de 5 segundos antes de reintentar delay(5000);
17 18
}
19 20 21
} }
Otra funci´ on relevante en el funcionamiento de la mota es “void mqttPublish()”, encargada de controlar que las mediciones del sensor DHT22 se realicen con un intervalo superior a 5 segundos. Estos datos se almacenan en una array de caracteres, que ser´a convertido a tipo String para poder realizar la publicaci´ on de esta informaci´on en el “topic” indicado. Siempre que se ejecute este m´etodo, finaliza actualizando el valor de tiempo de la u ´ltima medici´ on, para comprobar el intervalo entre lecturas en siguientes ejecuciones.
Funci´ on para publicar datos en el servidor
1 2 3 4 5 6
void mqttPublish() { // Espera al menos 5 segundos entre mediciones, si la diferencia entre // el tiempo actual y el tiempo de la ultima lectura del sensor es mayor // que el intervalo configurado, se realiza una nueva lectura unsigned long currentMillis = millis(); char temp str[7],hum str[7];
7 8 9 10
if(currentMillis − previousMillis >= interval) { previousMillis = currentMillis; readDHT22(); // datos leidos del DHT22
11
// Convierte los valores de temperatura y humedad a cadena de caracteres dtostrf(temp,4,3,temp str); dtostrf(hum,4,3,hum str);
12 13 14 15
// Envio de datos con MQTT Serial.println(”DTH sensor read and transmitted”); mqttClient.publish(”/house/living/temperature/state”,temp str); mqttClient.publish(”/house/living/humidity/state”,hum str); // Guarda el valor de la ultima lectura previousMillis = millis();
16 17 18 19 20 21 22 23
} }
112
6.5. Dise˜ no y programaci´ on de la mota MQTT
El m´etodo “void readDHT22()” es utilizado para la lectura de los datos de temperatura y humedad del sensor. Adem´as, se utiliza el led, incluido en la placa de desarrollo empleada, para indicar los instantes de tiempo en los que se est´ an realizando las diferentes mediciones. Puesto que se trata de una comunicaci´ on con un sensor, se ha incorporado un condicional que compruebe que se han le´ıdo correctamente dichos datos. En el monitor serie, podremos comprobar aquellas veces que no se han registrado correctamente los datos del sensor.
Funci´ on para leer valores del sensor DHT22
1 2 3 4 5 6 7 8 9
void readDHT22() { Serial.println(”Reading data from DHT22...”); // Reading temperature for humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds ’old’ (it’s a very slow sensor) digitalWrite(LED BUILTIN, LOW); hum = dht.readHumidity(); // Read humidity (percent) temp = dht.readTemperature(); // Read temperature as Celsius delay(1000); digitalWrite(LED BUILTIN, HIGH);
10
// Check if any reads failed and exit early (to try again). if (isnan(hum) || isnan(temp)) { Serial.println(”Failed to read from DHT sensor!”); return; }
11 12 13 14 15 16
}
Adicionalmente, se define un m´etodo para publicar los datos obtenidos con el DHT22 en el servidor ThingSpeak, esta funci´on es “publishThingSpeak()”. El funcionamiento es sencillo, lo principal es comprobar que el cliente MQTT est´ a conectado al servidor “api.thingspeak.com”. La conexi´on es posible tanto al puerto 80 (HTTP) como al 443 (HTTPS). Se genera una cadena de caracteres con el formato “ApiKey+Temperatura+Humedad ”. Para enviar el mensaje se genera un paquete de tipo POST, del protocolo HTTP. El env´ıo de los datos se realiza mediante la funci´on “print()”. La ejecuci´on finaliza cerrando la conexi´on con la funci´on “stop()”. Estos u ´ltimos m´etodos pertenecen a la librer´ıa “WiFiClient”. En caso de no conectarse al servidor, por el monitor serie se muestra el mensaje “Connection failed” y se termina la ejecuci´on de esta funci´on mediante un “return”.
Instalaci´ on y Configuraci´ on.
113
Funci´ on para publicar datos en ThingSpeak
1 2 3 4 5 6 7 8
void publishThingspeak(){ if (espClient.connect(server,80)) { // thingspeak.com String postStr = apiKey; postStr +=”&field1=”; postStr += String(temp); postStr +=”&field2=”; postStr += String(hum); postStr += ”\r\n\r\n”;
”184.106.153.149” or api.
9
espClient.print(”POST /update HTTP/1.1\n”); espClient.print(”Host: http://api.thingspeak.com\n”); espClient.print(”Connection: close\n”); espClient.print(”X−THINGSPEAKAPIKEY: ”+apiKey+”\n”); espClient.print(”Content−Type: application/x−www−form− urlencoded\n”); espClient.print(”Content−Length: ”); espClient.print(postStr.length()); espClient.print(”\n\n”); espClient.print(postStr);
10 11 12 13 14 15 16 17 18 19
Serial.print(”Temperature: ”); Serial.print(temp); Serial.print(” degrees Celcius Humidity: ”); Serial.print(hum); Serial.println(” % send to Thingspeak”); }else{ Serial.println(”connection failed”); //return; } espClient.stop();
20 21 22 23 24 25 26 27 28 29 30
}
Se finalizar´ a la explicaci´ on de los m´etodos con las funciones propias de Arduino IDE, “void setup()” y “void loop()”. La primera de ellas es utilizada para configurar el funcionamiento de la placa programada, en nuestro caso el NodeMCU v1.0, y la segunda es utilizada para crear el bucle infinito, donde se realizan las tareas deseadas. En nuestro proyecto, el m´etodo “void setup()” es utilizado para definir como salidas los pines empleados en los led. Uno de los led ser´a el actuador dom´otico de la mota mientras que el otro, el led integrado en el NodeMCU, ser´a un indicador de los instantes cuando se est´an leyendo los valores del sensor DHT22. Adem´ as, se indicar´ a la velocidad de comunicaci´on de la placa de desarrollo y se iniciar´ a el sensor DHT22 incorporado al esquem´atico. La funci´on finaliza configurando la conexi´on WiFi mediante la utilizaci´on del m´etodo “void wifiConnect()”.
114
6.5. Dise˜ no y programaci´ on de la mota MQTT
Por u ´ltimo, se asignan los valores utilizados para la conexi´on de la mota al servidor de MQTT que son la direcci´on IP y el puerto de escucha. Para ello, se emplear´ a la funci´ on “setServer(server, port)” de la librer´ıa PubSubClient.
Funci´ on con la configuracion inicial de la placa
1 2 3
void setup(void) { pinMode(LED BUILTIN, OUTPUT); pinMode(LED, OUTPUT);
4
Serial.begin(115200); // Establece la velocidad de la comunicacion con la placa delay(10); dht.begin(); // Inicia el sensor DHT
5 6 7 8
wifiConnect();
9
// Configura la conexion WiFi en la red local
10
mqttClient.setServer(mqtt server, mqtt server port); // Fija los detalles del servidor de MQTT
11 12
}
Una vez se han configurado los diferentes par´ametros de la placa de desarrollo, se proceder´ a con el m´etodo “void loop(void)”, el cual act´ ua como un bucle infinito que realiza todas las tareas programadas de modo repetitivo. Para comenzar el bucle, se debe de comprobar que la mota est´a conectada con el servidor, en caso de que no sea as´ı, se utiliza la funci´on “reconnect()” para establecer dicha conexi´on. Para realizar la publicaci´on de los datos recogidos se utilizar´a la funci´on “mqttPublish()”, seguido de un peque˜ no retardo de un segundo. Este delay es introducido para controlar el funcionamiento de todos los elementos de manera exitosa. Para finalizar el ciclo, se llama al m´etodo “loop()” de PubSubClient, mediante el cual se permite al cliente de MQTT procesar los mensajes entrantes y mantener activa la conexi´on. Funci´ on de bucle infinito
1 2 3
void loop(void) { // Comprueba si el cliente MQTT se ha conectado, si no reconecta if (!mqttClient.connected()) {
Instalaci´ on y Configuraci´ on.
reconnect(); } mqttPublish(); delay(1000);
4 5 6 7
115
// Publica los datos con el protocolo MQTT
8 9 10
mqttClient.loop(); }
Cuando se tenga terminado el sketch, no hay m´as que compilarlo y subirlo a la placa para que se comience a ejecutar en forma de bucle. Para monitorizar el funcionamiento podemos utilizar la funcionalidad del monitor serie de Arduino IDE, como se ha mencionado en m´ ultiples ocasiones.
6.6.
Configuraci´ on adicional
Como u ´ltima parte de este cap´ıtulo, se recoger´a la configuraci´on necesaria para acceder desde cualquier lugar a los diferentes servicios desplegados en una red interna, es decir, apertura de puertos y configuraci´on del servidor DDNS para el modelo de router utilizado. En primer lugar, deberemos destacar que el router usado, durante la realizaci´on de la configuraci´ on expuesta a continuaci´on, es uno de los proporcionados por la compa˜ n´ıa Movistar, en concreto, Mitrastar HGW-2501GN-R2. Toda la informaci´ on referentes a este gateway puede ser encontrada en [77].
116
6.6. Configuraci´ on adicional
Figura 6.27: Router Mitrastar HGW-2501GN-R2.
En la red local, donde se ha realizado el despliegue del sistema dom´otico ejemplo, tendremos que configurar el mapeo de puertos para que se redireccionen las peticiones realizadas al nombre de dominio del router, hacia la direcci´ on IP privada que utiliza la Raspberry Pi, y la utilizaci´on de DNS din´ amico para que autom´aticamente se cambie la direcci´on IP p´ ublica vinculada el nombre de dominio asignado al router, en caso de que el proveedor de Internet la modifique. En primer lugar, se explicar´a el procedimiento de creaci´on de una cuenta No-IP, el cual es un proveedor de servicios de DNS din´amico, y, as´ı, tener a los diferentes servicios desplegados en la red interna, aunque se modifique la direcci´ on IP p´ ublica del router.
Instalaci´ on y Configuraci´ on.
(a) P´ agina principal del sitio web de No-IP.
(b) Centro de control de Hostnames.
(c) Nombres de dominio vinculados a la cuenta de .
Figura 6.28: Sitio web de No-IP y opciones de control de DNS.
117
118
6.6. Configuraci´ on adicional
Para comenzar, deberemos de ir al sitio web de No-IP, el cual podremos encontrar en [78]. Para registrarnos haremos clic en la opci´on ’’, donde rellenaremos los datos solicitados eligiendo el hostname deseado. Para poder ver los hostname vinculados a nuestra cuenta tendremos que pinchar en “Dynamic DNS ”. Aqu´ı, tendremos la opci´on de agregar un nuevo nombre de dominio. Para finalizar la configuraci´on del DNS din´amico, deberemos de configurar el router. En el caso de que nuestra IP p´ ublica haya sido modificada deberemos de actualizar la IP del nombre de dominio de nuestro gateway. Por ello, introduciremos los datos necesarios de No-IP, y la informaci´on referente al dominio ser´ a actualizada de manera autom´atica. En la pantalla principal del configurador del router Mitrastar utilizado deberemos de ir a “Configuraci´on de la red” → “DNS”, aqu´ı, seleccionaremos el proveedor del servicio de DNS din´amico, y completaremos los campos de nombre de dominio, y contrase˜ na. Este proceso se finalizar´a pinchando en el bot´ on “Aplicar”. La configuraci´on realizada, en nuestro caso, se observa en la imagen 6.29
Figura 6.29: Configuraci´on DDNS en el router.
En caso de que nuestro router no tenga la opci´on de configurar DNS din´ amico con el proveedor No-IP, tenemos la opci´on de instalar la aplicaci´ on de este servicio en los sistemas operativos. En su web podremos elegir el sistema utilizado y seguir los pasos indicados para su instalaci´on y configuraci´ on. De este modo, tambi´en se realizar´a una actualizaci´on de la direcci´on IP p´ ublica de nuestra puerta de enlace.
Instalaci´ on y Configuraci´ on.
119
Posteriormente, deberemos de realizar la configuraci´on relacionada con el mapeo de puertos del router, para que las peticiones dirigidas a un puerto concreto del router sean redireccionadas al puerto establecido de un dispositivo de la red local. Para ello, en el router Mitrastar empleado, deberemos de ir a “Configuraci´on de la red” → “NAT” → “Port Forwarding”, pincharemos en “A˜ nadir nueva regla” y aparecer´ a una ventana emergente con los campos a rellenar. En la imagen 6.30a se muestra un ejemplo de configuraci´on del puerto 80, en el cual est´ a alojado el servidor web de OpenHAB.
(a) Configuraci´ on de un puerto del router.
(b) Puertos configurados en el gateway local.
Figura 6.30: Configuraci´on del reenv´ıo de puertos.
120
6.6. Configuraci´ on adicional
En la figura 6.30b, podemos estudiar los diferentes puertos configurados para la red en la que se han desplegado los diferentes servicios. Los puertos 80 (HTTP) y 443 (HTTPS) son empleados para la conexi´on con el servidor web de OpenHAB, y aunque, este realice las escuchas en los puertos 8080 (HTTP) y 8443 (HTTPS), como se ha mencionado con anterioridad, se configura un proxy para incorporar algo m´as de seguridad al servicio. Adem´as, se utilizar´a el puerto 44380 para emplear una red VPN, es la opci´on m´as recomendada, en posibles conexiones desde el exterior (se definir´a una regla tanto para UDP como T). Por u ´ltimo, se detallar´a el procedimiento seguido para la configuraci´on de una red VPN haciendo uso de la Raspberry. Esta configuraci´on se realizar´a con PiVPN, una herramienta que hace uso de OpenVPN, solo que est´a optimizado para este sistema empotrado. Siguiendo la explicaci´on de [79], el primer comando a utilizar para iniciar la instalaci´ on es: $ curl -L https :// install . pivpn . io | bash
Antes de comenzar con la instalaci´on de OpenVPN, el sistema operativo comprueba que est´e actualizado, para, en caso contrario, realizar la pertinente acci´ on. El primer aviso recibido nos indica que la Raspberry se convertir´ a en un servidor de OpenVPN, por lo que la direcci´on IP de nuestro sistema debe ser est´ atica, tanto dentro de nuestra red local como en el exterior. Por lo tanto, deberemos de emplear la direcci´on DDNS configurada anteriormente. En pasos posteriores deberemos de elegir la interfaz de red que proporciona Internet al servidor, reconociendo la direcci´on IP de esta como la direcci´ on est´ atica del servidor VPN. M´as adelante deberemos de elegir un del sistema operativo y se nos recomienda habilitar las actualizaciones no-atendidas, debido a la exposici´on al exterior del servidor. Otro aspecto importante es elegir adecuadamente el protocolo de transporte, T o UDP, que ser´a empleado en las comunicaciones por nuestro t´ unel VPN y el puerto en el que se realizar´an escuchas. Por defecto es el 443, pero como nosotros ya lo tenemos en uso, emplearemos el 44380.
Instalaci´ on y Configuraci´ on.
121
En este punto, la instalaci´ on nos solicita el tama˜ no de clave de encriptaci´on deseado, el asistente recomienda 2048-bits, por lo que elegiremos esta opci´on. El proceso de creaci´ on de claves puede tardar un poco. Una vez haya finalizado la generaci´on de las claves, el programa preguntar´a la forma de acceder al servidor VPN, como lo queremos para realizar conexiones desde el exterior y tenemos que evitar posibles cambios de la direcci´on IP p´ ublica de nuestra puerta de enlace, emplearemos la opci´on “DNS Entry”, para configurar la direcci´on DDNS de No-IP utilizada. Seguidamente, el asistente nos pedir´a que elijamos la opci´on de servidor DNS para realizar la resoluci´ on de nombres en Internet, elegiremos los dos servidores de Google sugeridos, 8.8.8.8 y 8.8.4.4. Finalmente, el asistente de configuraci´on nos informa de c´omo crear s y la ubicaci´ on del directorio de instalaci´on, dando paso al u ´ltimo mensaje que pide el reinicio del sistema. Una vez haya finalizado el reinicio, deberemos de crear al menos un , para ello utilizaremos el comando: $ pivpn add
Se pedir´ a que introduzcamos un nombre de y la contrase˜ na, el comando empleado crear´ a los certificados y claves para el . Se crear´a un fichero de extensi´ on “.ovpn”, el cual deber´a ser cargado en el cliente para poder conectarse al servidor. En el fichero de configuraci´ on “/etc/openvpn/server.conf ”, podremos configurar el conjunto de direcciones IP utilizadas en la red virtual. El u ´ltimo paso, antes de poder conectar los dispositivos a la red VPN es configurar el reenv´ıo de tr´ afico y el enmascaramiento de los s. Para configurar el reenv´ıo de paquetes bastar´a con buscar la l´ınea “#net.ipv4.ip forward=1 ” en el fichero “/etc/sysctl.conf ” y eliminar la almohadilla. Hay que destacar que para cargar los cambios deberemos de utilizar el comando:
$ sysctl -p
122
6.6. Configuraci´ on adicional
El enmascaramiento de los s se realiza, de manera sencilla, creando una nueva regla en iptables con la orden:
$ iptables -t nat -A POSTROUTING -s 1 9 2 . 1 68 . 1 . 2 4 0 / 2 9 -o wlan0 -j MASQUERADE
Para el caso del cliente de Windows, basta con ejecutar el cliente OpenVPN y seleccionar “Import File”. Elegiremos el fichero de extensi´on “.ovpn” anterior y clicaremos en “Connect”. Se pedir´a la contrase˜ na y, cuando la compruebe, realizar´ a la conexi´on, asign´andonos una direcci´on IP de la red configurada. En la imagen 6.31 se puede observar la salida del comando “ipconfig”, donde podemos observar la direcci´on IP de la VPN asignada a la interfaz WiFi del PC.
Figura 6.31: Utilizaci´on de VPN configurada en Windows.
Para el caso de conectarnos mediante el cliente de iPhone, mediante iTunes, tendremos que transferir el fichero ovpn generado. Para incluirlo tendremos que seleccionar la aplicaci´on del cliente OpenVPN y en la parte inferior observaremos el bot´on “A˜ nadir archivo”.
Instalaci´ on y Configuraci´ on.
123
Finalmente, en el dispositivo m´ovil tendremos que elegir el fichero de configuraci´ on e introducir la contrase˜ na y para realizar la conexi´on pincharemos en el bot´ on “Conectar ”. El cliente de OpenVPN proporciona una serie de detalles de la conexi´ on como puede ser la direcci´on IP, el tiempo de conexi´on y el tr´ afico de datos que ha pasado por el t´ unel establecido. En la figura 6.32 podemos observar una captura de una conexi´on reci´en establecida.
Figura 6.32: Conexi´ on a red VPN mediante cliente iOS.
Cap´ıtulo 7
Fase de pruebas Este cap´ıtulo congrega todas las pruebas realizadas al despliegue llevado a cabo en el presente proyecto. Estas comprobaciones han servido para examinar el comportamiento de cada una de las partes de la que consta la instalaci´ on. Durante el desarrollo de la instalaci´on y configuraci´on de cada uno de los servicios se han realizado pruebas suficientes para declarar el correcto funcionamiento de los mismos, de tal modo que ante posibles fallos, estuvieran acotado de la mejor manera posible. En el despliegue realizado deberemos de tener en cuenta el funcionamiento tanto de los diferentes clientes como del servidor. Las pruebas han sido realizadas con el PC personal, utilizado en todo el proyecto (HP Envy 15), un iPhone 6s Plus, como cliente con sistema operativo iOS, y una tablet BQ Aquaris M10, como sistema Android. Otras pruebas ser´an realizadas desde el empotrado donde se ha realizado el despliegue de los diferentes servicios. Las pruebas realizadas han sido principalmente para comprobar el funcionamiento e interacci´ on entre el servidor y los clientes (tanto para dispositivos iOS como Android), la correcta comunicaci´on entre dispositivos, la aplicaci´ on satisfactoria de las medidas de seguridad incorporadas, la correcta creaci´ on del t´ unel para las comunicaciones mediante la red VPN, y la validaci´ on de los mecanismos de autenticaci´on de s antes de acceder a la informaci´ on proporcionada por la instancia de openHAB.
125
126 En primer lugar se comprob´o el funcionamiento de las aplicaciones cliente para dispositivos iOS y Android. Para ello, bast´o con realizar la descarga y ejecuci´ on de estas. La actividad de las aplicaciones puede comprobarse con el uso de un sitemaps de demostraci´on proporcionado por openHAB.
Figura 7.1: Demo de sitemaps de openHAB.
Realizada esta validaci´on podremos proceder con la comprobaci´on de la comunicaci´ on entre las aplicaciones cliente y el servidor desplegado en la Raspberry. En esta ocasi´on deberemos tener en cuenta dos aspectos importantes, el lugar desde donde se pretende conectar al servidor, es decir, una conexi´ on desde dentro de la red local o desde cualquier lugar externo, y si la comunicaci´ on se realiza utilizando HTTP o HTTPS. Esto deberemos de tenerlo en cuenta a la hora de configurar la direcci´on IP o el nombre de dominio donde se encuentra la instancia de openHAB. (Si se realiza la conexi´on mediante la VPN creada, se emplear´a la misma URL en ambos casos).
Fase de pruebas
127
Figura 7.2: Conexi´ on con nuestra instancia de openHAB.
Posteriormente, cuando se incorpor´o a la instalaci´on el mecanismo de autenticaci´ on de s, se realizaron algunas comprobaciones, en las cuales, si no se introduc´ıa un y contrase˜ na correcta se volv´ıa a pedir reiterativamente hasta que fuese la apropiada. En el caso de cancelar la petici´on de nombre de y contrase˜ na se recib´ıa por pantalla el mensaje mostrado en la figura 7.3.
Figura 7.3: Error durante autenticaci´on por incorrecto.
Otro servicio utilizado en este proyecto ha sido un br´oker de MQTT, por lo que tambi´en fue necesario validar que realizaba su actividad de manera
128 satisfactoria. Para ello, se ha utilizado la aplicaci´on MQTTLens del navegador Google Chrome y el propio cliente de Mosquitto, utilizado desde la Raspberry. En la primera figura 7.4a podemos apreciar el registro de datos enviados al br´ oker MQTT desde la mota ejemplo, visualizados desde MQTTLens. Adem´ as en la figura 7.4b podemos ver la actividad del br´oker con el cliente de Mosquitto.
(a) Actividad de br´oker MQTT visualizado con MQTTLens.
(b) Actividad de br´ oker MQTT visualizado con cliente de Mosquitto.
Figura 7.4: Validaci´on br´oker MQTT.
Cuando se pretenda realizar una comunicaci´on m´as segura se tiene disponible la opci´ on de usar una red VPN, en la Raspberry hemos comprobado que se ha creado una interfaz virtual “tun0”, con la direcci´on IP “192.168.1.241”, puesto que como se explic´o anteriormente se emplea la red virtual “192.168.1.240/29”. La comunicaci´on a trav´es de la red VPN se puede apreciar en la imagen 7.5a, donde observamos la duraci´on que ha tenido la conexi´ on y el tr´ afico de datos, tanto entrante como saliente.
Fase de pruebas
129
(a) Interfaz “tun0”de Raspberry Pi.
(b) Conexi´ on a Internet mediante la red VPN.
Figura 7.5: Validaci´on br´oker MQTT.
Tambi´en se realizaron diversas pruebas de funcionamiento de la mota, comprobando la actividad de sensores y actuadores. En primer lugar, se verific´o que el sensor DHT22 realizaba sus correspondientes medidas de tem-
130 peratura y humedad. En segundo lugar, se examin´o el funcionamiento del actuador, el led. Para concluir, se confirm´o la correcta actividad del conjunto de la mota ejemplo con respecto a openHAB.
Figura 7.6: Salida de monitor serie de Arduino IDE.
Prueba de ello, en la figura 7.6, podemos observar la salida del monitor serie, incluido en Arduino IDE. En ella se incluyen tanto las mediciones del sensor DHT22 como los mensajes que llegan por MQTT con el encendido o apagado del led.
Fase de pruebas
131
(a) Mota y cliente openHAB.
(b) Mota y aplicaci´on Home.
Figura 7.7: Control de la mota ejemplo desde terminal m´ovil.
132 En las figuras 7.7a y 7.7b se puede apreciar el funcionamiento y control de la mota ejemplo tanto con la aplicaci´on de openHAB como con Home, aplicaci´ on nativa de Apple. Adicionalmente, se utiliza la plataforma ThingSpeak para registrar los valores le´ıdos por el sensor DHT22. Debido a esto, se comprob´o que la mota enviaba correctamente los datos al canal habilitado. Esta prueba puede apreciarse en la figura 7.8, donde se observar las gr´aficas dibujadas con los valores del sensor.
Figura 7.8: Canal de ThingSpeak.
Por u ´ltimo, se realizaron una serie de comprobaciones de tolerancia a fallos tanto en el servidor de openHAB como en la mota ejemplo. En primer lugar, mediante la incorporaci´on de la nube de openHAB se a˜ naden notificaciones al servicio. As´ı, podemos saber cu´ando el servicio est´a activo o no, y un podr´ıa avisar enviando un mensaje a un determinado . Una muestra de ello se puede observar en la imagen 7.9.
Fase de pruebas
133
Figura 7.9: Notificaciones del servidor al cliente iOS configurado.
Por otro lado, tenemos la mota MQTT, la cual en caso de apagarse no notifica nada y en el servidor de openHAB se quedan almacenados los u ´ltimos datos enviados, por tanto, quedar´ıa incorporar en el futuro alg´ un m´etodo de comprobaci´ on de actividad, como puede ser la verificaci´on de actividad en la red de este dispositivo mediante la definici´on del objeto en el servidor de openHAB. De este modo y de manera continuada, se ir´an comprobando que las diferentes motas de sensores y/o actuadores se encuentran disponibles, por el contrario, se podr´ıa lanzar una acci´on determinada, ya sea una notificaci´ on mediante Twitter, Telegram o la nube de openHAB. Hemos podido comprobar que todos los servicios funcionan correctamente, y que la comunicaci´ on entre estos se realiza satisfactoriamente, aunque no se pueda comprobar de manera continuada la actividad de las motas, se puede decir que el sistema funciona de manera correcta. Para finalizar el cap´ıtulo, se comentar´a el consumo energ´etico de la mota ejemplo. Este ha sido obtenido con la ayuda de un medidor de consumo USB. En esta prueba se tuvo conectada la mota a la corriente, durante algo m´as de siete horas y media, haciendo mediciones de temperatura y humedad, y cambiando el estado del led en varias ocasiones.
134 Los datos registrados son mostrados en la figura 7.10, donde observamos un gasto energ´etico de 125 mAh, con un voltaje de entrada al dispositivo de 5.12 V, en un tiempo de 7 horas y 35 minutos.
Figura 7.10: Consumo energ´etico de la mota ejemplo.
Cap´ıtulo 8
Conclusiones y L´ıneas Futuras. 8.1.
Conclusiones.
Una vez llegados al final del proyecto, se concluir´a con una recopilaci´on de reflexiones, en las que se incluir´an los principales objetivos alcanzados y una valoraci´ on personal de lo que ha supuesto la realizaci´on del presente Trabajo Fin de Grado. Adem´ as, se indicar´an posibles l´ıneas que trabajar en un futuro. El presente proyecto buscaba la realizaci´on de un servidor dom´otico de bajo coste, de tal modo que la experiencia de poseer una vivienda inteligente pudiese ser accesible a cualquier persona sin importar su poder adquisitivo. Para la obtenci´ on de la soluci´ on a este problema, desde el asentamiento de las bases iniciales, se acord´ o la utilizaci´on de herramientas con licencias Open-Source. La utilizaci´ on de openHAB y Arduino ha supuesto la consecuci´on de la gran mayor´ıa de objetivos propuesto para este proyecto. Estos se han visto apoyados por la b´ usqueda de la mayor compatibilidad posible con los diferentes dispositivos m´ oviles del mercado actual. La motivaci´ on principal de este proyecto fue un inter´es propio del autor, en el ´ambito de la dom´ otica y la r´apida evoluci´on de Internet de las Cosas. Se puede decir que el estudio llevado a cabo ha servido para descubrir un nuevo mundo conceptual hasta entonces desconocido.
135
136
8.1. Conclusiones.
Un aspecto a remarcar es el desconocimiento que se tiene del l´ımite de la inteligencia artificial, tanto Stephen Hawking como Bill Gates y Elon Musk, algunas de las mayores mentes del mundo tecnol´ogico, piensan que puede llegar el momento en el que la inteligencia artificial sea demasiado “inteligente” como para que los seres humanos puedan controlarla. Esto puede suponer que el propio avance de la tecnolog´ıa sea el final de la raza humana. [80] Las aportaciones m´ as destacadas de este proyecto son: • Obtener una soluci´on de bajo coste compatible con la mayor´ıa de terminales del mercado. Adem´as de ser altamente integrable con otros elementos y/o soluciones dom´oticas desarrolladas por terceros, se trata de un sistema operable tanto con sistemas m´oviles Android como iOS, y se puede acceder a su informaci´on a trav´es de un navegador web. Por lo que hace de este, un sistema compatible con cualquier dispositivo capaz de realizar una conexi´on a Internet. • Permite una alta escalabilidad, ya que las motas dom´oticas o elementos incorporados a la instalaci´on inteligente pueden ser ampliadas en cualquier momento realizando pocos cambios en el servidor. • Empleo de seguridad en las comunicaciones mediante protocolos basados en SSL/TLS, como HTTPS o MQTTS. Por otro lado, se tiene la posibilidad de establecer la conexi´on con la red interna mediante una red VPN, configurada para tal fin. Estas funciones de seguridad incorporan la creaci´on de certificados y claves para cada . • A las motas MQTT se les puede incorporar un gran n´ umero de sensores o actuadores, con ellos se conseguir´ıa una instalaci´on m´as completa y con mayor capacidad de acci´on frente a diversos eventos posibles. • Se han elegido herramientas de utilizaci´on sencilla, de este modo, el servidor puede ser utilizado por personas de cualquier edad, teniendo en cuenta algunas pautas recomendadas.
Otros aspectos interesantes a describir son los problemas surgidos durante la realizaci´ on del despliegue del servicio, algunos son:
Conclusiones y L´ıneas Futuras.
137
• Compatibilidad de NodeMCU con los protocolos utilizados. Este ha sido el problema m´ as relevante en el proyecto, ha supuesto la realizaci´ on de una exhaustiva investigaci´on de diferentes librer´ıas del protocolo MQTT para saber cu´al era la mejor opci´on, en funci´on de los objetivos marcados. Actualmente la placa de desarrollo empleada no soporta el protocolo MQTTS, por lo que ha sido necesaria la incorporaci´on de otros mecanismos de seguridad, como puede ser el env´ıo de los datos MQTT dentro de la red local o la conexi´on al servidor mediante el empleo de una red VPN. • Problemas de emparejamiento de openHAB con la aplicaci´on “Home”de Apple. El proceso de emparejamiento entre el servidor y la aplicaci´ on nativa de Apple, en el supuesto de que la plataforma de instalaci´ on del servidor (Raspberry Pi) fuese reiniciada, debido a un error en la instalaci´ on del complemento de openHAB. Como se explic´ o en la secci´ on 6.3, basta con controlar la creaci´on del fichero de configuraci´ on, pero para ello se deb´ıa instalar dicho add-on de manera reiterada hasta que fuese generado correctamente. • Surgieron algunos problemas durante el estudio y utilizaci´on de la herramienta Arduino IDE, debido a que no se hab´ıa utilizado hasta el momento. Aunque estos se solucionaron haciendo una b´ usqueda intensiva de los diferentes errores que surg´ıan durante el proceso de creaci´on del sketch de la mota MQTT.
Sin m´ as, se puede concluir indicando que los objetivos propuestos y perseguidos durante la realizaci´ on de este proyecto han sido conseguidos de manera satisfactoria. Por lo tanto, se ha conseguido realizar y/o utilizar una herramienta dom´ otica que interopere con el resto de servicios inteligentes, que puedan estar desplegados en un hogar. Asimismo, esta soluci´on posee un coste m´ınimo al haber utilizado u ´nicamente software open-source.
138
8.2.
8.2. L´ıneas futuras.
L´ıneas futuras.
Se han conseguido la mayor´ıa de los objetivos propuestos en el planteamiento del proyecto, aquel que no se ha podido cumplir ha sido propiciado por la incompatibilidad actual de las diferentes herramientas utilizadas. Este ha sido el caso del empleo de MQTTS con NodeMCU, puesto que actualmente no son compatibles. Hay l´ıneas de investigaci´on buscando y desarrollando diferentes m´etodos para que esta incompatibilidad desaparezca y se puedan realizar implementaciones cada vez m´as seguras. Algunas ideas que pueden ser desarrolladas en futuras l´ıneas de trabajo son las siguientes: • Empleo de MQTTS: Esta l´ınea de trabajo est´a condicionada a la creaci´ on de una librer´ıa de Arduino, para que la placa de desarrollo sea capaz de soportar este protocolo seguro. Una vez se haya desarrollado dicha librer´ıa, ser´ıa relativamente sencilla la incorporaci´on de MQTTS al presente proyecto. • Escalabilidad de las motas MQTT: Con esta propuesta se quiere dar paso a que en la actualidad existen multitud de sensores y/o actuadores que pueden ser incorporados a las motas. De este modo, el servidor de openHAB puede controlar varias de estas, aunque est´en localizadas en diferentes lugares del hogar. Estas medidas hacen que el servidor dom´ otico instalado sea cada vez m´as inteligente y tenga m´as posibilidades de acci´ on frente a determinados eventos. • Comprobaci´ on de disponibilidad de motas: Como se mencion´o en la fase de pruebas, se podr´ıa incluir la definici´on de objetos que identifiquen las motas de sensores y/o actuadores, de tal forma que se consiga programar una notificaci´on o acci´on determinada en el caso de malfuncionamiento o ca´ıda del servicio al que est´e destinada cada una.
• Automatizaci´ on de OpenHAB: Esta herramienta puede ampliar su actuaci´ on gracias a la configuraci´on de avisos mediante Twitter, e-mail, aplicaciones IFTTT (IF This, Then That), o simplemente mediante notificaciones en un smartwatch (Pebble). Adem´as, si los sensores registran unos datos determinados pueden programarse acciones autom´ aticas, si un sensor MQ-2 (detector de humo) se activa, se podr´ıa encender un extractor, etc.
Conclusiones y L´ıneas Futuras.
139
Al fin y al cabo las l´ıneas de trabajo futuras depender´an del desarrollo de diferentes alternativas de integraci´on a´ un no realizadas, por lo que la principal de l´ınea de trabajo ser´ıa el apoyo de esta investigaci´on y desarrollo. Puesto que openHAB es altamente compatible con multitud de mecanismos y/o servicios de terceros, una instalaci´on dom´otica realizada con esta herramienta open-source, puede “complicarse” (ampliarse con diferentes elementos) todo lo que se desee.
8.3.
Valoraci´ on personal.
Para concluir la elaboraci´ on de esta memoria, en esta u ´ltima secci´on se expondr´ a una evaluaci´ on o reflexi´ on personal, no solo del proyecto si no del recorrido hasta llegar a este punto. Este Trabajo Fin de Grado es la meta de un largo trayecto de formaci´on, en este tiempo he tenido ocasi´ on de adquirir capacidades tanto personales como profesionales con las cuales ser´a mucho m´as sencillo afrontar nuevas situaciones. Como en cualquier ingenier´ıa, una de las aptitudes b´asicas que se busca que consiga el estudiante es la resoluci´on de problemas. De esta forma, por muy dif´ıcil que sea la b´ usqueda, se sea capaz de anteponerse a las adversidades y a posibles fracasos, para as´ı tener la valent´ıa de afrontar proyectos cada vez de mayor envergadura en todos los aspectos de la vida. En este proyecto se han conseguido cada uno de los objetivos principales propuestos al inicio. Para ello han sido necesarios algunos conocimientos adquiridos durante los 4 a˜ nos cursados en el grado, pero sobretodo de aquellas materias relacionadas con la rama de telem´atica, como pueden ser: redes VPN, protocolos de Internet y, sobre todo, la necesidad de incorporar seguridad a nuestros servicios, para evitar potenciales ataques. Aunque no hay que olvidar que ha sido necesaria la ampliaci´on de estos conocimientos con otras herramientas, no vistas hasta el momento, como openHAB o Arduino. Se puede decir que no hay nada mejor que la satisfacci´on de haber logrado un proyecto propuesto hace alg´ un tiempo con trabajo y esfuerzo propio. A m´ı en concreto me ha mostrado un mundo bastante interesante, en el cual ten´ıa intriga y al que sin duda alguna y en la medida de lo posible, seguir´e dedicando algo de tiempo en los a˜ nos venideros.
Bibliograf´ıa [1] Intel. El Internet de las cosas empieza con Intel Inside. Accedido en Noviembre de 2016. URL: https://www.intel.es/content/www/es/ es/internet-of-things/overview.html. [2] SEAT. Ateca Smart City Car. Accedido en Noviembre de 2016. URL: http://www.seat.es/compania/noticias/eventos/ ateca-smart-city-expo-world-congress.html. R GOTM Automated Driving Solutions. Accedido en No[3] Intel. Intel viembre de 2016. URL: https://www.intel.es/content/www/es/es/ automotive/go-automated-driving.html.
[4] Cisco. Internet of Things (IoT). Accedido en Noviembre de 2016. URL: http://www.cisco.com/c/en/us/solutions/internetof-things/overview.html. [5] Cisco. Education. Accedido en Noviembre de 2016. URL: http://www. cisco.com/c/en/us/solutions/industries/education.html. [6] Cisco. Healthcare. Accedido en Noviembre de 2016. URL: http:// www.cisco.com/c/en/us/solutions/industries/education.html. [7] Cisco. Connected Transportation. Accedido en Noviembre de 2016. URL: http://www.cisco.com/c/en/us/solutions/ industries/education.html. [8] Microsoft. Internet de las cosas (IoT). Accedido en Noviembre de 2016. URL: https://www.microsoft.com/es-es/internet-of-things/. [9] IoT Agenda. What is Internet of Everything (IoE)? Accedido en Noviembre de 2016. URL: http://internetofthingsagenda. techtarget.com/definition/Internet-of-Everything-IoE. [10] PUE Educaci´ on. Cisco Networking Academy: Internet de las Cosas. Accedido en Noviembre de 2016. URL: https://www.pue.es/educacion/ cisco-networking-academy/internet-de-las-cosas. 141
142
BIBLIOGRAF´IA
[11] Ericsson y Microsoft se unen para acelerar el Internet de las cosas. El Economista, 2017. Consultado en Noviembre de 2016. URL: http://www.eleconomista.es/economia/noticias/8367161/ 05/17/Ericsson-y-microsoft-se-unen-para-acelerar-elinternet-de-las-cosas.html. [12] Microsoft. ¿Qu´e es Azure? Servicio en la nube de Microsoft. Accedido en Noviembre de 2016. URL: https://azure.microsoft.com/es-es/ overview/what-is-azure/. [13] TECNOLOGIA f´ acil. Dom´otica dom´estica: Casas Inteligentes, 2017. Accedido en Noviembre de 2016. URL: http://tecnologia-facil. com/que-es/domotica-domestica-casas-inteligentes/. [14] Asociaci´ on Espa˜ nola de Dom´otica e Inm´otica CEDOM. Qu´e es Dom´otica. Accedido en Noviembre de 2016. URL: http://www.cedom.es/ sobre-domotica/que-es-domotica. [15] Jeedom. La domotique innovante. Accedido en Diciembre de 2016. URL: https://www.jeedom.com/site/fr/index.html. [16] DEC Industrie. Kit domotique Jeedom Pro. Accedido en Diciembre de 2016. URL: https://dec-industrie.com/Kit-domotique-JeedomPro. [17] Eedomus. ¿Qu´e es? — eedomus. Accedido en Diciembre de 2016. URL: http://www.eedomus.com/es/que-es/. [18] Eedomus. Documentation eedomus. Accedido en Diciembre de 2016. URL: http://doc.eedomus.com/view/Liste_des_p%C3%A9riph%C3% A9riques. [19] Domboo. Controladores dom´oticos. Accedido en Diciembre de 2016. URL: https://domboo.es/tienda/domotica/controladoresdomoticos/. [20] Ltd. Vera Control. Smarter Home Control. Accedido en Diciembre de 2016. URL: http://getvera.com/. [21] Ltd. Vera Control. VeraEdge Home Controller. Accedido en Diciembre de 2016. URL: http://getvera.com/controllers/veraedge/. [22] Ltd. Vera Control. VeraPlus Advanced Home Controller. Accedido en Diciembre de 2016. URL: http://getvera.com/controllers/ veraplus/. [23] Ltd. Vera Control. VeraSecure Advanced Smart Home Security Controller. Accedido en Diciembre de 2016. URL: http://getvera.com/ controllers/verasecure/.
BIBLIOGRAF´IA
143
[24] Zipato. ZipaTile. Accedido en Diciembre de 2016. URL: https://www. zipato.com/product/zipatile-zbee. [25] Leotec SmartHome. M´ odulos y Packs disponibles. Accedido en Enero de 2017. URL: http://smarthome.leotec.com/modulos-y-packsdisponibles/. [26] PcComponentes. Dom´ otica Leotec. Accedido en Enero de 2017. URL: https://www.pccomponentes.com/domotica/leotec. [27] ARCHOS. ARCHOS Smart Home, Object. Accedido en Enero de 2017. URL: http://www.archos.com/es/products/objects/chome/ ash/index.html. [28] Xiaomi-Mi.com. Xiaomi Mi Smart Home Kit. Accedido en Enero de 2017. URL: https://xiaomi-mi.com/sockets-and-sensors/ xiaomi-mi-smart-home-kit/. [29] GearBest. Xiaomi Smart Home Best Deals +Online Shopphing. Accedido en Enero de 2017. URL: http://www.gearbest.com/xiaomismart-home-_gear/. [30] Domoticz. Control at your finger tips. Accedido en Enero de 2017. URL: https://domoticz.com/. [31] Domoticz. Domoticz Wiki Manual. Consultado en Enero de 2017. URL: https://www.domoticz.com/wiki/Domoticz_Wiki_Manual. [32] Home Assistant. Awaken your home. Accedido en Enero de 2017. URL: https://home-assistant.io/. [33] Raspberry Pi Foundation. Raspberry Pi Foundation - . Accedido en Noviembre de 2016. URL: https://www.raspberrypi.org/ about/. [34] Hackaday. Introducing the Raspberry Pi 3. Accedido en Noviembre de 2016. URL: http://hackaday.com/2016/02/28/introducing-theraspberry-pi-3/. [35] Raspberri Pi Foundation. Raspberry Pi 3 Model B. Accedido en Noviembre de 2016. URL: https://www.raspberrypi.org/products/ raspberry-pi-3-model-b/. [36] Raspberri Pi Foundation. Raspberry Pi Zero W. Accedido en Noviembre de 2016. URL: https://www.raspberrypi.org/products/ raspberry-pi-zero-w/.
144
BIBLIOGRAF´IA
[37] Raspberry Pi Foundation. NOOBS. Consultado en Noviembre de 2016. URL: https://www.raspberrypi.org/documentation/ installation/noobs.md. [38] RasPi.TV. How much power does Pi Zero W use? 2017. Consultado en Marzo de 2017. URL: http://raspi.tv/2017/how-much-powerdoes-pi-zero-w-use. [39] MQTT.org. MQTT. Accedido en Febrero de 2017. URL: http:// mqtt.org/. [40] MQTT.org. Frequently Asked Questions. Accedido en Febrero de 2017. URL: http://mqtt.org/faq. [41] IoT Agenda. What is MQTT (MQ Telemetry Transport)? Accedido en Febrero de 2017. URL: http://internetofthingsagenda. techtarget.com/definition/MQTT-MQ-Telemetry-Transport. [42] OASIS. MQTT Version 3.1.1. Consultado en Marzo de 2017. URL: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/ mqtt-v3.1.1-os.pdf. [43] Embedded101. Develop M2M IoT Devices, 2013. Consultado en Marzo de 2017. URL: http://www.embedded101.com/Develop-M2M-IoTDevices-Ebook/DevelopM2MIoTDevicesContent/ArticleId/220/33-Message-Publish-Subscribe-and-Topic. [44] Embedded101. Develop M2M IoT Devices, 2013. Consultado en Marzo de 2017. URL: http://www.embedded101.com/Develop-M2M-IoTDevices-Ebook/DevelopM2MIoTDevicesContent/ArticleId/224/37-Message-Flow. [45] Mosquitto. An Open Source MQTT v3.1/v3.1.1 Broker. Consultado en Marzo de 2017. URL: https://mosquitto.org/. [46] Eclipse. Eclipse Mosquitto. Consultado en Marzo de 2017. URL: https://projects.eclipse.org/projects/technology.mosquitto. [47] Roger A Light. Mosquitto: server and client implementation of the MQTT protocol. The Journal of Open Source Software, 2(13), may 2017. Consultado en Marzo de 2017. URL: https://doi.org/10. 21105/joss.00265, doi:10.21105/joss.00265. [48] OpenHAB Community. Introduction. Consultado en Junio de 2017. URL: https://www.openhab.org/introduction.html. [49] Eclipse SmartHome. A Flexible Framework for the Smart Home. Consultado en Junio de 2017. URL: http://www.eclipse.org/ smarthome/.
BIBLIOGRAF´IA
145
[50] OpenHAB Community. Empowering the Smart Home. Consultado en Junio de 2017. URL: http://docs.openhab.org/concepts/index. html. [51] Espressif Systems IOT Team. ESP8266EX Datasheet, 2015. Consultado en Marzo de 2017. URL: http://www.esp8266.com/wiki/lib/exe/ fetch.php?media=0a-esp8266_datasheet_en_v4.3.pdf. [52] ESP266 community. ESP8266 WIKI, 2017. Consultado en Marzo de 2017. URL: http://www.esp8266.com/wiki/doku.php. [53] NodeMCU Team. An open-source firmware based on ESP8266 wifisocket. Consultado en Marzo de 2017. URL: http://nodemcu.com/ index_en.html#fr_54747661d775ef1a3600009e. [54] Marcel St¨ or. Comparison of ESP8266 NodeMCU development boards. Consultado en Marzo de 2017. URL: https://frightanic.com/iot/ comparison-of-esp8266-nodemcu-development-boards/. [55] WEMOS Electronics. D1 mini Lite. Consultado en Marzo de 2017. URL: https://wiki.wemos.cc/products:d1:d1_mini_lite. [56] WEMOS Electronics. D1 mini. Consultado en Marzo de 2017. URL: https://wiki.wemos.cc/products:d1:d1_mini. [57] WEMOS Electronics. D1 mini Pro. Consultado en Marzo de 2017. URL: https://wiki.wemos.cc/products:d1:d1_mini_pro. [58] RAYSHOBBY.NET. Open-source Electronics, DIY hobby projects. Consultado en Abril de 2017. URL: http://rayshobby.net/cart/ esptoy. [59] Arduino. Arduino -Software, 2017. Consultado en Marzo de 2017. URL: https://www.arduino.cc/en/main/software#. [60] Arduino. Getting Started - First step with Arduino, 2017. Consultado en Marzo de 2017. URL: http://www.arduino.org/learning/ getting-started. [61] Apple Inc. Toma el mando de tu casa, 2017. Consultado en Mayo de 2017. URL: https://www.apple.com/es/ios/home/. [62] Apple Inc. Homekit - Todos los rios. Consultado en Mayo de 2017. URL: https://www.apple.com/es/shop/accessories/allaccessories/homekit. [63] OpenVPN Inc. Overview of openvpn - openvpn community. Consultado en Mayo de 2017. URL: https://community.openvpn.net/openvpn/ wiki/OverviewOfOpenvpn.
146
BIBLIOGRAF´IA
[64] OpenVPN Inc. OpenVPN - . Consultado en Mayo de 2017. URL: https://openvpn.net/index.php/about-menu/aboutus.html. [65] OpenVPN Inc. OpenVPN Community Software. Consultado en Mayo de 2017. URL: https://openvpn.net/index.php/open-source/ overview.html. [66] ThingSpeak. Learn More - ThingSpeak IoT. Consultado en Abril de 2017. URL: https://thingspeak.com/pages/learn_more. [67] Fritzing. Getting Started. Consultado en Mayo de 2017. URL: http: //fritzing.org/learning/. [68] Raspberry Pi Foundation. Raspbian for Raspberry Pi. Consultado en Febrero de 2017. URL: https://www.raspberrypi.org/ s/raspbian/. [69] Trasteando con Arduino. Instalando y configurando Mosquitto en la Raspberry Pi, 2014. Consultado en Abril de 2017. URL: http://trasteandoarduino.com/2014/01/16/instalando-yconfigurando-mosquitto-en-la-raspberry-pi/. [70] Jan-Piet Mens. Installing Mosquitto on a Raspberry Pi, 2013. Consultado en Abril de 2017. URL: http://jpmens.net/2013/09/01/ installing-mosquitto-on-a-raspberry-pi/. [71] Trasteando con Arduino. Instalando y configurando Mosquitto en la Raspberry Pi (parte 2), 2014. Consultado en Abril de 2017. URL: http://trasteandoarduino.com/2014/04/17/instalando-yconfigurando-mosquitto-en-la-raspberry-pi-parte-2/. [72] OpenHAB Community. OpenHAB 2 on Linux. Consultado en Abril de 2017. URL: http://docs.openhab.org/installation/linux.html. [73] OpenHAB Community. Overview - openHAB 2. Consultado en Abril de 2017. URL: http://docs.openhab.org/tutorials/beginner/ index.html. [74] Ross Elliot. Yahoo WOEID Lookup. Consultado en Abril de 2017. URL: http://woeid.rosselliot.co.nz/lookup/granada. [75] OpenHAB Community. Configuration of your Smart Home. Consultado en Abril de 2017. URL: http://docs.openhab.org/configuration/ index.html. [76] Ivan Grokhotkov. ESP8266 core for Arduino, 2017. Consultado en Abril de 2017. URL: https://github.com/esp8266/Arduino.
BIBLIOGRAF´IA
147
´ [77] Telefonica Movistar. Router Fibra Optica Mitrastar HGW2501GN-R2, 2014. Consultado en Noviembre de 2016. URL: http://www.movistar.es/particulares/atencion-cliente/ internet/adsl/equipamiento-adsl/routers/mitrastar/. [78] No-IP.com. Free Dynamic DNS - Managed DNS - No-IP. Consultado en Noviembre de 2016. URL: https://www.noip.com/. [79] RogueAxis Cybersecurity. PiVPN: Configura una VPN casera en una Raspberry Pi utilizando OpenVPN. Consultado en Mayo de 2017. URL: https://www.rogueaxis.com/blog/raspberry/pivpn-configurauna-vpn-casera-en-una-raspberry-pi-utilizando-openvpn/. [80] Stephen Balkam. What will happen when the internet of things becomes artificially intelligent? The Guardian, 2015. Accedido en Julio de 2017. URL: https://www.theguardian.com/technology/ 2015/feb/20/internet-of-things-artificially-intelligentstephen-hawking-spike-jonze.
Ap´ endice A
Manual de El prop´ osito principal de este anexo es describir el proceso de instalaci´on y configuraci´ on de las aplicaciones cliente de openHAB, tanto en dispositivos Android como iOS. En primer lugar, se detallar´ an los pasos a seguir en el caso de disponer de un dispositivo Android. Lo primero a realizar ser´a la descarga de la aplicaci´ on desde la Play Store de Android, en ella deberemos ir al buscador y escribir “openHAB”. Posteriormente, elegiremos la mostrada en la figura A.1.
Figura A.1: Descarga cliente Android de openHAB. 149
150 Una vez terminada la descarga e instalaci´on, se proceder´a con la ejecuci´ on de la aplicaci´ on y se podr´a realizar la configuraci´on pertinente para que haga uso de nuestra instalaci´on. Pulsaremos en los tres puntos de la esquina superior derecha y elegiremos “Configuraci´ on”. En la ventana emergente tendremos que quitar el modo demo e introducir la siguiente informaci´on. URL openHAB = https:// 192.168.1.150 URL remota openHAB = https://garciasoria.ddns.net Nombre de = openhab Contrase˜ na = openhab El nombre de la contrase˜ na depender´a de los que se hayan creado en el proceso de configuraci´on openHAB en la Raspberry. En la figura A.2, se puede observar la configuraci´on realizada.
Manual de
151
Figura A.2: Configuraci´on cliente openHAB Android.
Para finalizar este proceso deberemos elegir el sitemaps deseado, en nuestro caso es “prueba”, ya que los ficheros de configuraci´on se denominan as´ı. En las im´ agenes siguientes podemos observar algunas muestras de la informaci´ on proporcionada, a modo de ejemplo, por la mota de MQTT y de los servicios externos configurados en la instancia de openHAB del presente proyecto.
152
(a) Pantalla principal (Android).
(b) Sal´on en openHAB (Android).
(c) Exterior en openHAB (Android).
Figura A.3: Ejemplo de utilizaci´on de instancia openHAB (Android). En segundo lugar, se explicar´an los pasos a seguir para configurar tanto el cliente openHAB de dispositivos con sistema iOS como la aplicaci´on nativa de Apple, Home. Para realizar la descarga e instalaci´on de la aplicaci´on cliente de openHAB deberemos de realizar la b´ usqueda en la App Store de Apple y elegir la mostrada en la imagen A.4.
Manual de
153
Figura A.4: Descarga de cliente iOS de openHAB.
Una vez haya finalizado la instalaci´on, se proceder´a a realizar la configuraci´on de los par´ ametros necesarios para que se conecte y lea la informaci´on de la instancia de openHAB desplegada en la Raspberry. Al igual que para el caso del cliente Android, ser´ a necesario indicar la URL de la red local, la URL remota, el nombre de y la contrase˜ na correspondiente. En la imagen A.5 podemos apreciar los valores introducidos.
154
Figura A.5: Configuraci´on cliente openHAB iOS.
Cuando se hayan introducido los datos, deberemos pulsar en “Save” y tendremos que elegir el sitemaps “prueba”. En la aplicaci´ on se mostrar´a la informaci´on que podemos apreciar en la figura A.6, en ella se incluyen los datos recogidos por los sensores y actuadores de la mota MQTT, y los servicios de tiempo de Yahoo, que indican la temperatura y la humedad exterior de la casa. Adem´as, se muestra la fecha del servidor NTP seleccionado.
Manual de
155
(a) Pantalla principal (iOS).
(b) Sal´on en openHAB (iOS).
(c) Exterior en openHAB (iOS).
Figura A.6: Ejemplo de utilizaci´on de instancia openHAB (iOS).
Se puede destacar que para dispositivos iOS podemos configurar la aplicaci´on nativa de Apple, Home, con el fin de reconocer nuestro servidor openHAB y los elementos definidos en ´el. Para proceder con su configuraci´on, primero se deben de conocer los par´ametros del servicio en la instancia de openHAB. Para ello deberemos de ir en la interfaz “Basic UI” a “Configuraci´on” → “Servicios” → “Homekit
156 Integration” → “Configure”. All´ı, anotaremos el valor del pin, ya que posteriormente lo necesitaremos en el proceso de emparejamiento de dispositivos. (V´ease imagen A.7)
Figura A.7: Par´ametros para la integraci´on de Homekit.
En el terminal iOS ejecutaremos la app Home, pulsaremos en el s´ımbolo “+” y elegiremos a˜ nadir rio. Observaremos que se utiliza la c´amara para intentar reconocer el c´odigo QR del elemento inteligente y, puesto que nosotros no tenemos, se deber´a elegir la opci´on “¿Todav´ıa no lo pudo a˜ nadir? ”. En la nueva ventana, iremos a “C´ odigo manual ” e introduciremos el n´ umero pin obtenido en el paso anterior. Se iniciar´a un proceso de b´ usqueda del rio y, cuando sea reconocido, lo elegiremos y se comenzar´a el emparejamiento. Cabe destacar que solo puede realizarse un emparejamiento por instancia de openHAB, para eliminarlo tendremos que utilizar la consola de openHAB, donde tendremos que utilizar el siguiente comando:
$ smarthome : homekit clearPairings
Manual de
157
En las figuras A.8, podemos observar el paso a paso de manera gr´afica.
(a) B´ usqueda de nuevo rio.
(b) Elecci´on c´odigo manualmente.
(c) Adici´ on manual del c´ odigo pin.
(d) Reconocimiento de rios.
Figura A.8: Incorporaci´ on de nuevo rio dom´otico a Homekit.
Una vez hayamos finalizado el proceso de emparejamiento entre dispositivos, podremos observar los diferentes elementos de la instancia openHAB, como se muestra en la imagen A.9.
158
Figura A.9: Informaci´on de elementos de instancia openHAB.
En Homekit, tambi´en se tiene la posibilidad de ordenar los sensores y/o actuadores en distintas estancias del hogar. Estas pueden ser creadas o modificadas desde los detalles de cualquier objeto. El proceso de creaci´on es el siguiente: mantenemos pulsado cualquier objeto, vamos a detalles (aqu´ı podremos modificar el nombre y la habitaci´on en la que se encuentra), en habitaci´ on/estancia deberemos de elegir la deseada y, en caso no existir, bastar´ a con crear una nueva. En las figuras siguientes podemos observar como los sensores y actuadores de la mota MQTT ejemplo estn´a organizados en el Sal´on y los servicios externos de meteorolog´ıa en el Jard´ın. Una vez hayamos configurado esto, podremos preguntar a Siri por los datos recogidos por los sensores o el estado de los actuadores, como por ejemplo la luz del sal´ on (LED), etc.
Manual de
159
(a) Sensores/actuadores Sal´ on. (b) Datos meteorol´ogicos Jard´ın.
(c) Bridge openHAB reconocido.
(d) Ejemplo de interacci´on con Siri.
160
(e) Ejemplo 2 de interacci´on con Siri.
Figura A.10: Integraci´on de Homekit y Siri.
Ap´ endice B
Ficheros de configuraci´ on openHAB. En este anexo se recoger´ an los ficheros de configuraci´on de openHAB: “prueba.items” y “prueba.sitemaps”, utilizados en el presente proyecto.
B.1. 1 2 3 4
Group Group Group Group
prueba.items ALL H Outdoor H_Living
( ALL ) ( All ) " Living Room "
< sofa >
(H)
5 6 7
Switch Light _H_Livin g " Light " ( H_Living ) [" Lighting "] { mqtt =" >[ openhab :/ house / living / light / com : command : on :1] , >[ openhab :/ house / living / light / com : command : off :0] , <[ openhab :/ house / living / light / com / state : state : default ]"}
8 9
Number T e m p e r a t u r e _ H _ L i v i n g " Temperature [ %.1 f ◦ C ]" < temperature > ( H_Living ) [" C u r r e n t T e m p e r a t u r e "] { mqtt =" <[ openhab :/ house / living / temperature / state : state : default ]"}
10 11
Number H u m i d i t y _ H _ L i v i n g " Humidity [ %.1 f % %]" < humidity > ( H_Living ) [" C ur re n tH um id i ty "] { mqtt =" <[ openhab :/ house / living / humidity / state : state : default ]"}
12 13
Number T e m p e r a t u r e _ O u t d o o r " Temperature [ %.1 f ◦ C ]" < temperature > ( Outdoor ) [" C u r r e n t T e m p e r a t u r e "] { channel =" yahooweather : weather : granada : temperature " }
14 15
Number H u m i d it y _ O u t d o o r " Humidity [ %.1 f % %]" < humidity > ( Outdoor ) [" C ur re nt H um id it y "] { channel =" yahooweather : weather : granada : humidity " }
16 17 18
/* Weather item */
161
162
B.1. prueba.items
19 20
Group Weather_Chart
( Weather )
21 22
Number W e a t h e r _ T e m p e r a t u r e " Outside Temperature [ %.1 f ◦ C ]" < temperature > ( Weather_Chart ) { channel =" yahooweather : weather : granada : temperature " }
23 24
Number W e a t h e r _H u m i d i t y " Outside Humidity [ %.1 f % %]" < humidity > ( Weather ) { channel =" yahooweather : weather : granada : humidity " }
25 26 27
/* NTP binding item */
28 29
DateTime Date " Date [ %1 $tA , %1$td - %1 $tm - %1 $tY ]" < calendar > { channel =" ntp : ntp : local : dateTime " }
30 31
Switch P r e s e n c e _ M o b i l e _ A l e x " Alex ’ s iPhone " < network > { channel =" network : device :19 2.168.1. 15: online "}
32 33
Switch P r e s e n c e _ B r o t h e r _ P r i n t e r " Brother Printer " < network > { channel =" network : device :192.1 68.1.40 : online "}
Ficheros de configuraci´ on openHAB.
B.2. 1 2 3
163
prueba.sitemaps
sitemap prueba label =" Main Menu " { Frame {
4
Group item = H label =" House " icon =" house "
5 6
Group item = Outdoor icon =" garden "
7
}
8 9
Frame label =" Weather " {
10 11
Text item = W e a t h e r _ T e m p e r a t u r e {
12 13
Frame {
14 15
Text item = W e a t h e r _ H u mi d i t y
16 17
Text item = W e a t h e r _ T e m p e r a t u r e
18
}
19
}
20
}
21 22
Frame label =" Date " {
23 24
Text item = Date
25
}
26 27
Switch item = P r e s e n c e _ M o b i l e _ A l e x
28
label =" Alex ’ s iPhone "
29
Switch item = P r e s e n c e _ B r o t h e r _ P r i n t e r
30 31
}
label =" Brother Printer "
Ap´ endice C
Sketch Mota MQTT Este anexo contiene el c´ odigo utilizado en la mota ejemplo de MQTT, programada con Arduino IDE.
1 2 3 4
#i n c l u d e #i n c l u d e #i n c l u d e #i n c l u d e
<ESP8266WiFi . h> <WiFiClient . h>
5 6
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ESP8266 ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
7 8 9 10
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ DHT22 S e n s o r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ #d e f i n e DHTPIN 4 #d e f i n e DHTTYPE DHT22
11 12 13
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ LED ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ #d e f i n e LED 5
14 15 16 17
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ WiFi A c c e s s P o i n t ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ c o n s t c h a r ∗ s s i d = ”MOVISTAR 2A18” ; c o n s t c h a r ∗ = ” 9584115410000 ” ;
18 19 20 21 22 23 24
WiFiClient e s p C l i e n t ; /∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ MQTT S e r v e r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ c o n s t b y t e m q t t s e r v e r [ ] = { 1 9 2 , 1 6 8 , 1 , 150 } ; // IP Address o f your MQTT S e r v e r const int mqtt server port = 1883; c o n s t c h a r ∗ MQTT = ” openHAB ” ; c o n s t c h a r ∗ MQTT = ”openHAB” ;
25 26 27 28
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ThingSpeak ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ c o n s t S t r i n g apiKey = ”DCJLP1UI7UXBNAFD” ; c o n s t c h a r ∗ s e r v e r = ” a p i . t h i n g s p e a k . com” ;
29 30
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ MQTT c l i e n t ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
165
166
31
v o i d c a l l b a c k ( c h a r ∗ t o p i c , b y t e ∗ payload , u n s i g n e d i n t l e n g t h ) ; // D e f i n e f u n c t i o n c a l l b a c k
32 33
PubSubClient m q t t C l i e n t ( m q t t s e r v e r , m q t t s e r v e r p o r t , c a l l b a c k , espClient ) ;
34 35 36
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ DHT S e n s o r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ DHT dht (DHTPIN, DHTTYPE) ;
37 38
f l o a t hum , temp ; // V a l o r e s l e i d o s d e l s e n s o r
39 40 41
u n s i g n e d l o n g p r e v i o u s M i l l i s = 0 ; // Almacena e l v a l o r de tiempo en l a u ´ ltima lectura c o n s t l o n g i n t e r v a l = 5 0 0 0 ; // I n t e r v a l o e n t r e l e c t u r a s d e l sensor
42 43 44 45 46
/∗ ∗∗∗∗∗∗∗∗∗∗∗∗ F u n c t i o n name s a y s i t ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ void setup ( void ) { pinMode ( LED BUILTIN , OUTPUT) ; pinMode (LED, OUTPUT) ;
all !
47
S e r i a l . b e g i n ( 1 1 5 2 0 0 ) ; // E s t a b l e c e l a v e l o c i d a d de l a comunicaci ´ o n con l a p l a c a delay (10) ; dht . b e g i n ( ) ; // I n i c i a e l s e n s o r DHT
48 49 50 51
wifiConnect () ; local
52
// C o n f i g u r a l a c o n e x i ´ o n WiFi en l a r e d
53
// S e t t h e MQTT b r o k e r d e t a i l s m q t t C l i e n t . s e t S e r v e r ( m q t t s e r v e r , m q t t s e r v e r p o r t ) ; // F i j a l o s d e t a l l e s d e l s e r v i d o r de MQTT
54 55 56
}
57 58 59 60 61 62 63 64
/∗ ∗∗∗∗∗∗∗∗∗∗∗∗ F u n c t i o n name s a y s i t a l l ! ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ void loop ( void ) { // Comprueba s i e l c l i e n t e MQTT e s t a ´ conectado a l servidor , s i no l o r e c o n e c t a i f ( ! mqttClient . connected ( ) ) { reconnect () ; } mqttPublish ( ) ; // P u b l i c a l o s d a t o s con e l p r o t o c o l o MQTT
65
delay (1000) ;
66 67
mqttClient . loop () ;
68 69
}
70 71 72 73 74 75 76 77 78 79
/∗ ∗∗∗∗∗ ∗∗∗∗∗∗∗∗ ∗ Read MQTT c h a n n e l ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ v o i d c a l l b a c k ( c h a r ∗ t o p i c , b y t e ∗ payload , u n s i g n e d i n t l e n g t h ) { S e r i a l . p r i n t ( ” Message a r r i v e d [ ” ) ; Serial . print ( topic ) ; Serial . print ( ” ] ” ) ; f o r ( i n t i = 0 ; i < l e n g t h ; i ++) { Serial . p r i n t ( ( char ) payload [ i ] ) ; } Serial . p r i n t l n ( ) ;
80 81
// Enc ie nd e e l LED s i s e r e c i b e un 1 en e l mensaje
Sketch Mota MQTT
S e r i a l . p r i n t l n ( strcmp ( t o p i c , ” house / l i v i n g / l i g h t /com” ) ) ; i f ( strcmp ( t o p i c , ” / house / l i v i n g / l i g h t /com” ) ==0){ i f ( ( c h a r ) p a y l o a d [ 0 ] == ’ 0 ’ ) { d i g i t a l W r i t e (LED, LOW) ; // Apaga e l LED cuando s e r e c i b e un 0 en e l ” t o p i c ” } else { d i g i t a l W r i t e (LED, HIGH) ; // E nc ien de e l LED cuando s e r e c i b e un 1 en e l ” t o p i c ” } }
82 83 84 85 86 87 88 89 90
167
}
91 92 93 94 95 96 97 98 99
/∗ ∗∗∗∗∗∗∗∗∗∗∗∗ U t i l i t y f u n c t i o n t o p u b l i s h data i n t h e s e r v e r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ void mqttPublish ( ) { // Wait a t l e a s t 5 s e c o n d s s e c o n d s between measurements . // i f t h e d i f f e r e n c e between t h e c u r r e n t time and l a s t time you read // t h e s e n s o r i s b i g g e r than t h e i n t e r v a l you s e t , r e a d t h e sensor // Works b e t t e r than d e l a y f o r t h i n g s happening e l s e w h e r e a l s o unsigned long c u r r e n t M i l l i s = m i l l i s ( ) ; c h a r t e m p s t r [ 7 ] , hum str [ 7 ] ;
100
i f ( c u r r e n t M i l l i s − p r e v i o u s M i l l i s >= i n t e r v a l ) { previousMillis = currentMillis ;
101 102 103
readDHT22 ( ) ;
104
// d a t o s l e i d o s d e l DHT22
105
// C o n v i e r t e l o s v a l o r e s de t e m p e r a t u r a y humedad a cadena de caracteres d t o s t r f ( temp , 4 , 3 , t e m p s t r ) ; d t o s t r f (hum, 4 , 3 , hum str ) ;
106 107 108 109
// Env´ı o de d a t o s con MQTT S e r i a l . p r i n t l n ( ”DTH s e n s o r r e a d and t r a n s m i t t e d ” ) ; m q t t C l i e n t . p u b l i s h ( ” / house / l i v i n g / t e m p e r a t u r e / s t a t e ” , t e m p s t r ) ; m q t t C l i e n t . p u b l i s h ( ” / house / l i v i n g / humidity / s t a t e ” , hum str ) ; // Guarda e l v a l o r de l a u ´ ltima lectura previousMillis = millis () ;
110 111 112 113 114 115
}
116 117
}
118 119 120 121 122 123 124 125
/∗ ∗∗∗∗∗∗ U t i l i t y f u n c t i o n t o c o n n e c t o r re−c o n n e c t t o MQTT−S e r v e r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ void reconnect ( ) { // B u c l e h a s t a que e s t e m o s c o n e c t a d o s con e l s e r v i d o r while ( ! mqttClient . connected ( ) ) { S e r i a l . p r i n t ( ” Attempting MQTT c o n n e c t i o n t o ” ) ; Serial . print ( ” 1 9 2 . 1 6 8 . 1 . 1 5 0 ” ) ; S e r i a l . p r i n t ( ” −−> ” ) ;
126 127 128 129 130 131 132 133 134 135
// I n t e n t o de c o n e x i o ´n . i f ( m q t t C l i e n t . c o n n e c t ( ”ESP8266” , MQTT , MQTT) ) { Serial . p r i n t l n ( ” connected ” ) ; m q t t C l i e n t . s u b s c r i b e ( ” / house / l i v i n g /#” ) ; } else { S e r i a l . p r i n t ( ” f a i l e d , r c=” ) ; Serial . print ( mqttClient . s t a t e ( ) ) ; Serial . p r i n t l n ( ” try again in 5 seconds ” ) ;
168 // Espera de 5 s e g u n d o s a n t e s de r e i n t e n t a r delay (5000) ;
136 137
}
138
}
139 140
}
141 142 143 144 145 146 147 148 149 150 151
/∗ ∗∗∗∗∗∗∗∗∗∗∗∗ U t i l i t y f u n c t i o n t o r e a d data from DHT22 ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ v o i d readDHT22 ( ) { S e r i a l . p r i n t l n ( ” Reading data from DHT22 . . . ” ) ; // Reading t e m p e r a t u r e f o r humidity t a k e s about 250 milliseconds ! // S e n s o r r e a d i n g s may a l s o be up t o 2 s e c o n d s ’ o l d ’ ( i t ’ s a very slow s e ns o r ) d i g i t a l W r i t e ( LED BUILTIN , LOW) ; hum = dht . readHumidity ( ) ; // Read humidity ( p e r c e n t ) temp = dht . readTemperature ( ) ; // Read t e m p e r a t u r e a s C e l s i u s delay (1000) ; d i g i t a l W r i t e ( LED BUILTIN , HIGH) ;
152
// Check i f any r e a d s f a i l e d and e x i t e a r l y ( t o t r y a g a i n ) . i f ( i s n a n (hum) | | i s n a n ( temp ) ) { S e r i a l . p r i n t l n ( ” F a i l e d t o r e a d from DHT s e n s o r ! ” ) ; return ; }
153 154 155 156 157 158
}
159 160 161 162
/∗ ∗∗∗∗∗∗∗∗∗∗∗∗ U t i l i t y f u n c t i o n t o s e t up w i f i ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/ void wifiConnect ( ) { WiFi . b e g i n ( s s i d , ) ;
163
Serial . Serial . Serial . Serial .
164 165 166 167
println () ; println () ; p r i n t ( ” Connecting to ” ) ; println ( ssid ) ;
168
// WiFi . b e g i n ( s s i d , ) ;
169 170
w h i l e (WiFi . s t a t u s ( ) != WL CONNECTED) { delay (500) ; Serial . print ( ” . ” ) ; } Serial . p r i n t l n ( ”” ) ; S e r i a l . p r i n t l n ( ”WiFi c o n n e c t e d ” ) ; S e r i a l . p r i n t l n ( ” \n\ rESP8266 && DHT22 based t e m p e r a t u r e and humidity s e n s o r working ! ” ) ; S e r i a l . p r i n t ( ” \n\ rIP a d d r e s s : ” ) ; S e r i a l . p r i n t l n (WiFi . l o c a l I P ( ) ) ;
171 172 173 174 175 176 177 178 179 180
}
181 182 183 184 185 186 187 188 189 190 191
void publishThingspeak ( ) { i f ( espClient . connect ( server , 8 0 ) ) { a p i . t h i n g s p e a k . com S t r i n g p o s t S t r = apiKey ; p o s t S t r +=”&f i e l d 1=” ; p o s t S t r += S t r i n g ( temp ) ; p o s t S t r +=”&f i e l d 2=” ; p o s t S t r += S t r i n g (hum) ; p o s t S t r += ” \ r \n\ r \n” ;
//
”184.106.153.149” or
Sketch Mota MQTT e s p C l i e n t . p r i n t ( ”POST / update HTTP/ 1 . 1 \ n” ) ; e s p C l i e n t . p r i n t ( ” Host : h t t p : / / a p i . t h i n g s p e a k . com\n” ) ; e s p C l i e n t . p r i n t ( ” C o n n e c t i o n : c l o s e \n” ) ; e s p C l i e n t . p r i n t ( ”X−THINGSPEAKAPIKEY: ”+apiKey+” \n” ) ; e s p C l i e n t . p r i n t ( ” Content−Type : a p p l i c a t i o n /x−www−form− u r l e n c o d e d \n” ) ; e s p C l i e n t . p r i n t ( ” Content−Length : ” ) ; espClient . print ( postStr . length () ) ; e s p C l i e n t . p r i n t ( ” \n\n” ) ; espClient . print ( postStr ) ;
192 193 194 195 196 197 198 199 200 201
S e r i a l . p r i n t ( ” Temperature : ” ) ; S e r i a l . p r i n t ( temp ) ; S e r i a l . p r i n t ( ” d e g r e e s C e l c i u s Humidity : ” ) ; S e r i a l . p r i n t (hum) ; S e r i a l . p r i n t l n ( ” % send t o Thingspeak ” ) ; } else{ Serial . p r i n t l n ( ” connection f a i l e d ” ) ; // r e t u r n ; } espClient . stop () ;
202 203 204 205 206 207 208 209 210 211 212
}
mqtt pubsub httpsThing.ino
169