scieee AI-readable full text Open interactive document viewer

Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi

Romero Cabrera, Santiago

Abstract

El objetivo de este proyecto es el estudio del software Home Assistant, su integración en una Raspberry Pi, y mediante la compra de distintos dispositivos, conformar un sistema domótico en casa mediante la integración de los mismos. El documento está divido en varias partes en las que se sigue un hilo para poder entender de manera secuencial que se quiere hacer. La primera parte nos habla sobre el paradigma de la domótica, haciendo un repaso a sus fundamentos y dando una visión sobre las posibilidades a mano del usuario. En la segunda parte del documento se presentan, las que a mi parecer son las plataformas domóticas de código abierto más importantes. En el tercer punto se hace una breve introducción a la computadora utilizada en el proyecto, una Raspberry Pi. Los siguientes puntos que son el número cuatro y cinco se centran en el núcleo principal del trabajo que es la explicación del funcionamiento interno de HA, y su utilización a modo de usuario para poder integrar dispositivos y jugar con ellos. En el último punto se detallá el sistema domótico que he empezado a hacer en mi hogar, en el que se muestra paso a paso lo necesario para integrar los dispositivos que voy nombrando.

Full text

Equation Chapter 1 Section 1 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi Autor: Santiago Romero Cabrera Tutor: José María Maestre Torreblanca Cotutor: Jesús Iván Maza Alcañiz Dpto. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2019 iii Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de Telecomunicación Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi Autor: Santiago Romero Cabrera Tutor: José María Mestre Torreblanca Profesor titular Cotutor: Jesús Iván Maza Alcañiz Dpto. de Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2019 v Proyecto Fin de Carrera: Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi Autor: Santiago Romero Cabrera Tutor: Cotutor: José María Maestre Torreblanca Jesús Iván Maza Alcañiz El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2019 El Secretario del Tribunal vii A mi familia A mis amigos A Marisa y Emilio ix Agradecimientos Mis más sinceros agradecimientos son a mi familiares y amigos, personas que desde que inicié mi andadura en una ingeniería han estado apoyándome para pasar los momentos más difíciles y brindando en los momentos más felices. A José Manuel, amigo y compañero de grado con el que tantas tardes y clases he compartido. A Marisa y Emilio, pilares fundamentales en el desarrollo de este proyecto por su paciencia y comprensión. Por último y no menos imporante a mis tutores, José María e Iván Maza, por su flexibilidad y adaptación para poderme permitir hacer el trabajo a distancia. Santiago Romero Cabrera Sevilla, 2019 Referencias 80 Anexo A 81 Anexo B 82 Anexo C 85 Anexo D 90 Anexo E 93 xvii ÍNDICE DE TABLAS Tabla 4-1. Propiedades genericas. 20 Tabla 4-2. Propiedades avanzadas. 20 Tabla 4-3. Propiedades sensor. 21 Tabla 4-4. Distintas medidas. 21 xix ÍNDICE DE FIGURAS Figura 1-1. Posibilidades domóticas. 2 Figura 1-2. Arquitectura centralizada. 5 Figura 1-3. Arquitectura distribuida 5 Figura 1-4. Arquitectura mixta. 5 Figura 2-1. Interfaz y logo de Domoticz. 10 Figura 2-2. Interfaz y logo de OpenHab. 11 Figura 2-3. Interfaz y logo de HA. 12 Figura 3-1. Raspberry Pi3 3 modelo B+. 12 Figura 4-1. Esencia de un hub. 14 Figura 4-2. Reglas de usuario. 15 Figura 4-3. Arquitectura del hogar. 16 Figura 4-4. Arquitectura HA. 16 Figura 4-5. Arquitectura componentes. 17 Figura 4-6. Arquitectura completa. 18 Figura 4-7. Autenticación. 22 Figura 5-1. Intel NUC. 25 Figura 5-2. Interfaz Hass.io. 26 Figura 5-3. Hassbian. 27 Figura 5-4. Grupos. 36 Figura 5-5. Panel inicial. 41 Figura 5-6. Herramienta desarrolladores. 42 Figura 6-1. Etcher. 43 Figura 6-2. Mi router. 44 Figura 6-3. PuTTY. 45 Figura 6-4. Terminal Hassbian. 46 Figura 6-5. Averiguar IP 47 Figura 6-6. Samba. 48 Figura 6-7. Duck DNS. 49 Figura 6-8. Redirección de puertos. 50 Figura 6-9. Rastreo de dispositivos. 52 Figura 6-10. Sensor DHT22. 53 Figura 6-11. Enchufe. 53 Figura 6-12. Enchufe en HA. 54 Figura 6-13. Bombilla Yeelight. 55 Figura 6-14. Bombillas HA. 56 Figura 6-15. Delantera Sonoff. 56 Figura 6-16. Delantera Sonoff. 56 Figura 6-17. Luz cocina. 58 Figura 6-18. BotFhater. 59 Figura 6-19. Automatización Luz. 60 Figura 6-20. Parámetros del sistema. 61 Figura 6-21. Información HA. 63 Figura 6-22. Tiempo Viaje. 66 Figura 6-23. Ecosistema xiaomi. 66 Figura 6-24. Wemos D1 mini. 68 Figura 6-25. Flasheo Wemos. 68 Figura 6-26. Acceso Wemos. 69 Figura 6-27. MQTT. 70 Figura 6-28. Broker mosquitto. 70 Figura 6-29. ESP Easy. 71 Figura 6-30. ESP Easy. 72 Figura 6-31. Escenas. 73 Figura 6-32. Interfaz organizada. 77 xxi Notación HA IU Home Assistant Interfaz de usuario 1 1 INTRODUCCIÓN n este proyecto se abordará el tema de la domótica y en concreto una plataforma de código abierto que hará de nuestro hogar un lugar más inteligente a un precio moderado. Pero, antes de esta plataforma, al igual que otras de código abierto, ¿dónde se enmarcaba la domótica?, ¿Qué es un hogar digital? ¿Qué es propiamente la domótica? ¿Cuál es su objeto de estudio? En este apartado introductorio se intentará responder estas preguntas haciendo una introducción al susodicho término. 1.1 Objetivos Los objetivos de este proyecto son claros, lo primero es asentar las bases un tema que en mi opinión es fascinante como es la domótica haciendo una introducción a los aspectos y protocolos más significativos. Tras esto, y antes de hablar del núcleo del trabajo, es necesario dar una visión de cómo está el mercado con respecto a las plataformas domóticas de código abierto, para dar a entender que no solo existe una única solución posible, y que como en cualquier tecnología tenemos varias posibilidades al alcance con sus pros y contras. En el núcleo de mi trabajo presento una plataforma que he descubierto para hacer este proyecto (Home Assistant), a raíz de una que se presentó en la asignatura de “Domótica” del 4º curso de GITT (OpenHab). En este documento hago una presentación de la plataforma a dos niveles, una primera parte sobre la arquitectura de la misma, y otra sobre como poder utilizarla a nivel de usuario, destacando los aspectos más importantes. Lo último que se expone en este documento es una prueba práctica real, es decir, crear desde cero un sistema domótico “Mi sistema domótico” poniendo a prueba lo aprendido. Una vez presentados los objetivos, y para entrar en una previa a Home Asisstant dejo una introducción. 1.2 Reseña histórica La domótica se inicia a comienzos de los años setenta cuando aparecieron los primeros dispositivos de automatización en edificios a base de pruebas pilotos. Pero fue en la década de los 80 cuando los sistemas integrados se utilizaron a nivel comercial, para luego desarrollarse en el aspecto doméstico de las casas urbanas. En 1975 aparece la tecnología X10, protocolo de comunicaciones para el control remoto de dispositivos eléctricos que utilizan la línea eléctrica preexistente. Este sistema se extendió por Estados unidos y Europa. Avanzando en el tiempo en 1997 y mediante asociaciones, los tres sistemas de automatización europeos más E Vivimos en un mundo hiperconectado y la casa no es ajena a ello. - Equipo redacción de “Houzz” - Introducción 2 arraigados (Batibus, EHS y EIB) comenzaron un proceso de convergencia hacia la asociación Konnex, que finalmente acabo en la asociación KNX, un estándar de protocolo de comunicaciones de red, basado en OSI, para edificios inteligentes. También por los 90 aparece la tecnología LonWorks, plataforma tecnológica basada en el protocolo abierto llamado LonTalk, para aplicaciones de control y automatización. A partir del año 2000 hubo un fuerte incremento en las empresas como fabricantes especializados en productos del estándar KNX y LON, cubriendo nuevos productos, compartiendo precios y haciendo más fuerte al protocolo estándar que eligen. En el año 2006 empiezan a surgir los sistemas domóticos inalámbricos, usando como protocolos Zigbee y Zwave abriendo al abanico de la implantación de los mismos para viviendas ya que las funciones de los sistemas cableados no son capaces de cometer por si solos como por ejemplo la instalación sencilla. Hoy en día, la domótica aporta soluciones dirigidas a todo tipo de viviendas y se ofrecen más funcionalidades por menos dinero, más variedad de producto, y gracias a la evolución tecnológica, son más fáciles de usar y de instalar. Todo esto es posible en parte a la cantidad de fabricantes que ofrecen productos domóticos, que son compatibles con plataformas de control gratuitas como Home Assistant. 1.3 Introducción a la domótica Podríamos definir la domótica como el conjunto de servicios proporcionados por sistemas tecnológicos para satisfacer las necesidades básicas de seguridad, comunicación, gestión energética y confort, del hombre y de su entorno más cercano. Bajo el concepto de domótica nos vamos a referir a los mecanismos de automatización y control (apagar / encender, abrir / cerrar y regular) de los sistemas domésticos como la iluminación, climatización, persianas y toldos, puertas y ventanas, cerraduras, riego, electrodomésticos, suministro de agua, suministro de gas, suministro de electricidad, etc. El término domótica nace del neogolismo francés ‘domotique’, el cual procede de la palabra latina domus (casa) y del francés telematique (telecomunicación-informática). Las posibilidades que nos brinda la domótica son la siguientes  Mayor confort  Aumento de la seguridad  Control del gasto energético  Mayor capacidad de ocio La domótica consiste en la integración de componentes, perdiendo así la visión de soluciones aisladas no que no cooperan entre sí. Actualmente en el mercado existen dos tipos de soluciones. Figura 1-1. Posibilidades domóticas. 3 3 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi  Gran cantidad de pequeños aparatos, que tienen un coste barato y con dedicación específica. No están sujetos a estándar  Grandes sistemas domóticos diseñados para un campo de aplicación definido. Su diseño está guiado para satisfacer una serie de necesidades, pero tienen un alto coste. Mi proyecto personal dómotico, tal y como se podrá observar en el punto 6, consta de lo descrito en el primer punto, “gran cantidad” de pequeños aparatos, con un coste no muy elevado con capacidad de integración en un mismo entorno. 1.3.1 Funciones de los sistemas domóticos Gestión de la energía: mejora el uso de un recurso escaso como es la energía. Ejemplo de ello puede ser el control de la iluminación interior y exterior, gestionar el consumo de agua para no saltar al siguiente bloque de tarificación … Automatización de tareas domóticas: subir/bajar persianas en función de la cantidad de luz recibida, activación de la climatización según la temperatura. En mi sistema, se describen las diferentes automatizaciones realizadas para la gestión de luces, y otros componentes. Seguridad: protección contra robos, detección de incendios, aviso a organismos de seguridad. Es uno de los grandes objetivos de la domótica, y como no podía ser menos, aunque a muy bajo nivel y con los recursos que tengo, en mi sistema con un sensor de puerta y ventana propongo una solución de seguridad. Monitorización de la salud: llevar a cabo una vigilancia de la salud de una persona donde el sistema sea capaz de identificar una situación de riego … Control remoto de la vivienda: apagar/encender distintos dispositivos de una vivienda. De nuevo, y en referencia a mi proyecto, se tiene el control remoto de varias luces en la vivienda. Lo mejor que ofrece HA es que pueden ser de diferentes fabricantes. Control remoto desde fuera de la vivienda: se lleva a cabo a través de un móvil o cualquier aparato con conexión a internet. Este es un punto desarrollando en 6.4 en el que se podrá acceder a la aplicación de “santi home” desde incluso fuera de la red local. 1.3.2 Red de interior y pasarela residencial Los dispositivos se conectan a través de una red interna llamada “Home Area Network” HAN. Es un tipo de red de área local (LAN) que se desarrolla a partir de la necesidad de facilitar la comunicación y la interoperabilidad entre los dispositivos digitales presentes en el interior o en las inmediaciones de una casa. Los dispositivos capaces de participar en esta red a menudo logran mayores capacidades emergentes a través de su capacidad para interactuar. Estas capacidades adicionales se pueden utilizar entonces para aumentar la calidad de vida dentro de la casa en una variedad de formas, tales como la automatización de las tareas repetitivas, aumento de la productividad personal, la seguridad doméstica mejorada y un acceso más fácil al entretenimiento. La HAN se puede dividir en tres tipos de redes:  Red de control: interconecta los sensores, actuadores y electrodomésticos inteligentes con el sistema de control.  Red de datos: interconecta el PC, impresoras, escáneres, etc.  Red multimedia: permite la distribución de audio y video por toda la casa. Interconecta los dispositivos multimedia como pueden ser los televisores, radios, cámaras de vídeo… La HAN debe conectarse al exterior mediante algún tipo de tecnología habilitadora para ello como puede ser la fibra óptica o el ya casi en desuso ADSL. La pasarela residencial es un dispositivo que permite la convivencia de todas las redes y dispositivos internos entre sí y el exterior y que garantiza la seguridad de las comunicaciones hacia/desde la HAN. Debe poder ser gestionable de forma remota. Plataformas domóticas 10 2.2. OpenHab OpenHAB es una de las plataformas Open Source que cubre una gran cantidad de sistemas: Windows, OSX, Linux, sistemas embebidos como NAS, etc. Su diseño se basa en una arquitectura totalmente modular donde tenemos el core del sistema y sobre el que se construyen alrededor los diferentes módulos que le añaden funcionalidad. Está escrito en Java y su modularidad ha permitido que cuente con muchos módulos diferentes que cubren gran cantidad de elementos hardware y protocolos. Con OpenHAB podríamos trabajar con relativa sencillez con KNX, ZWave, X10, el termostato Nest, bombillas HUE, bases de datos, servicios Web como IFTTT o una API que nos sirva el tiempo y la previsión. Tiene un buen diseño visual y consta de bastante documentación, tanto del Core como de los módulos accesorios. Cuenta con un diseño que adapta la disposición de los elementos de los paneles de control al tamaño de la pantalla lo que facilitan su consumo y visualización multiplataforma. Además, cuenta con aplicaciones oficiales para iOS y Android. Cuenta con una amplia comunidad que, una vez más se reúnen alrededor del foro oficial y que en muchos casos es la referencia oficial para solucionar los errores con los que nos encontremos y que resaltan las carencias de la documentación en algunos apartados. Precisamente para su configuración cuenta con un entorno preparado que deriva de Eclipse (totalmente multiplataforma) y que busca facilitar la vida al instalador /configurador del sistema. Figura 2-1. Interfaz y logo de Domoticz. 11 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 2.3. Home Assistant Home Assistant es una plataforma open-source de automatización del hogar creada en Python 3 que permite, a través de diferentes módulos, la interacción con diferentes plataformas, servicios y dispositivos. Es el que ocupa mi proyecto y vamos a estudiarlo más en profundidad a lo largo del proyecto. Cuenta con 1442 componentes (con fecha de junio 2010) disponibles perfectamente organizados en varias categorías como "Climate", "DIY", "Health", "Social", "Notifications" o "Weather". La idea de los componentes es proveer una interfaz de comunicación entre la plataforma y diferentes elementos externos que pueden ser plataformas online como IFTTT, iCloud o APIs de terceros, sistemas que comparten un elemento físico y una plataforma cloud como pueden ser Nest o las Philips HUE, elementos puramente físicos que conectamos directamente o a través de un protocolo como MQTT y elementos software como por ejemplo una plataforma que nos permite emitir notificaciones a bots de Telegram. Figura 2-2. Interfaz y logo de OpenHab. Plataformas domóticas 12 Figura 2-3. Interfaz y logo de HA. 11 3 RASPBERRY PI n nuestro trabajo se usará una Raspberry Pi como controlador de nuestra casa. Pero ¿qué es exactamente? Raspberry Pi es un ordenador de placa reducida, ordenador de placa única u ordenador de placa simple (SBC) de bajo coste. En cuanto a su precio, suele estar por debajo de los 40 euros, una de las razones que explica su popularidad. Para que funcione, basta con que añadamos nosotros mismos un medio de almacenamiento (como por ejemplo una tarjeta de memoria SD), enchufarlo a la corriente gracias a cualquier cargador de tipo microUSB (el mismo que sirve para recargar la mayoría de los teléfonos móviles, cuyo coste es ínfimo) y, si lo deseamos, incorporar un chasis para que todo quede a buen recaudo y su apariencia sea más estética. Estos pueden ser desde cajas predeterminadas hasta una que fabriquemos nosotros mismos echándole grandes dosis de imaginación. La fundación de Raspberry Pi pone a disposición desde su página web Raspbian, una distribución de Linux basada en Debian, pero también podemos recurrir a muchas de las distribuciones específicas que la comunidad de usuarios ha desarrollado para diversos fines. La que usaré recibe el nombre de Hassbian. En función del modelo que escojamos, dispondremos de más o menos opciones de conexión, pero siempre tendremos al menos un puerto de salida de video HDMI y otro de tipo RCA, minijack de audio y un puerto USB 2.0al que conectar un teclado y ratón. En cuanto a conexión de red se refiere, podemos disponer de Ethernet para enchufar un cable RJ-45 directamente al router o recurrir a adaptadores inalámbricos Wi-Fi, pero en las versiones posteriores a la Raspberry Pi 2 ya encontramos una tarjeta Wi-Fi preinstalada. Los modelos existentes son los siguientes: Raspberry Pi 1 modelo A Este fue el primer modelo de Raspberry, sus ventas comenzaron en el año 2012. Carecía de puerto Ethernet, por lo que para su conexión a Internet requería de un adaptador Wi-Fi por USB. Poseía 26 conectores GPIO, salida de vídeo vía HDMI y Video RCA, un conector Jack de 3.5 milímetros, un único conector USB, MicroUSB (De alimentación) y un conector de cámara. Su procesador fue un Broadcom BCM2835, Single-Core a 700MHz. También tuvo 256 MB de RAM y una gráfica Broadcom VideoCore IV. Requería de una fuente de alimentación de 5 voltios y 2 amperios, elemento común al resto de versiones. Tuvo un coste inicial de 40 euros. Raspberry Pi 1 modelo B y B+ También del año 2012, es una variante del Modelo A, trajo consigo diversas mejoras, la inclusión del doble de memoria RAM, pasando de 256MB a 512MB. Trajo consigo un puerto USB más y, por fin, un conector Ethernet (RJ-45) Se mantuvo tanto su tamaño como su coste. No hubo variaciones ni en el procesador ni en la parte gráfica. Tiempo después se lanzó el Modelo B+, que incluyó 4 puertos USB y pasó de usar una SD a una MicroSD. Raspberry Pi 2 modelo B Lanzada en 2014 es el primer modelo que no incluye el mismo procesador usado en los tres anteriores: se sustituye por uno de la misma marca, pero de modelo BCM2836. Pasa de ser de un núcleo a cuatro, y de 700MHz a 900MHz. No obstante, emplea la misma gráfica, la VideoCore IV. Dobla la cantidad de memoria RAM, pasando de 512MB a 1GB (Algo menos en realidad) esta memoria está compartida con la gráfica. También incluye 40 pines GPIO, y mantiene los cuatro puertos USB. Suprime la conexión RCA. Raspberry Pi 3 modelo B Sacada a la luz en el año 2016, renueva procesador, una vez más de la compañía Broadcom, una vez más un Quad-Core, pero pasa de 900MHz a 1.20GHz. Mantiene la RAM en 1GB. Su mayor novedad fue la inclusión de Wi-Fi y Bluetooth (4.1 Low Energy) sin necesidad de adaptadores. E Raspberry PI 12 12 Raspberry Pi 3 modelo B+ La Raspberry Pi 3 B+ apareció en marzo del 2018 para actualizar el modelo anterior la Raspberry Pi 3 Model B y entre sus mejoras cuenta con un nuevo procesador y mejor conectividad,57 así que pasa de tener 1.2Ghz a tener 1.4Ghz y en cuanto a la conectividad inalámbrica ahora incorpora doble banda a 2,4GHz y 5GHz, y su nuevo puerto Ethernet se triplica, pasa de 100 Mbits/s en el modelo anterior a 300 Mbits/s en el nuevo modelo, también cuenta con Bluetooth 4.2 (Low Energy). Raspberry Pi 3 modelo A+ Fue anunciada en Noviembre de 2018.58 Los modelos A+ presentan menores prestaciones a un menor precio. Cuenta con 512 MB de RAM (compartidos con la GPU VideoCore IV), un solo puerto USB y sin puerto de conexión de red por cable (RJ-45). Raspberry Pi 4 modelo B Ha sido anunciada este Junio de 2019. Se han cambiado los puertos HDMI de tamaño completo por dos puertos microHDMI. Cuenta con la capacidad de manejar dos pantallas 4K a 60 Hz. Se ha incluido por primera vez USB 3.0, y el puerto Ethernet ya no está limitado a 300 Mbps. Tiene un procesador Broadcom nuevo hasta tres veces más eficiente que el anterior. En nuestro proyecto hemos utilizado la Raspberry Pi 3 modelo B+ Para el almacenamiento, Raspberry Pi recomienda utilizar una tarjeta SD con una capacidad mínima de 4 Gbytes y de clase 4. He usado en mi proeycto una tarjeta Samsung evo 32GB de clase 10. Para enchufar nuestra Raspberry Pi a un monitor o televisor, necesitaremos un cable HDMI o, si no disponemos de tal entrada de video, un cable HDMI a DVI. También es posible recurrir en su lugar a la salida analógica RCA Centrándonos en el teclado y ratón, lo más sencillo es adquirir un conjunto inalámbrico que conectaremos mediante un único adaptador, y así no necesitaremos de más puertos USB. El sistema operativo más común para utilizar es Raspbian y es una distribución del sistema operativo GNU/Linux basado en Debian, y por lo tanto libre para la SBC Raspberry Pi, orientado a la enseñanza de la informática Figura 3-1. Raspberry Pi3 3 modelo B+. 13 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 4 HOME ASSISTANT 4.1 Preámbulo Antes de meternos de lleno en el funcionamiento y arquitectura de esta plataforma domótica he querido exponer, el por qué es necesaria y ver el paradigma años atrás cuando todo era un barullo de conceptos. Desde que la tecnología se hizo tan accesible y diminuta se ha podido acceder a la automatización del hogar como algo más propio, más accesible al consumidor. Muchos términos diferentes años atrás empezaron a toar fuerza como el Internet de las cosas, la automatización del hogar y el hogar inteligente. El Internet de las Cosas (IoT) ha creado una generación de dispositivos que no solo pueden ser controlados por personas a través de botones o controles remotos, sino que también proporcionan una interfaz para comunicarse con otros dispositivos y aplicaciones. Por ejemplo, una bombilla puede recibir comandos para crear diferentes tipos de escenas de iluminación y regular diferentes intensidades. No existía un estándar abierto ampliamente adoptado para la comunicación de dispositivos inteligentes. Esto evitaba que muchos dispositivos se comunicarán entre sí e incluso si pudieran, la mayoría de los dispositivos no están diseñados para administrar otros dispositivos. Para resolver esto, necesitamos un dispositivo para poder comunicarnos y administrar todos estos dispositivos conectados. Este dispositivo se llama un hub. Como mínimo, un hub debe realizar un seguimiento del estado de cada dispositivo y debe ser capaz de controlarlos si es posible. Por ejemplo, tiene que saber qué luces están encendidas o apagadas y ofrecer una forma de controlarlas. Para un sensor solo hay que conocer el valor. Un centro con estas capacidades ofrece el control de casa. 4.2 Home assistant como hub No existe un estándar extensamente adoptado para la automatización de las viviendas. Los vendedores, los de automatización del hogar, por lo que he podido comprobar no adoptan el soporte a pequeños estándares cuando van al mercado. La solución propia y local a esto, es adoptar plataformas de código abierto como Home Assistant. Hoy en dia se pueden comprar componentes como bombillas, termostatos, reproductores multimedia y controlarlos con sus aplicaciones. Las luces no saben acerca del termostato, tampoco saben acerca del reproductor media. Como usuario tienes una APP por cada dispositivo que quieres controlar, para subir la temperatura del termostato, para controlar las luces, para reproducir distintos dispositivos media. Con este modelo, es imposible que los dispositivos que tenemos en casa sepan acerca de los demás dispositivos, es decir, no existe comunicación por lo que es imposible crear reglas de automatización. Para solucionar este problema tenemos una cosa llamada hub, un “home automation hub” y esto es lo que Home Assitant es. Con este hub tenemos todos esos dispositivos hablando entre ellos con un protocolo diferente. Cuando atendemos a la esencia de lo que es un hub tenemos que pensar en los siguientes conceptos. Home control: es el bloque de donde saldrán las distintas automatizaciones para que los dispositivos puedan hablar y comunicarse. IoT: son los distintos dispositivos y sensores que mandan la información Home Assistant 14 14 La esencia del proceso es muy simple, lo primero es comunicarse con otras cosas enviando comandos. “Termostato, establece esta temperatura”. “Luz, enciéndete”. “Reproductor media, reproduce esta película”. Lo segundo es obtener información de las cosas (Internet de las Cosas) la cual se puede dividir con dos términos fundamentales. El primer término es el estado. Los dispositivos tienen un estado y en cualquier momento del tiempo se podría mirar al dispositivo y consultar su estado. Por ejemplo, en una luz su estado es encendido y pueden se pueden tener atributos extra que expliquen el estado del dispositivo, como vemos en la imagen el estado es encendido y tiene un brillo del 60% y su color es rojo. Si el reproductor está funcionando, el volumen a 80% y tenemos puesto juego de tronos. La otra parte de información que podemos obtener del internet de las cosas son los eventos. Los eventos no es algo que se pueda obtener como un estado, es decir, no hay una propiedad que los defina, para detectar un evento se tiene que fijar la atención en un punto en concreto. Por ejemplo, una luz está siendo encendida o un movimiento ha sido detectado.  Estados  Luz = encendida  Brillo = 60%  Color = rojo (“on”)  Reproductor = encendido  Volumen= 80%  Programa TV = Juego de tronos  Eventos  Estado de la luz ha cambiado  Movimiento detectado Lo que se acaba de explicar es el funcionamiento de un hub, y cómo nosotros como usuarios podemos tener el control de casa. ¿Cuál es el núcleo de la automatización del hogar? Atendamos a esta frase para la explicación “cuando llegue a casa y el sol se ponga quiero que las luces se enciendan”. Esto es la automatización del hogar, en este tipo de reglas reside el corazón del asunto. La automatización del hogar está basada en reglas:  El disparador, o accionado (“trigger”) es siempre un evento. No confundirlo con, por ejemplo, cuando las luces estén encendidas (“on”) se dispara tal automatización, porque las luces pueden durar Figura 4-1. Esencia de un hub. 15 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi encendidas un periodo largo de tiempo por lo que se estarían accionando automatizaciones todo ese tiempo. Por lo que lo correcto es estar atentos al momento que se enciendan las luces, es decir, al evento en sí. En la frase dada anteriormente para la explicación de este apartado un evento sería “cuando llegue a casa” es decir, como se verá en mi sistema domótico cuando mi dispositivo móvil pase del estado de not_home a home.  Condiciones: el usuario no siempre desea que las reglas de automatización del hogar se ejecuten, es decir, en ciertas ocasiones necesitamos de distintas casuísticas para su ejecución. En el ejemplo dado la condición es “cuando el sol se ponga” es cuando realmente quieres que las luces se pongan.  Envío de comandos: Enciende las luces. 4.3 Arquitectura HA 4.3.1 Introducción Antes de adentrarnos en la arquitectura de Home Assistant, obtengamos una visión general clara del panorama de la automatización del hogar en su conjunto. De esta manera, podemos mostrar cómo las diferentes partes de Home Assistant encajan en la imagen.  El bloque Home Control es responsable de recopilar información y controlar dispositivos.  El bloque Home automation activa comandos basados en las configuraciones de usuario.  El bloque Smart Home dispara comandos basados en comportamientos anteriores. Figura 4-2. Reglas de usuario. Home Assistant 16 16 El núcleo de Home Assistant es responsable del control de la casa y contiene cuatro partes que hacen esto posible:  Event Bus: facilita la activación y la escucha de eventos. Es el corazón de Home Assistant.  State Machine: realiza un seguimiento de los estados de las cosas (conviene aclarar que llamo cosas a los componentes del sistema como luces, sensores, etc...) y dispara un evento state_changed cuando un estado ha sido cambiado.  Service Registry: escucha eventos en el bus de call_service y permite que otros códigos registren servicios.  Timer: envía un time_changed cada segundo en el bus de eventos. Figura 4-3. Arquitectura del hogar. Figura 4-4. Arquitectura HA. 17 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 4.3.2 Arquitectura de componentes Home Assistant se puede ampliar con componentes. Cada componente es responsable de un dominio específico dentro de Home Assistant. Los componentes pueden escuchar o desencadenar eventos, ofrecer servicios y mantener estados. Hay dos tipos de componentes dentro de Home Assistant: componentes que interactúan con un dominio de Internet de las Cosas, y componentes que responden a eventos que ocurren dentro de Home Assistant. Componentes que interactúan con un dominio de Internet de las cosas. Estos componentes rastrean los dispositivos dentro de un dominio específico y constan de una parte central y una lógica específica de la plataforma. Estos componentes hacen que su información esté disponible a través de State Machine y Event Bus. Los componentes también registran servicios en el registro de servicios para exponer el control de los dispositivos. Por ejemplo, el componente “switch” incorporado es responsable de la interacción con diferentes tipos de interruptores. Una plataforma proporciona soporte para un tipo particular o marca de dispositivo. Por ejemplo, un conmutador podría usar una plataforma WeMo u Orvibo y una bombilla podría interactuar con la plataforma Hue o LIFX. Componentes que responden a eventos que suceden dentro de Home Assistant. Estos componentes proporcionan pequeñas piezas de lógica de automatización del hogar o implican servicios que realizan tareas comunes dentro del hogar. Por ejemplo, el componente device_sun_light_trigger rastrea el estado de los dispositivos y el sol para asegurarse de que las luces están encendidas cuando oscurece y las personas están en casa. El componente usa lógica como esta: En el caso de que el dispositivo del usuario cambie al estado ‘Home’: Si el sol se ha puesto y las luces no están encendidas: Enciende las luces Figura 4-5. Arquitectura componentes. Home Assistant 24 24 25 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 5 HOME ASSISTANT A NIVEL DE USUARIO En este punto se explicará home Assistant a nivel de usuario, y en él se podrá ver las distintas posibilidades que existen para su instalación, y además la configuración y uso de la plataforma. 5.1 Modos de instalación Existe diferentes formas de instalar Home Assistant, pero antes cabe destacar que el hardware donde será alojado será una raspberry Pi 3 y los requisitos a nivel de hardware que se recomiendan usar son: un almacenamiento de 4 GB, una memoria de 1 GB, una conexión a red de 100Mb/s, una intensidad de 2.5A. Existen otras posibilidades si se quieres más potencia de computación y poder utilizar el hardware para otros servicios como son los Intel NUC. Intel NUC es un potente mini PC de cuatro por cuatro pulgadas con características de entretenimiento, juegos y productividad, que incluyen una placa personalizable lista para aceptar la memoria, el almacenamiento y los sistemas operativos que desee. El software, HA propiamente dicho, tienen tres posibles formas de instalación que son Hass.io, Hassbian, y la instalación directa de HA en Raspbian. 5.1.1 Hass.io Hass.io es la distribución creada por los desarrolladores del sistema que incluye el software Home Assistant en una distribución de Linux optimizada para funcionar de la mejor forma en un hardware específico bajo docker. Es decir, un sistema hecho a medida para funcionar de la mejor forma. Por lo tanto Hass.io es el resultado de la combinación de Home Assistant y otras herramientas (hassiosupervisor) que permiten administrar las actualizaciones de HA y agregar soporte para complementos. Hass.io se distribuye a través de contenedores llamados docker: Home Assistant, hassio-supervisor y los distintos complementos se tienen en contenedores diferentes. Home Assistant es el software en sí que gestiona todo nuestro sistema domótico, viene dentro de Hass.io y además, incluye un sistema de Add-Ons que hace mucho más fácil de instalar ciertas cosas, así como actualizarlas. Facilita un poco la vida a la hora de mantener el sistema. Figura 5-1. Intel NUC. Home Assistant a nivel de usuario 26 26 Gracias a hassio-supervisor tenemos la capacidad de actualizar Home Assistant, administrar complementos y crear copias de seguridad de toda la instalación con un solo clic a través de la pestaña "Hass.io" ubicada en el panel izquierdo de la interfaz gráfica. Pestaña que no está presente en una instalación "independiente" de Home Assistant Hass.io es una forma muy sencilla de utilizar la plataforma domótica, pero tiene la desventaja de que tienes menos control en la manera en que la puedes hacer configuraciones manuales. Docker es una herramienta para la distribución y gestión de contenedores. Un contenedor es una colección de uno o más procesos aislados del resto del sistema, todos los archivos necesarios para realizar estos procesos se distribuyen en una imagen. Docker podría verse como un sistema de virtualización, pero la diferencia es que una máquina virtual emula un sistema operativo completo (incluido el hardware), Docker comparte el mismo kernel (que es el kernel de Linux) entre todos los contenedores para no tener la pérdida de rendimiento que tendría con la virtualización 5.1.2 Hassbian Hassbian es un sistema operativo que, a diferencia de Hass.io, se basa en Raspbian (que a su vez se basa en Debian) y se distribuye con Home Assistant instalado de fábrica, que en este caso no se ejecuta en un contenedor Docker, sino directamente en el sistema operativo en un entorno virtual de Python 3. Está hecha para aquellos que desean una experiencia Linux más tradicional y tienen experiencia con Linux, o que tienen la intención de aprender como es mi caso. Figura 5-2. Interfaz Hass.io. 27 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 5.1.3 Home Assistant Home Assistant es en sí mismo el software para la domótica. Está escrito en Python y es de código abierto, por lo tanto, se puede instalar en cualquier plataforma compatible con Python y es gratuito. A modo de resumen nos quedamos con estos conceptos; Home Assistant es el software que todos conocemos; Hass.io es un método de instalación de Home Assistant que ofrece herramientas adicionales para administrar actualizaciones de HA, copias de seguridad y complementos, se basa en docker y está optimizado para dispositivos integrados (como Raspberry Pi); Hassbian es un sistema operativo completo, basado en Raspbian, que tiene un Home Assistant preinstalado. 5.2 Configuración Home Assistant Una vez que hemos instalado HA de alguna de las distintas formas descritas arriba (la manera de instalación se describirá en el punto 6.1) vamos a encargarnos de entender y configurar por dentro todo el potencial que nos ofrece la plataforma. Home Assistant se instala en un entorno virtual en la ruta /srv/homeassistant. Se inicia como un servicio ejecutado por el usuario homeassistant y su configuración se encuentra localizada en la dirección /home/homeassistant/ .homeassistant. Con esto se asegura que las instalaciones de Python y de Home Assistant no interfieren entre sí. Para iniciar sesión en su Raspberry Pi con Hassbian, se utilizará un cliente ssh. Dependiendo de dónde queramos gestionar la plataforma existen diferentes formas para usar el cliente ssh, por ejemplo, en Linux y Mac OS generalmente tienen un cliente ssh instalado. Los usuarios de Windows pueden utilizar clientes ssh como el software Putty . El nombre de usuario predeterminado para conectarse a la raspberry es pi y la contraseña es raspberry. Los usuarios de Linux y Mac OS ejecutarán el siguiente comando en un terminal. ssh pi@dirección-ip-de-pi Los usuarios de Windows inician Putty deberán ingresar la dirección IP de la Raspberry Pi en el campo nombre de host y el puerto 22 en el campo puerto. Luego se deberá hace click en Abrir y se abrirá una ventana de terminal. Se introducirá las credenciales, nombre de usuario predeterminado que es pi y la contraseña es raspberry. Para iniciar HA una vez iniciada la sesión y establecida la conexión con la Raspberry se ejecutará el siguiente comando sudo systemctl start [email protected] Figura 5-3. Hassbian. Home Assistant a nivel de usuario 28 28 De la misma forma para detener o reiniciar el servicio se tendrá que ejecutar los siguientes comandos sudo systemctl stop [email protected] sudo systemctl restart [email protected] Para empezar a poner en marcha todos los componentes, automatizaciones y configurar la instalación, se tendrá que trabajar con los archivos de configuración de Home Assistant. Cuando se inicia por primera vez, HA escribe un archivo de configuración predeterminado que habilita la interfaz web y el descubrimiento de dispositivos que estén en la red de casa. Para poder acceder a la interfaz web se deberá acceder a http://dirección-ip:8123/: por ejemplo, si nuestro sistema tiene la dirección 192.168.08.48, se econtrará la interfaz web de Home Assistant en la diección como http://192.168.08.48:8123/. Dentro de la carpeta de configuración está el fichero más importante, con el que se trabaja y el que se crea cuando se inicia por primera vez HA. Este fichero recibe el nombre de configuration.yaml. Este es el archivo principal que contiene las integraciones que se cargarán con sus configuraciones. Home Assistant utiliza el formato YAML que significa “Another Another Markup Language “y, al igual que Python, utiliza espacios en blanco (no tabulaciones) para delimitar las secciones de código. 5.2.1 YAML YAML es un lenguaje de serialización de datos diseñado para ser leído y escrito por humanos. Normalmente se utiliza para definir archivos de configuración, aunque también es posible serializar objetos, es decir, escribir la estructura de un objeto en modo cadena de texto para posteriormente poderlo recuperar. A diferencia de Python, YAML no permite tabulaciones literales. Este lenguaje es muy legible para las personas, más legible que JSON y sobretodo que XML. Es case sensitive y normalmente lo encontraremos con la extensión .yml o incluso .yaml. Los archivos YAML comienzan con una lista. Cada elemento de la lista es una lista de pares clave / valor, comúnmente llamados "hash" o "diccionario". Por lo tanto, necesitamos saber cómo escribir listas y diccionarios en YAML. Existen unas reglas generales que deben cumplirse en un documento YAML:  Los datos de un documento YAML deben ser legibles, imprimibles y utilizando caracteres Unicode, UTF-8 o UTF-16.  Los comentarios se realizan utilizando el carácter ‘#’ dentro de la línea que contiene el comentario.  Los caracteres ‘,’ y ‘;’ deben ir seguidos de un espacio en blanco. De esta forma, se podrán representar valores que queramos que tengan esos caracteres.  Los espacios en blanco están permitidos, pero no los tabuladores.  Las listas comienzan por el carácter ‘-’ con un valor por cada línea, aunque también se pueden utilizar corchetes [] poniendo los valores dentro de ellos separados por comas ‘,’ junto con un espacio en blanco.  Un vector estará formado por el par clave/valor, estando separados ambos por ‘:’ poniendo uno por línea, aunque también podemos utilizar {} poniendo cada uno de ellos dentro separados por comas ‘,’ junto con un espacio en blanco.  Se pueden utilizar caracteres de escape ‘\’ para representar caracteres especiales.  Para incluir múltiples documentos, los separaremos por tres guiones seguidos ‘—‘ e indicando el fin de un documento con tres puntos seguidos …  La estructura del documento se denota indentando con espacios en blanco; sin embargo, no se permite el uso de caracteres de tabulación para indentar. A continuación, se expondrán una serie de ejemplos para entender mejor YAML 1. Listas # Libros favoritos, formato de bloque 29 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi - HarryPotter - Enigma - LaFortaleza - ElPrincipito # Libros favoritos, formato en línea [HarryPotter, Enigma, LaFortaleza] [TusZonasErroneas, Elprincipito] 2. Vectores asociativos #En formato bloque nombre: Santiago Romero edad: 24 #En formato línea {nombre:Santiago Romero, edad: 24} 3. Lista de vectores asociativos - {nombre: Santi Romero, edad: 4} - nombre: Jose Luis edad: 28 4. Vectores asociativos de listas hombres: [Santi Romero, José Luis] mujeres: - Marisa Cabrera - Veronica Fernandez También han de mencionarse los diccionarios que permiten guardar un conjunto no ordenado de pares clavevalor (key: value) # An employee record martin: name: Martin D'vloper job: Developer skill: Elite Son posibles estructuras de datos más complicadas, como listas de diccionarios, diccionarios cuyos valores son listas o una combinación de ambos # Empleados - martin: nombre: Martin Gutierrez trabajo: programador habilidades: - python - perl - pascal - Pepe: name: Pepe Gozalez trabajo: programador Home Assistant a nivel de usuario 30 30 habilidades: - lisp - fortran - erlang Aprovechando que en el grado hemos estudiando JSON y es un lenguaje bastante extenso y conocido, haremos una comparativa para poder verlo con más claridad Así, por ejemplo, el siguiente JSON: { "configuracion": { "IPs": [ "127.0.0.1", "192.168.0.1" ], "puerto": 8000, "nombre": "miservidor.com" } } Se escribiría así en YAML: configuracion: IPs: - 127.0.0.1 - 192.168.0.1 puerto: 8000 nombre: miservidor.com Por lo tanto, para cada integración que desee utilizar en Home Assistant, se debe agregar código en el archivo configuration.yaml para especificar su configuración. En el siguiente ejemplo (ya es un ejemplo de HA) se muestra la manera de incluir un componente de notificación con la más que conocida plataforma telegram. notify: - name: telegramsanti platform: telegram chat_id: 556769163 Notify permite enviar notificaciones a una amplia variedad de plataformas como por ejemplo pushbullet que es la encargada de enviarnos la notificación al teléfono. El componente proporciona la lógica central para algunas funciones (notify se encarga del envío de notificaciones). La plataforma realiza la conexión a una plataforma de software o hardware específica (telegram). Los conceptos básicos de la sintaxis YAML definidos por los desarrolladores de Home Assistant son colecciones de bloques y asignaciones que contienen pares clave-valor. Cada elemento de una colección comienza con un ‘-’ (lo denominado listas) mientras que las asignaciones tienen el formato key: value. Si se utilizan claves (key) duplicadas, se utiliza el último valor de una clave. Se debe tener en cuenta que los espacios delimitan las anidaciones, y esto quiere decir que por ejemplo platform: telegram es una propiedad del componente notify ya que está anidada dentro. Existen webs y herramientas que validan tú codigo YAML online y poder corregirlo antes de cargarlo en HA. YAMLint es uno de ellos, aunque en la propia interfaz de HA existe una herramienta validadora. A continuación, se definirá otro componente importante dentro del configuration.yaml como es un 31 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi input_select. Es un seleccionador de entradas que permite al usuario definir una lista de valores que se pueden seleccionar a través de la interfaz y se puede usar para la automatización. Cuando un usuario selecciona un nuevo elemento del input_select, se genera un evento de transición de estado que puede ser usado en una automatización. La estructura de un input_select es la siguiente: input_select (mapa ) (Requerido) Alias para la entrada. Se permiten múltiples entradas. options (lista) (Requerido) Lista de opciones para elegir. name (cadena) (Opcional) Nombre descriptivo de la entrada. initial (mapa) (Opcional) Valor inicial cuando se inicia Home Assistant. Valor por defecto: primer elemento de opciones icon (icono) (Opcional) Icono para mostrar para el componente. A continuación, se muestra un ejemplo en el configuration.yaml #Ejemplo en el configuration.yaml input_select: quien_limpia: name: quien limpia hoy options: - Santi - Emilio initial: Emilio icon: mdi:chef-hat habitación_invitados: options: - Visitantes - Visitantes con niños - Habitacion vacia Vemos como se usa lo descrito arriba, una colección de bloques para el valor de las opciones y las otras propiedades como el nombre se especifican mediante asignaciones. Aquí existen dos entradas para input_select que son quien_cocina o habitacion_invitados son los nombres del input_select y los valores los que están anidados debajo de ambos. En el siguiente ejemplo se mostrará cómo anidar una colección de asignaciones en una asignación. Vamos integrar varios sensores diferentes, tal y como vemos en el state_topic. sensor: - platform: mqtt state_topic: sensor/topic - platform: mqtt state_topic: sensor2/topic Para mejorar la legibilidad del código del archivo de configuración principal, se recomienda separar en distintos Home Assistant a nivel de usuario 32 32 archivos YAML en función de los componentes declarados, con una sintaxis del tipo lights: !include lights.yaml. Esta declaración le dice a HA que inserte el contenido de lights.yam en ese punto. Hay que tener en cuenta que solo puede haber un !include para cada componente. Otra de las opciones que hay será la de incluir uno o varios ficheros .yaml dentro de una carpeta del directorio principal de homeassistant. Otro aspecto a destacar es que HA distingue entre mayúsculas y minúsculas, un estado de 'on' no es el mismo que 'On' o 'ON'. 5.2.2 Variables de configuracion inicial Inicialmente HA intentará reconocer las variables de configuración incial básicas como la geolocalización del usuario y esto lo hace mediante la dirección IP. Asigna una latitud, longitud, elevación, unidad de temperatura, unidad de medida (métrica), zona horaria por defecto. Esto se puede cambiar modificando en el configuration.yaml los siguientes parámetros. Variables de configuración inicial Latitude (float)(Optional ) Latitud de tu localización. Fundamental para conocer la salida y puesta de sol, entre otros ejemplos. longitude (float)(Optional) Longitud de tu localización. Fundamental para conocer la salida y puesta de sol, entre otros ejemplos. elevation (integer)(Optional) Atura por encima del mar. unit_system (string)(Optional) metric para el sistema métrico, imperial para el sistema imperial (el que usa yardas, pies, pulgadas, etc). time_zone (string)(Optional) Para elegir la zona horaria nos debemos didrigir a la columna “TZ database name” de Wikipedia https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. Nuesta zona horaria es según la columna Europe/Madrid name (string)(Optional) Nombre de la localización dónde se está ejecutando HA A continuación, se muestra un ejemplo: homeassistant: latitude: 40.2970592 longitude: -4.5882800 elevation: 659 unit_system: metric time_zone: Europe/Madrid name: Santi Home 33 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 5.3 Añadir dispositivos a Home Assistant Cada dispositivo inteligente consiste en el dispositivo en sí mismo y la pieza que lo hace inteligente, la conectividad. La conectividad de un dispositivo puede consistir en control, estado o ambos. El estado describe lo que un dispositivo está haciendo en este momento. Por ejemplo, una luz puede estar encendida con un color rojo y un brillo con cierto valor. El control consiste en comunicarse con el dispositivo inteligente mediante el envío de comandos a través de una API. El estado se puede dividir en 5 categorías las cuales no se excluyen mutuamente: un estado del dispositivo puede estar disponible a través de la nube y la conectividad local  Estado asumido No se puede obtener el estado del dispositivo y lo que se hace es asumir el estado basado en el último comando. Estos son dispositivos que únicamente permiten ser controlados y que no tienen las capacidades para hacer que su estado esté disponible. Por ejemplo, los dispositivos con controles remotos de infrarrojos como televisores y AC. Se presionar el botón de encendido en el mando, pero solo se puede asumir que el comando fue recibido y ejecutado con éxito La automatización del hogar tendrá que acercarse a dichos dispositivos basándose en la suposición de que los comandos se reciben correctamente: utilizando actualizaciones optimistas.  Encuestando a la nube (Cloud Polling) La integración de este dispositivo se realiza a través de la nube y requiere una conexión a Internet activa. Estos son dispositivos que solo informarán su estado a su propio backend de la nube. El backend de la nube permitirá leer el estado, pero no notificará cuando haya llegado un nuevo estado. Esto requiere que la automatización del hogar verifique con frecuencia si el estado se ha actualizado.  Empuje de la nube (Cloud Push) Todo de la sección anterior se aplica a este. Además, la nube también notificará a automatización del hogar cuando haya llegado un nuevo estado.  Encuesta local (Local Pollig) Estos dispositivos ofrecerán una API que es accesible localmente. La automatización del hogar deberá verificar con frecuencia si el estado se ha actualizado. Además, no depende de internet, solo conexión con el dipositivo.  Empuje local (Local Push) Ofrece comunicación directa con el dispositivo. Home Assistant será notificado tan pronto como haya un nuevo estado disponible. El control de un dispositivo se puede hacer, como el estado, a través de la nube y / o la conectividad local. Pero la parte más importante del control es saber si el comando enviado al dispositivo fue un éxito y conocer el nuevo estado del dispositivo.  No hay control Estos dispositivos no pueden ser controlados y sólo ofrecerán estado.  Estado de la encuesta después de enviar el comando Estos dispositivos requerirán que el estado sea sondeado después de enviar un comando para ver si un comando fue exitoso.  El dispositivo empuja actualización de estado Estos dispositivos no devolverán un nuevo estado como resultado del comando, sino que impulsarán un nuevo estado de inmediato.  El comando devuelve el nuevo estado Home Assistant a nivel de usuario 40 40 - condition: time after: '16:00:00' before: '23:00:00' action: service: homeassistant.turn_on entity_id: group.living_room # Segunda automatizacion - alias: 'apaga las luces’ trigger: platform: state entity_id: group.all_devices to: 'not_home' action: service: light.turn_off entity_id: group.all_lights La primera automatización recibe el nombre de ‘enciende las luces’ y su esquema es sencillo. Tiene dos disparadores que son la caída del sol detectada por HA con el componente que le viene integrado por defecto, y el otro disparador es que todos los dispositivos integrados pasen al estado ‘home’. También existe una condición que es temporal, es decir para que ocurra debe ser después de las 16.00 y antes de las 23.00. Si disparador y condición se cumple se llamará a la acción. La segunda automatización tiene como disparador que el grupo de todos los dispositivos de casa pasen al estado ‘not_home’. Si esto ocurre se llama a la acción de apagar todas las luces. No tiene condición. También desde la interfaz de usuario de podrán configurar automatizaciones. Elegir Configuración, que se encuentra en la barra lateral, luego haga clic en Automatización para ir al editor de automatización y presionar el signo + en la esquina inferior derecha para comenzar con la automatización Por último es importante comentar que para no hacer engorroso el archivo de configuración se podrá tener un archivo llamado automations.yaml que contendrá las automatizaciones correspondientes y se podrá agregar con la directiva include al fichero de configuración automation: !include automations.yaml 5.5 Scripts Los scripts son una secuencia de acciones que Home Assistant ejecutará. Estas secuencias están disponibles como una entidad a través de un componente independiente, aunque también pueden incorporarse en una automatización. La estructura básica de la sintaxis del script es una lista de mapas clave / valor que contienen acciones. Si una secuencia de comandos contiene solo una acción, la lista se puede omitir quitando los guiones. Se introducen al fichero de configuración mediante la sentencia script. El siguiente script de ejemplo de nombre example_script tiene dos servicios que son encender la luz de la identidad con id “light.ceiling” y enviar una notificación bajo el mensaje “Encendida la luz del techo”. script: example_script: sequence: - service: light.turn_on data: entity_id: light.ceiling - service: notify.notify data: message: 'Encendida la luz del techo' 41 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 5.6 Interfaz de usuario Como hemos ido describiendo existen muchas configuraciones manuales que se pueden hacer desde la interfaz de usuario web. En este apartado se hará una descripción con más detalle de la interfaz de usuario. Home Assistant cuenta con una aplicación nativa para iOS, mientras que para los clientes Android se puede configurar la página como pantalla de inicio en Chrome accediendo a la dirección http://ip-raspberry-pi:8123 La primera imagen que tenemos de la interfaz al iniciar HA es la que nos viene por defecto con dos sensores que son un símbolo meteorológico del sol y el usuario Santiago. Aquí se irán añadiendo los distintos sensores que se van añadiendo. En la zona de más abajo con la temperatura exterior es donde se irán añadiendo los interruptores, cámaras ,automatizaciones y scripts que se vayan configurando. Está en nuestra habilidad de organizar por grupos para dejar una interfaz impoluta y ordenada. En la interfaz vemos en la esquina superior izquierda un cuadrito con tres rayas verticales, si clicamos en ellas podemos ver un menú desplegable con las siguientes opciones.  Resumen: aquí aparecerá el cuadro de mandos domótico de todo lo que se configure.  Mapa: obtenemos la ubicación de nuestro HA mediante la dirección IP, o porque se la hayamos indicado.  Registro: muestra un registro secuencial donde se indica cómo van cambiando los estados de los dispositivos que hay integrados, indicando la hora y el orden en que se van sucediendo.  Historial: este apartado hace un seguimiento de todo lo que sucede dentro de Home Assistant y le permite al usuario navegar a través de él.  Configuración: como se ha ido describiendo a lo largo del punto 5, en este apartado se podrá realizar la configuración de los dispositivos y automatizaciones. Dentro se pueden ver diferentes apartados:  Home Assistant Cloud: es un servicio de paga para mantener el proyecto en la nube con ciertas ventajas en configuraciones.  General: su uso principal es validar el archivo de configuración.  Customization: personalización de los dispositivos, añadiendo nombre o iconos.  Automation: para generar las automatizaciones que queramos en nuestro hogar. Figura 5-5. Panel inicial. Home Assistant a nivel de usuario 42 42  Script: es igual que el apartado anterior, pero aquí sólo se definen los scripts o comandos que se ejecutan dentro de automation. En el pie de página de este menú desplegable pordemos ver las herramientas de desarrollador “Developer tools” que constan de los siguientes apartados Por order de izquierda a derecho en los iconos tenemos: servicios, estados, eventos, plantillas, información. Las herramientas de desarrollo están diseñadas para que todos (no solo para los desarrolladores) prueben rápidamente cosas, como llamar a servicios, actualizar estados, generar eventos y publicar mensajes en mqtt ... etc.). También es una herramienta necesaria para aquellos que escriben automatizaciones personalizadas y scripts a mano. Figura 5-6. Herramienta desarrolladores. 43 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 6 MI SISTEMA DOMÓTICO 6.1 Instalación de Hassbian Vamos a instalar Hassbian en nuestra Raspberry Pi, que como se comentó es una de las maneras más fáciles de instalación ya que es un sistema operativo que se basa en Raspbian (que a su vez se basa en Debian) y se distribuye con Home Assistant instalado de fábrica. Comenzamos descargando la última versión de Hassbian accediendo a un repositorio de Github al que se podrá acceder por la página oficial de HA. En mi caso he descargado la última versión de Hassbian que es la 1.6.1 Una vez tenemos la imagen procedemos a grabarla en una tarjeta microSD de al menos 4 Gb. En mi caso he utilizado una de la marca Samsung EVO plus de clase 10 con 32 Gb. Para proceder al proceso de grabación es necesario la utilización de un software llamado Etcher, que también es posible utilizar otros como Win32DiskImager. El siguiente paso es conectar la Rapsberry Pi mediante un cable ethernet a nuestro router, esto es fundamental antes de introducirle la tarjeta microsd y encenderla ya que la primera vez que se inicia, la Raspberry Pi se conectará a Internet y comenzará a descargar Home Assistant. Es importante estar utilizando una fuente de alimentación adecuada. Los cargadores móviles pueden ser inadecuados, ya que algunos solo fueron diseñados para proporcionar suficiente energía al dispositivo para el que fue diseñado por el fabricante. No se debe intentar alimentar la Raspberry Pi desde el puerto USB de un televisor, computadora o similar. Figura 6-1. Etcher. Mi sistema domótico 44 44 Una vez tenemos en marcha Hassbian corriendo en nuestra Raspberry Pi, deberemos conocer la dirección IP que nuestro router le asigna que recibe para poder acceder mediante http://dirección-ip:8123/. Para ello accedemos a nuestro router vía web mediante la dirección 192.168.0.1 y en el aparecerá un listado de dispositivos que tenemos en casa con sus respectivas direcciones asignadas. Vemos que la dirección IP asignada a nuestro sistema es 192.168.0.163 En el primer acceso a nuestro sistema nos pedirá crear una cuenta en la que tendremos que introducir nuestro nombre, nombre de usuario, y contraseña. La siguiente pestaña de configuración es para introducir el nombre que recibirá tu casa y la ubicación donde se encuentra. La zona horaria, y el sistema de unidades también es configurable en esta pestaña. Una vez que se accede a http://192.168.0.163:8123/ y carga la página, significa que todo está configurado para la instalación básica. Home Assistant debería comenzar a detectar todos los dispositivos IOT de marca que pueda haber conectado a su red local. En este caso como no tengo ninguno activado mi pantalla de inicio sería la que aparece en la Figura 5-5. 6.2 Acceso SSH y configuración IP Se utilizará el cliente PuTTY de Windows para acceder vía SSH a nuestro sistema con las credenciales iniciales por defecto que son pi y contraseña rapsberry. Abrimos el cliente y le proporcionamos la dirección IP asignada por el router y el puerto 22. Marcamos la opción SSH en el apartado Connection type. Pulsamos en Open. Figura 6-2. Mi router. 45 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi Una vez introducidas las credenciales de acceso tendremos el terminal que nos indica que estamos dentro de nuestro sistema Hassbian y que podremos navegar a través de él mediante comandos. Habilidad más que adquirida en el grado. Figura 6-3. PuTTY. Mi sistema domótico 46 46 Una vez dentro es necesario cambiar las credenciales de acceso ya que al ser las que se tienen configuradas por defecto haría nuestro sistema vulnerable. sudo passwd pi Nos pedirá el ingreso de una nueva contraseña de UNIX. Debemos recordar que esta contraseña distingue entre mayúsculas y minúsculas. Esta es la contraseña de acceso ROOT para su nuevo servidor. Es muy importante que recuerdar esta contraseña. Con la ejecución del siguiente comando sudo raspi-config accederemos a una ventana en la que nos da diferentes opciones de configuración. Se procederá a cambiar la zona horaria en la 4 opción Localisation options eligiendo Europa y a continuación Madrid. El siguiente paso es configurar la conexión Wi-Fi. No es un paso necesario ni obligatorio, pero ya que nuestro modelo de Raspberry Pi tiene integrada una tarjeta de conexión Wi-Fi haremos uso de ella y podremos ubicar nuestro sistema en el lugar que deseamos sin necesidad de atender a una conexión por cable. Utilizamos el siguiente comando que abre el archivo wpa_supllicant.conf que contiene las credenciales de acceso a la red. sudo nano /etc/wpa_supplicant/wpa_supplicant.conf Al final del fichero introducimos las credenciales de nuestro router Network={ ssid=”Robaphone” psk=”*****” Figura 6-4. Terminal Hassbian. 47 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi } En ssid se introduce el nombre del punto de acceso (mi punto de acceso se llama “robaphone”) y en psk la contraseña. Una vez introducido guardamos los cambios mediante la secuencia CRTL + x, Y, Enter. Por último, procedemos a introducir el comando sudo reboot. Se nos sale del cliente puTTy y es debido a la nueva asignación de una dirección IP 192.168.0.156. El servidor DHCP (Dinamic Host Control Protocol) rara vez te asigna una dirección IP única y cada vez que nuestro sistema se reinicie y vuelva a acceder a la red puede ir variando su dirección IP por lo que sería muy engorroso tener que volver a buscarla y acceder de nuevo vía web. Para esto se aporta la solución de asignarle a nuestro sistema una IP fija. Tenemos que decirle a nuestra Raspeberry Pi que no recurra al DHCP (que viene programado por defecto) y que en su lugar use siempre una dirección dada. La que queramos, pero siempre la misma, es decir, utilizar una IP estática. Empezamos por conectaros vía SSH con nuestra nueva dirección 192.168.0.156. Una vez dentro vemos con ifconfig que esa es nuestra IP actual y vemos también nuestra tú mascara de red. Es necesario fijarnos en el apartado de wlan0 ya que estamos conectados mediante la red inalámbrica. Podemos ver que efectivamente la dirección coincide y que la máscara de red es 255.255.255.0. Esto nos dice que nuestra direcciones IP varían en el rango de 192.168.0.* siendo * un número entre 0 y 255, aunque normalmente el 0 y el 255 suelen estar reservados. Usaré 200 como dirección, por lo que nuestra IP quedará 192.168.0.200 Con el comando route –ne vemos el router por defecto de mi red y sabemos que tiene la dirección gateway 192.168.0.1. Ahora tenemos que irnos al fichero de nuestro sistemas que queremos editar y accedemos mediante el comando sudo nano /etc/dhcpcd.conf. Añadimos las siguientes líneas. #configuracion ip estatica interface wlan0 static ip_address=192.168.0.200/24 static routers=192.168.0.1 static domain_name_servers=8.8.8.8 8.8.4.4 Es necesario acceder a la configuración del router para deshabilitar que el servidor DCHP asigna la dirección usada por nuestro sistema como estática y así evitar problemas Figura 6-5. Averiguar IP Mi sistema domótico 48 48 6.3 Samba Hasta este instante cada vez que debemos configurar algo de nuestro sistema, es decir, archivos en Hassbian debemos acceder vía SSH y movernos en el terminal mediante comandos. Para acabar con esto podemos utilizar el protocolo Samba. Samba es una implementación de código abierto del protocolo Server Message Block (SMB). Los sistemas operativos Microsoft Windows y OS/2 utilizan SMB para compartir por red archivos e impresoras y para realizar tareas asociadas. Gracias al soporte de este protocolo, Samba permite a las máquinas Unix entrar en el juego, comunicándose con el mismo protocolo de red que Microsoft Windows y aparecer como otro sistema Windows en la red (desde la perspectiva de un cliente Windows). El servidor Samba ofrece los siguientes servicios:  Compartir uno o varios sistemas de archivos  Compartir uno o varios sistemas de archivos distribuidos  Compartir impresoras instaladas en el servidor entre los clientes Windows de la red  Ayudar a los clientes permitiéndoles navegar por la red  Autentificar a los clientes que ingresan en un dominio Windows  Proveer o ayudar con un servidor de resolución de nombres Windows (WINS). En resumidas cuentas, es un modo más fácil de acceder a los archivos de Raspberry (Hassbian) mediante nuestro PC que trabaja con Windows. Solo existe un paso a seguir y es la ejecución del comando sudo hassbian-config install samba. Figura 6-6. Samba. 49 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 6.4 Acceso remoto Cuando accedemos Internet, generalmente lo hacemos a través de nuestra dirección IP pública, una IP que además suele ser dinámica (es decir, que cambia cuando reiniciamos el router o cada cierto tiempo). Lo que es inviable si por ejemplo queremos mantener un servidor conectado a Internet o queremos tener disponible nuestro ordenador, o un dispositivo de nuestra red local para conectarnos a él desde cualquier lugar. Si se produce un reinicio del mismo podríamos obtener una dirección IP diferente y no podríamos acceder a nuestro sistema. Para ayudarnos a solucionar estos inconvenientes existen los DDNS, o servidores DNS dinámicos, como Duck DNS. Por lo que servicios gratuitos como Duck DNS nos permite tener localizados nuestros dispositivos en internet como si tuvieran una IP fija. Un DDNS es un servicio (gratuito o de pago) diseñado para convertir nuestra dirección IP pública, complicada de recordar, en un dominio mucho más sencillo de recordar y, además, mantenerlo siempre actualizado de manera que podamos estar seguros de que la conexión con nuestra red está siempre garantizada, incluso aunque tengamos IP dinámica. Existen muchos servidores DDNS disponibles en la red. Algunos de ellos son de pago, como DynDNS, y otros gratuitos, como No-IP, pero muy molestos al estar cada poco tiempo pidiendo pagar por el servicio o dando de baja nuestro DDNS si no lo renovamos. Duck DNS es un servidor DNS totalmente gratuito que nos permite hacer uso de este tipo de servicios sin tener que pagar por él y, sobre todo, sin molestos avisos cada poco tiempo para renovarlo manualmente. Por lo tanto para usar nuestro sistema desde internet fuera de nuestra red local se implementará Duck DNS + LetsEncrypt para tener un servicio DN gratuito y con un tráfico seguro encriptado. Lo primero es acceder a la pagina de DuckDNS https://www.duckdns.org/ registranos de alguna de las formas posibles, en mi caso elijo por cuenta de Gmail. Una vez registrado crearemos un domino que será con el que podamos acceder desde internet. Mi dominio será santihome.duckdns.org. También se nos asigna una IP publica y un token que usaremos mas adelante. El siguiente paso es dirigirse a la pestaña Install de la web y seguir los pasos marcados. ps -ef | grep cr[o]n mkdir duckdns cd duckdns nano duck.sh Figura 6-7. Duck DNS. Mi sistema domótico 56 56 No hace falta añadir más código al archivo de configuración ya que con el descrito en el punto 6.7 la integración funcionará correctamente ya que estamos usando la misma plataforma que el enchufe. Se cambiará el nombre de la bombilla a uno más amigable como “Luz salón” utilizando friendly_name en el customize.yaml o por la interfaz gráfica (que es lo mismo). 6.9 Sonoff Touch Sonoff Touch es un interruptor de pared para controlar el encendido y apagado de alguna de nuestras luces. Es un interruptor inteligente al cual se puede acceder mediante nuestra red Wi-Fi y poder ejercer un control inalámbrico sobre él. Cabe destacar que para accionarlo manualmente no dispone de un accionando mecánico si no que es táctil. Para instalar el interruptor es necesario primero reemplazar el interruptor de la zona que queremos controlar. En este caso quiero ejercer un control sobre las luces de mi salón. En primer lugar es necesario cortar la corriente eléctrica ya que vamos a manipular cables, una vez realizado esto y habiendo reemplazado nuestro enchufe, procedemos a colocar los cables de tierra, fase y neutro en nuestro conexionado tal y como se puede observar en la Figura 6-16. Una vez colocado nuestro interruptor deberemos comprobar que funciona sin ningún problema. Figura 6-14. Bombillas HA. Figura 6-16. Delantera Sonoff. Figura 6-15. Delantera Sonoff. 57 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi Descargaremos la aplicación en nuestra App Store llamada eWelink y en ellas procederemos con los pasos marcados en otros apartados, registro, inicio de sesión, descubrimiento del dispositivo en nuestra red, etc. Una vez terminados estos pasos procederemos a la introducción del dispositivo en HA. HA no tiene de forma nativa el control sobre dispositivos Sonoff por lo que habrá que instalar componentes personalizados. En este enlace https://github.com/peterbuga/HASS-sonoff-ewelink hacia un repositorio de GitHub podremos encontrar un componente personalizado para Home Assistant que nos permitirá utlizar los dispositivos de Sonoff. Una vez lo tenemos descargado y descomprimido deberemos copiar el directorio sonoff dentro de nuestro directorio /homeassistant/custom_components. El directorio sonoff contiene tres archivos python con el que se podrá inicializar el componente sonoff sin necesidad de cambiar el firmware original, ya que está opción es algo más compleja. En HA es necesario añadir el en el fichero de configuración el siguiente código sonoff: username: [email protected] password: !secret sonoffpass scan_interval: 10 grace_period: 600 api_region: 'eu' Una vez realizado todos estos pasos, es de interés comentar el problema al que me enfrenté en la isntalación de este este interruptor, y es que al seguir todos los pasos y reiniciar HA me aparecía un error “Invalid config, sonoff could be not set up”. Tras buscar en el foro de GitHub donde se exponen los problemas que se tienen y depurando el error mediante la consola de HA que te permite seguir los errores que se producen en el sistema, encontré la solución. El error marcado era el siguiente. Error loading custom_components.sonoff. Make sure all dependencies are installed Traceback (most recent call last): File "/srv/homeassistant/lib/python3.7/site-packages/homeassistant/loader.py", line 263, in _load_file module = importlib.import_module(path) File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/home/homeassistant/.homeassistant/custom_components/sonoff/__init__.py", line 28, in <module> import websocket ModuleNotFoundError: No module named 'websocket' HA es instalado en un entorno virtual dentro de nuestro sistema Rapsbian basado en Linux, y el problema es que el archivo de inicialización del componente __init__py no podía importar el modulo ‘websocket’. Por lo que seguí los siguientes pasos. 1. sudo –u homeassistant –H –s (para cambiar al usuario de HA) 2. cd /srv/homeassistant/bin (para moverme hacia el entorno virtual) 3. . activate (activacion del entorno virtual) 4. pip install websocket-client Una vez instalado el interruptor sin ningún problema se procederá a cambiar el nombre que aparece en la interfaz gráfica a “Luz cocina”. Mi sistema domótico 58 58 6.10 Notificaciones telegram Bajo mi punto de vista una de las cosas más importante a la hora de dotar a tu casa de inteligencia es el hecho de que el sistema tenga la capacidad de hablar con nosotros, es decir, de ser capaz de notificarnos y sobre todo que estas notificaciones nos vengan dadas en una aplicación la cual usemos día a día para una lectura más fácil. Existen multitudes formas de notificación, pero la elegida en este proyecto es Telegram, un sistema de mensajería instantánea para smartphones parecida a WhatsApp pero que te permite crear bots con los que podremos interactuar. Por lo que el primer paso será crear un bot en Telegram. Pasos a seguir: 1. Buscamos el usuario BotFather, que es, como el nombre indica, el padre de todos los bot. Se usa para crear nuevas cuentas de bot y gestionar las existentes 2. Introducimos por teclado /start y aparecerán una lista de comandos que se podrán usar. 3. Introducimos el comando /newbot e introducimos el nombre que queramos. En mi caso el nombre introducido es SantiHome 4. En este paso es necesario introducir el nombre de usuario acabado de alguna manera en bot, por ejemplo, SantiHome_bot 5. Ya tenemos creado el bot y Botfather nos da una clave para poder hacer uso del bot por web. Figura 6-17. Luz cocina. 59 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi Para poder integrar Telegram en mi sistema es necesario tan solo un dato, el ID de conversación para que nuestro bot sepa a quien hablar, para eso, buscamos nuestro bot en la aplicación mediante su nombre. Escribiremos el comando /start y posteriormente el comando /getid y contestará con un número. Con ese número apuntado, ya podemos configurar nuestro Home Assistant para que pueda notificarnos mediante Telegram. Home Assistant permite diferentes maneras de usar Telegram ya que, el propio Telegram permite varias maneras de interactuar con los bots, la opción utilizada es “Telegram Polling” para poder mandar mensajes a nuestro usuario en Telegram. Para ello, abriremos la configuración y añadiremos lo siguiente: telegram_bot: - platform: polling api_key: AAAA1234 allowed_chat_ids: - BBBB1234 notify: - name: telegramsanti platform: telegram chat_id: BBBB1234 En AAA1234 se introduce la clave que se nos suministró a la hora de crear el bot y en BBB1234 se introduce el ID de conversación. Es posible la comunicación con más usuarios introduciendo dentro de allowed_chat_ids y chat_id los diferentes ID de conversaciones que queramos añadir. Para probar que la integración de la notificación funciona he creado una automatización que me avisa por Figura 6-18. BotFhater. Mi sistema domótico 60 60 telegram cuando la luz de la habitación se enciende. automation: - alias: 'Notifica luz habitacion ON' trigger: - platform: state entity_id: light.yeelight_color1_04cf8ca2deda from: 'off' to: 'on' condition: [] action: service: notify.telegramsanti data: message: "Luz habitacion encendida" Por lo que hago la comprobación y enciendo la luz desde HA y efectivamente se me notifica mediante Telegram el mensaje “Luz habitación encendida” Figura 6-19. Automatización Luz. 61 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 6.11 Información sobre el Sistema 6.11.1 Información sobre Raspberry Pi En este apartado se detallará como llevar a cabo un control sobre los parámetros de nuestra Rapsberry Pi, parámetros tales como uso de la memoria, tarjeta microSD, temperatura, … entre otros. Para ellos se utilizarán dos plataformas que no darán la información, systemmonitor y command_line. La plataforma systemmonitor (se utiliza como un sensor) permite monitorear el uso del disco, el uso de la memoria, el uso de la CPU y los procesos en ejecución. - platform: systemmonitor resources: - type: disk_use_percent arg: / - type: memory_use_percent - type: memory_free - type: processor_use - type: last_boot La plataforma command_line se puede utilizar para emitir comandos específicos para obtener datos. Esta podría convertirse en nuestra plataforma más poderosa, ya que permite a cualquier persona integrar cualquier tipo de sensor en Home Assistant que pueda obtener datos desde la línea de comandos. - platform: command_line name: Temperatura CPU command: "cat /sys/class/thermal/thermal_zone0/temp" unit_of_measurement: "°C" value_template: '{{ value | multiply(0.001) | round(1) }}' Veremos como en la pantalla principal de la interfaz de usuario nos aparecen en la parte de los sensores todos los que acabamos de añadir relativos al estado del sistema. El más importante es el de la temperatura ya que nos indica los grados a la que está la CPU, parámetro muy importante para que podamos llevar el control y no sufra daños. La temperatura no debería subir más de 70ºC ya que la Raspberry cuenta con disipadores de calor, por lo que se creará una automatización que nos enviará una notificación al móvil si la temperatura pasa de los 65ºC, para poder actuar en consecuencia. - id: 'Notificacion temperatura cpu' alias: Notificacion temperatura CPU trigger: - above: '65' entity_id: sensor.temperatura_cpu platform: numeric_state Figura 6-20. Parámetros del sistema. Mi sistema domótico 62 62 condition: [] action: - data: message: La temperatura de la CPU ha llegado a los {{ states.sensor.sensor.temperatura_cpu.state }} ºC service: notify.telegramsanti 6.11.2 Información sobre HA También es importante conocer información acerca de Home Assistant para poder sacar el mejor rendimiento posible a nuestro sistema. La plataforma version dentro de sensor nos da información acerca de las versiones actuales de HA. Sensor: - platform: version name: Version instalada HA Existen otras muchas formas de conocer la versión de la plataforma, por ejemplo, usando command_line sensor: - platform: command_line name: Version HA command: "/home/homeassistant/bin/hass --version" Otra plataforma interesante de comentar es scrape que mediante ella podemos recopilar información de sitios webs, cargando una página HTML con la opción de buscar valores. Solo funciona con páginas webs simples. La última versión de Home Assistant es publicada en https://www.home-assistant.io/, por lo que añadiendo el siguiente código en nuestro archivo de configuración tendríamos siempre información sobre la última versión disponible. - platform: scrape resource: https://home assistant.io name: Última versión disponible select: ".current version h1" value_template: '{{ value.split(":")[1] }}' Y además con las siguientes líneas añadiré un sensor que me dirá si existe una versión nueva disponible con un “Si” o un “No” comparando los dos sensores añadidos, tanto el de última versión disponible como el de versión HA. - platform: template sensors: ha_version_update: friendly_name: '¿Nueva versión?' value_template: >- {% if states('sensor.Ultima_version_disponible') == states('sensor.Version_instalada_HA') %} Sí {% else %} No {% endif %} 63 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 6.12 Control de precio en Gearbest Home Assistant nos permite la integración de un sensor que controla el precio de un producto de Gearbest para poder realizar con la variación de precios lo que queramos, de esta forma, si estamos esperando a que se ponga de oferta, podemos hacer que no nos notifique. Gearbest es una de las empresas más grandes de venta online de productos de todo tipo, aunque, principalmente tecnológicos, la cual personalmente utilizo en muchas de mis compras. La utilidad de esto es enorme ya que nos ahorra tiempo a la hora de ver si el producto baja de precio. Dentro de nuestro configuration.yaml insertaremos lo siguiente - platform: gearbest currency: EUR items: - url: se introudce la URL del producto a comprar name: miband4 Y además creo una automatización que me avisa a telegram para cuando el pecio del prodcuto baje de los 25 € - id: 'precio gearbest’ alias: preciogearbest trigger: - below: '65' entity_id: sensor.miband4 platform: numeric_state condition: [] action: - data: message: El precio de la miband4 ha bajado de 25€ service: notify.telegramsanti Figura 6-21. Información HA. Mi sistema domótico 64 64 6.13 Tiempos de recorrido En HA es possible crear un sensor que nos informe sobre el tiempo de viaje de un punto a otro, una gran utlidad ya que también tiene en cuenta el tráfico. Para ello utiliza la tecnología “Waze”, una aplicación social de tránsito automotor en tiempo real y navegación asistida por GPS. Para hacer uso de este sensor en HA es necesario en primera instancia crear una archivo llamado zonas.yaml e incluirlo dentro de nuestro archivo de configuración mediante zone: !include zonas.yaml. La estructura del archivo es sencilla, asignar un nombre del lugar donde queremos marcar el tiempo, y dar sus coordenadas. A continuación, se muestra su estructura mediante un ejemplo, pero el resto del fichero se encuentra en el Anexo A. - name: Trabajo latitude: 40.407389 longitude: -3.788592 radius: 120 icon: mdi:worker Se tienen dos opciones para averiguar el tiempo del viaje, podemos hacer un sensor por cada ruta o crear una lista con posibles destinos.  Un sensor por ruta sensor: - platform: waze_travel_time name: "Tiempo al Trabajo" origin: zone.home (zona configurada al inicio del fichero de configuración) destination: zone.trabajo (La zona destino que queramos, en este caso es trabajo) region: 'EU’  Una lista con posibles destinos Par crear un sensor donde podamos elegir diferentes orígenes y destinos para saber los tiempos, primero se debe crear un input_select con las opciones que queramos. Además, podemos mezclar ambas con origen y destinos. input_select: destino: name: Destino options: - Casa - Trabajo - Casa Jose Luis - Trabajo Pabellon entrenamiento - Local ensayo origen: name: Origen options: - Casa - Trabajo - Casa Jose Luis - Pabellon entrenamiento - Local ensayo 65 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi A continuación se crea un sensor template con los datos del origen y destino - platform: template sensors: dest_address: value_template: >- {%- if is_state("input_select.destino", "Casa") -%} zone.home {%- elif is_state("input_select.destino", "Trabajo") -%} zone.trabajo {%- elif is_state("input_select.destino", "Casa Jose Luis") -%} zone.casa_jose_luis {%- elif is_state("input_select.destino", " Pabellon entrenamiento") -%} zone. pabellon_entrenamiento {%- elif is_state("input_select.destino", "Local ensayo") -%} zone.local_ensayo {%- else -%} Desconocido {%- endif %} orig_address: value_template: >- {%- if is_state("input_select.origen", "Casa") -%} zone.home {%- elif is_state("input_select.origen", "Trabajo") -%} zone.trabajo {%- elif is_state("input_select.origen", "Casa Jose Luis") -%} zone.casa_jose_luis {%- elif is_state("input_select.origen", "Pabellon entrenamiento") -%} zone.pabellon_entrenamiento {%- elif is_state("input_select.destino", "Local ensayo") -%} zone.local_ensayo {%- else -%} Desconocido {%- endif %} Y por último es necesario crear el sensor waze para que nos recoja los datos de las listas anteriores: - platform: waze_travel_time name: "Tiempo Viaje" origin: sensor.orig_address destination: sensor.dest_address region: 'EU' Mi sistema domótico 72 72 6.16. Escenas El concepto de escena que es más que la captura en los estados que desea que estén ciertas entidades. Por ejemplo, una escena puede especificar que la luz A debe estar encendida y la luz B debe ser de color rojo brillante. Un ejemplo de escena que voy a usar en mi sistema es el tipo de iluminación que se quiere en el salón según la persona que a la hora de ver una película, en la que se incluye el color mediante la propiedad color_name y el brillo en porcentaje mediante la propiedad brightness_pct. scene: - name: peli_marisa entities: light.salon: state: true color_name: hotpink brightness_pct: 50 - name: peli_santi entities: light.salon: state: true color_name: darkorange brightness_pct: 25 - name: peli_emi entities: light.salon: state: true color_name: lightskyblue brightness_pct: 75 Figura 6-30. ESP Easy. 73 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 6.17. Automatizaciones En este apartado se crearán distintas automatizaciones para dar funcionalidad a los distintos dispositivos que tenemos instalados, y poder dotar el sistema de algo más de inteligencia aprovechando así esta maravillosa capacidad que nos ofrece Home Assistant. Ya se crearon algunas automatizaciones a lo largo de este apartado como por ejemplo la de notificar con la temperatura de la CPU o el control de precios en GearBest. Para una estructura más ordenada el fichero el código correspondiente a las automatizaciones se incluirá en el fichero automations.yaml 6.17.1 Notificacion Versión HA Esta automatización nos avisa a telegram que debemos actulizar HA. - id: 'Notificacion Nueva Version' alias: Notificacion Nueva Version trigger: - entity_id: sensor.ha_version_update from: 'no' platform: state to: si condition: [] action: - data: message: HA necesita actualizarse service: notify.telegramsanti 6.17.2 Luces Matinal Encendido de luces al despertar. En el disparador utilizo la hora a la que me levanto por las mañanas, y en las condiciones se comprueba que sea entre semana y que haya salido el sol, ya que según la época del año la hora en la que amanece es diferente y hacen falta, o no, las luces. - id: 'Luces matinal' alias: Luces Matinal trigger: - at: 06:50 platform: time condition: - after: sunrise condition: sun Figura 6-31. Escenas. Mi sistema domótico 74 74 - weekday: - mon - tue - wed - thu - fri condition: time action: - entity_id: - light.yeelight_color1_04cf8ca2deda - switch.sonoff_10008146b5 - light.salon service: light.turn_on 6.17.3 Luces Off Esta automatización se encargará que cuando todos los dispositivos salen de casa, si alguna luz está encendida la apaga. Se hace el seguimiento de los dispositivos mediante el device_tracker y se usa el grupo de todas las luces. - id: 'Luces OFF' alias: Luces OFF trigger: - entity_id: group.all_devices from: home platform: state to: not_home condition: [] action: - alias: '' entity_id: group.all_lights service: homeassistant.turn_off - alias: '' entity_id: switch.sonoff_10008146b5 service: switch.turn_off 6.17.4 Nadie en casa Cuando los dispositivos salen de casa y todos están en el estado “not_home” se manda un mensaje de notificación a telegram “no hay nadie en casa” - id: 'Nadie en casa' alias: Nadie en casa trigger: - entity_id: group.all_devices from: home platform: state to: not_home condition: [] action: - data: message: No hay nadie en casa 75 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi 6.17.5 Sensor movimiento y luces Esta automatización es creada mediante el sensor de movimiento y la luz de la cocina (que alumbra a la del pasillo y baño) para que cuando en la noche al levantar de la cama, el sensor de movimiento colocado en la habitación lo captará y se encenderá la luz y viceversa cuando se vuelva del baño. Este apartado se realiza mediante dos automatizaciones. - id: '1567445371945' alias: Luz Noche ON trigger: - entity_id: binary_sensor.sensor_movimiento from: 'off' platform: state to: 'on' condition: - condition: state entity_id: switch.sonoff_10008146b5 state: 'off' - after: 00:00 before: 06:50 condition: time action: - entity_id: switch.sonoff_10008146b5 service: switch.turn_on - id: '1567445371946' alias: Luz Noche Off trigger: - entity_id: binary_sensor.sensor_movimiento from: 'off' platform: state to: 'on' condition: - condition: state entity_id: switch.sonoff_10008146b5 state: 'on' - after: 00:00 before: 06:50 condition: time action: - entity_id: switch.sonoff_10008146b5 service: switch.turn_off 6.17.6 Vigilar habitación Esta automatización se active cuando el dispositivo de Santi sale de casa, y el sensor de movimiento capta información, por lo que se envía un mensaje al móvil de Santi alertando. - id: '1567446767124' alias: Santi fuera trigger: - entity_id: binary_sensor.sensor_movimiento from: 'off' platform: state to: 'on' condition: - condition: state Mi sistema domótico 76 76 entity_id: device_tracker.80_35_c1_60_40_58 state: not_home action: - data: message: Alguien en la habitación service: notify.telegramsanti 6.18. Organización de la interfaz Por último, y no menos necesario, es necesario tener un orden y organización que se tiene en la interfaz gráfica. Mi sistema, aunque no es muy grande, ya requiere de cierta organización para facilitar la vida al usuario, de esto se trata la domótica, de facilitar. La organización a seguir será en grupos y pestañas. Grupo, como su nombre indica consiste en agrupar en una caja las entidades que nos interese, por ejemplo, luces de una habitación. Las pestañas son, estableciendo un símil, como las pestañas del navegador y con ellas creamos otra página dentro de nuestro HA en la que posteriormente podemos incluir los grupos que hemos creado anteriormente. La diferencia para crear un grupo o una pestaña es el true/false que hay en la propiedad view. Una entidad puede estar en varios grupos sin problema, es decir, se puede incluir una luz en un grupo de luces y en grupo de habitaciones simultáneamente En mi sistema voy a crear cuatro pestañas; la primera “Mi casa” nos detalla información sobre luces, enchufes, sensores organizados por grupos con sus respectivas habitaciones. La segunda “parámetros del sistema” en las que se incluirán todo lo referente a la información del sistema de la Rapsberry y HA. En la tercera pestaña se incluirán las automatizaciones y escenas. La cuarta es llamadas “útiles” para organizar la información sin clasificar como el tiempo de viaje. Los grupos y pestañas se crearán dentro del archivo groups.yaml, que este a su vez estará contenido en un carpeta groups y enlazado en el archivo de configuración mediante group: !include_dir_merge_named groups Los grupos serán los siguientes:  Dentro de la pestaña “Mi casa” habrá cinco grupos que serán salón, habitación, pasillo, personas y tiempo.  Dentro de la pestaña “parámetros del sistema” se colocarán los grupos “Rapsberry” y “HA”  Dentro de la pestaña automatizaciones y escenas, habrá dos grupos que recojan ambas. Aquí se expone el ejemplo de la pestaña “Mi casa” y sus respectivos grupos, los descritos en los puntos de arriba se encuentran en el Anexo B. default_view: name: Mi casa view: true icon: mdi:home entities: - group.salon - group.habitacion - group.personas - group.tiempo #Aquí están los cuatros grupos de la pestá "Mi casa" salon: name: Salón view: false entities: - light.salon - switch.sonoff_10008146b5 - switch.07200091bcddc20d319a - sensor.dht_sensor_temperature 77 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi - sensor.dht_sensor_humidity habitacion: name: Habitacion view: false entities: - light.yeelight_color1_04cf8ca2deda Pasillo: name: Pasillo view: false entities: - light.gateway_light_7811dcfb1f1b personas: name: Personas view: false entities: - device_tracker.80_35_c1_60_40_58 - device_tracker.c8_d7_b0_52_95_20 - device_tracker.f4_e3_fb_79_5d_1f tiempo: name: Otros view: false entities: - sun.sun - weather.santi_home Figura 6-32. Interfaz organizada. 78 78 PRESUPUESTO Producto Cantidad Precio Raspberry Pi 3 Model B+ 1 35 € Micro SD Samsung 32GB 1 7.90 € Sensor DHT22 1 2.21 € Enchufe Smart Life 1 15 € Bombilla Yeelight 1 22 € Bombilla Smart Life 1 9 € Sonoff Touch 1 11 € Gateway Xiomi 1 32 € Sensor movimiento HC-SR501 1 1.56 € Cables 1 3.63 € ESP8266 1 3.57 € Total 142.57€ 79 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi CONCLUSIONES Las conclusiones que he ido sacando de este proyecto se centran básicamente en los siguientes puntos principales: el primero es el avance en materia de automatización del hogar que hemos tenido con el desarrollo de la tecnología, ya que hasta hace relativamente pocos años era impensable que pudiese llegar a casi todos los bolsillos mediante componentes baratos y plataformas de organización a mano del usuario. La segunda conclusión es que HA es un software maravilloso debido a que deja atrás la maraña de fabricantes y aplicaciones propias para la automatización del lugar, haciendo posible la integración de diferentes marcas en un mismo ecosistema. Para terminar, me encantaría decir la cantidad de información que tenemos en la web para poder aprender desde cero cualquier cosa, un ejemplo claro es este proyecto, ya que cuando lo empecé ni sabía lo que era Home Assistant y gracias a los miles de tutoriales, documentación, y foros pude construir mi propio sistema. Referencias 80 80 REFERENCIAS  Introducción [|1] Apuntes de la asignatura, Domótica 4ª GITT. [2] Web de casadomo, https://www.casadomo.com/ [3] Web Universidad Tecnológica Metropolitana, http://domotica-utem.blogspot.com/  Plataformas domóticas [4] Web oficial Domoticz, https://www.domoticz.com/ [5]Web oficial OpenHab, https://www.openhab.org/ [6] Reviews tecnológicos Xataka, https://www.xataka.com/domotica-1/  Raspberry Pi [7] https://raspberryparatorpes.net/ [8] https://www.raspberrypi.org  Home Assistant [9] Conferencia de Paulus Schoutsen (creador de HA) en el Pycon 2016, https://www.youtube.com/watch?v=Cfasc9EgbMU&t=893s [10] Transparecias de la presentación https://speakerdeck.com/pycon2016/paulus-schoutsen-awaken-your- home-python-and-the-internet-of-things?slide=3 [11] Web Oficial Home Assitant, https://www.home-assistant.io/ [12] https://www.intel.es/ (para las intels NUC) [13] https://domoticaencasa.es/ [15] https://community.home-assistant.io [16] Web Oficial lenguaje YAML https://yaml.org/ [17] https://nmap.org/man/es/ [18] Solución problema Sonoff, https://github.com/peterbuga/HASS-sonoff-ewelink/issues/116 [19] https://domology.es/grupos-pestanas-paneles-ha/ [20] Guía de instalación ESP, https://www.luisllamas.es/wemos-d1-mini-una-genial-placa-de-desarrollo-con- esp8266/ [21] Web oficial MQTT, http://mqtt.org/ 81 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi ANEXO A Zonas.yaml - name: Trabajo latitude: 40.407389 longitude: -3.788592 radius: 120 icon: mdi:worker - name: Casa Jose Luis latitude: 40.432888 longitude: -3.712306 radius: 120 icon: mdi:account-clock - name: Pabellon entrenamiento latitude: 40.600782 longitude: -3.708090 radius: 120 icon: mdi:tennis - name: Local ensayo latitude: 40.659103 longitude: -3.769896 radius: 120 icon: mdi:sword Anexo C 88 88 #integración de telegram telegram_bot: - platform: polling api_key: 802308700:AAHItuFuLiWT-woElL1PbJK46XZVv6B07ow allowed_chat_ids: - 556769163 #Integracion del componente notify que se apoya en la plataforma Telegram notify: - name: telegramsanti platform: telegram chat_id: 556769163 scene: - name: peli_marisa entities: light.salon: state: true color_name: hotpink brightness_pct: 50 - name: peli_santi entities: light.salon: state: true color_name: darkorange brightness_pct: 25 - name: peli_emi entities: light.salon: state: true color_name: lightskyblue brightness_pct: 75 #input select utilizado para los timepos del viaje input_select: destino: name: Destino options: - Casa - Trabajo - Casa Jose Luis - Pabellon entrenamiento - Local ensayo initial: Trabajo icon: mdi:car origen: name: Origen options: - Casa - Trabajo 89 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi - Casa Jose Luis - Pabellon entrenamiento - Local ensayo initial: Casa icon: mdi:car mqtt: broker: 192.168.0.200 port: 1883 keepalive: 60 username: santihome password: !secret passmqtt binary_sensor: - platform: mqtt name: "Sensor movimiento" state_topic: "/sensormov/sensormovimiento/Switch" payload_on: "1" payload_off: "0" xiaomi_aqara: discovery_retry: 5 gateways: - key: !secret passxiaomi Anexo D 90 90 ANEXO D Automations.yaml - id: Notificacion temperatura cpu alias: Notificacion temperatura CPU trigger: - above: '65' entity_id: sensor.temperatura_cpu platform: numeric_state condition: [] action: - data: message: La temperatura de la CPU ha llegado a los {{ states.sensor.sensor.temperatura_cpu.state }} ºC service: notify.telegramsanti - id: Notificacion Nueva Version alias: Notificacion Nueva Version trigger: - entity_id: sensor.ha_version_update from: 'no' platform: state to: si condition: [] action: - data: message: HA necesita actualizarse service: notify.telegramsanti - id: Luces matinal alias: Luces Matinal trigger: - at: 06:50 platform: time condition: - after: sunrise condition: sun - weekday: - mon - tue - wed - thu - fri condition: time action: - entity_id: - light.yeelight_color1_04cf8ca2deda - switch.sonoff_10008146b5 91 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi - light.salon service: light.turn_on - id: Luces OFF alias: Luces OFF trigger: - entity_id: group.all_devices from: home platform: state to: not_home condition: [] action: - alias: '' entity_id: group.all_lights service: homeassistant.turn_off - alias: '' entity_id: switch.sonoff_10008146b5 service: switch.turn_off - id: Nadie en casa alias: Nadie en casa trigger: - entity_id: group.all_devices from: home platform: state to: not_home condition: [] action: - data: message: No hay nadie en casa service: notify.telegramsanti - id: '1567445371945' alias: Luz Noche ON trigger: - entity_id: binary_sensor.sensor_movimiento from: 'off' platform: state to: 'on' condition: - condition: state entity_id: switch.sonoff_10008146b5 state: 'off' - after: 00:00 before: 06:50 condition: time action: - entity_id: switch.sonoff_10008146b5 service: switch.turn_on - id: '1567445371946' alias: Luz Noche Off trigger: - entity_id: binary_sensor.sensor_movimiento from: 'off' platform: state to: 'on' condition: - condition: state entity_id: switch.sonoff_10008146b5 state: 'on' Anexo D 92 92 - after: 00:00 before: 06:50 condition: time action: - entity_id: switch.sonoff_10008146b5 service: switch.turn_off - id: '1567446767124' alias: Santi fuera trigger: - entity_id: binary_sensor.sensor_movimiento from: 'off' platform: state to: 'on' condition: - condition: state entity_id: device_tracker.80_35_c1_60_40_58 state: not_home action: - data: message: Alguien en la habitación service: notify.telegramsanti 93 Estudio de la plataforma domótica Home Assistant e integración en Raspberry Pi ANEXO E Customize.yaml light.yeelight_color1_04cf8ca2deda: friendly_name: Luz Habitación switch.07200091bcddc20d319a: friendly_name: Enchufe Salon switch.sonoff_10008146b5: friendly_name: Luz cocina icon: mdi:lightbulb light.salon: friendly_name: Luz Salon light.gateway_light_7811dcfb1f1b: friendly_name: Gateway_xiaomi