Icono del sitio Home Assistant Fácil

Presentación de EnigmaIOT

enigmaiot

El pasado 14 de septiembre tuve el placer de participar junto a otros miembros de The Things Network Madrid en el evento Tech.Party 2019, organizado por la comunidad HackMadrid%27. En él hice mi presentación sobre Redes de Sensores con EnigmaIOT.

Se celebró en La Nave. La que en su día fue una fábrica de ascensores en el barrio madrileño de Villaverde hoy es un centro de innovación en el que cualquiera puede participar.

Centro de innovación La Nave (Madrid)

Mi presentación trata sobre las redes de sensores utilizadas en hogares y cómo implantarlas utilizando software libre.

Cómo puedo montar una red de sensores en mi casa

Hoy en día podemos encontrar todo tipo de dispositivos muy fáciles de instalar para gestionar nuestra casa. Enchufes, bombillas, sensores de todo tipo. Gracias a las redes WiFi nos podemos olvidar de los cables.

Esto está bien si vamos a conectar unos pocos de estos aparatos, pero es muy posible que tu sistema crezca poco a poco, cada vez con más dispositivos.

Puede no ser una buena idea utilizar nuestro router WiFi como medio para interconectarlos. Los routers domésticos pueden tener problemas a la hora de gestionar tantos dispositivos conectados a su red inalámbrica. No están pensados para eso.

Los dispositivos domóticos de los que estamos hablando suelen conectarse a un servicio en la nube, por lo que si nos quedamos sin conexión en algún momento tendremos un bonito pisapapeles hasta que vuelva a funcionar el servicio de Internet.

Además, si estos dispositivos son de marcas diferentes es muy posible que tengamos que utilizar aplicaciones diversas para gestionarlos.

Seguro que estarás de acuerdo en que tener una aplicación para encender la luz del salón, otra para encender el aire acondicionado y otra para ver la temperatura de la calefacción no es lo más apetecible.

Mantén tus datos en privado

Otro punto que hay que considerar es la privacidad de todos estos datos. Puede parecer que no es importante que un tercero maneje datos como la temperatura de nuestra casa o las veces que encendemos o apagamos las luces.

De estos datos se pueden deducir nuestras costumbres. Por ejemplo, del estado de las luces se puede saber si estamos o no en casa. La temperatura del frigorífico puede variar de forma detectable si acabamos de meter la compra en él.

Me gusta que todos mis datos sean privados, por muy inocentes que puedan parecer. Además, ¿qué sentido tiene que para encender una luz con un interruptor conectado tenga que hacer una petición a un servidor que está en la otra parte del mundo? No parece eficiente, ¿verdad?

Sistemas más avanzados utilizan comunicación ZigBee o Z-Wave. Esto implica un precio más alto pero utiliza un protocolo más adecuado para el transporte de datos de elementos domóticos. Pero si quieres construir tus propios sensores utilizar módulos con estos protocolos significa un coste alto, sobre todo si te planteas instalar un número considerable de ellos.

Qué alternativas tengo

Si quieres montar tus propios sensores para construir un sistema domótico tienes numerosas alternativas, cada una con sus ventajas e inconvenientes. No hay una que sea la ideal, depende de cada necesidad.

En mi caso, yo quiero instalar una red de sensores de temperatura en toda mi casa para estudiar los flujos de calor. Mi casa es muy fría y la verdad es que ya no sé por dónde se me escapa el calor, pero eso es otro tema.

Mi idea es poner al menos un sensor o dos en cada habitación. Ya de paso puedo añadir alguno más para monitorizar la temperatura en el interior del frigorífico. Esto hace un total de unos 20 sensores.

Quiero un sistema lo más económico posible ya que el número de sensores puede ser considerable. No quiero gastarme más de 10€ por cada sensor terminado.

EnigmaIOT. Una plataforma de sensores para entornos domésticos

He trabajado durante mucho tiempo con el microcontrolador ESP8266 en mis proyectos. Lo conozco bien y me manejo con comodidad programándolo y, además, es muy económico. Por eso, mi primera decisión fue utilizarlo para montar redes de sensores con EnigmaIOT.

El sistema está basado en una topología en estrella, en la que todos los nodos (sensores y/o actuadores) están conectados con un gateway o concentrador. Este gateway es el único que sí está conectado a mi red WiFi. Los datos pueden enviarse mediante el protocolo MQTT a un broker instalado en una RaspberryPi dentro de mi propia red. Puede ser también interesante poder hacer una conexión segura a un broker MQTT instalado fuera de mi casa, en un VPS por ejemplo.

Sistema EnigmaIOT

Requerimientos

Hardware

Para que el montaje sea económico, el hardware tiene que ser lo más sencillo posible. Sería deseable que pudiera implementarse con un microcontrolador más el sensor correspondiente a cada uso.

El sistema no necesita de ningún router WiFi para poder comunicar los nodos con el gateway. La comunicación se establece punto a punto entre ellos.

Seguridad

Quiero que sea seguro y privado. Si pretendo garantizar que nadie pueda husmear en mis datos el sistema tiene que utilizar algún tipo de cifrado con algoritmos suficientemente probados.

Utilizar una clave estática para el cifrado puede ser un inconveniente, ya que cambiarla en más de 3 ó 4 dispositivos sería algo muy pesado. La clave debe negociarse automáticamente entre el gateway y cada sensor de manera independiente y renovarse cada cierto tiempo. Sería un mecanismo similar al que utiliza un navegador al hacer peticiones a un servidor web.

Comunicación

Los nodos pueden ser completamente inalámbricos, utilizando alimentación con baterías. Mi deseo es que un par de baterías alcalinas duren más de un año, al menos. Para ello utilizaré las posibilidades de bajo consumo que ofrezca el hardware elegido.

El rango de la comunicación inalámbrica debe ser suficiente para funcionar en una vivienda de tamaño medio, comparable al que tiene un router WiFi.

Necesito que el número de nodos permitidos sea relativamente grande. A los 20 sensores de temperatura se le podrían añadir más nodos si este diseño resulta útil. Interruptores, sensores de humedad, de apertura de puertas. Podría sumar fácilmente unos 50 nodos sin mucho esfuerzo. Lo deseable es que el sistema no tenga un límite definido nada más que por la capacidad del hardware y que no sea menor a unos 50 nodos.

Para soportar nodos que sean actuadores, la comunicación entre el gateway y los nodos puede ser bidireccional. Además esto puede ser útil para que se puedan configurar parámetros en sensores.

Durante el desarrollo de este proyecto surgió otro requerimiento que se hace imprescindible cuando el número de nodos crece. Los nodos deben poder gestionarse, configurarse y actualizarse de forma inalámbrica.

Elección del protocolo de radio

Para la comunicación inalámbrica existen también muchas posibilidades. NRF24, LoRa, interfaces de RF a 443 MHz, basados en diferentes librerías muy flexibles y que podrían cumplir con los requerimientos.

Pero todas ellas, en mayor o menor medida, requieren añadir un módulo de radio al microcontrolador o comprar placas dedicadas con estos interfaces ya incorporados. Esto implica un coste más alto y una complejidad adicional.

En la mayoría de mis proyectos he utilizado ESP8266 para realizar dispositivos conectados a Internet.

Pero aparte de poder comunicarse utilizando señal WiFi, el ESP8266 implementa un protocolo desarrollado por sus creadores conocido como ESP-NOW.

Comunicación con ESP-NOW

ESP-NOW es utiliza una señal que sigue el estándar WiFi pero que funciona de manera parecida a los módulos de RF que he nombrado anteriormente. Permite hacer una comunicación punto a punto sin necesidad de establecer una conexión ni validación previa y sin que tenga que mediar ningún router.

Es por tanto una comunicación muy rápida que permite mensajes cortos, de unos pocos milisegundos. Esto ayuda a reducir considerablemente el consumo de energía.

Los puntos fuertes que aporta ESP-NOW para el proyecto EnigmaIOT son los siguientes:

Parece que ESP-NOW es el candidato ideal, pero al comenzar la implementación me encontré un problema importante.

¿Y cómo añado cifrado?

Para implementar el cifrado, ESP-NOW mantiene una tabla con las claves de cada uno de los pares. Esta tabla está limitada a 6 posiciones, lo que elimina el cifrado de la lista anterior.

Salvo por la limitación anterior, ESP-NOW sigue siendo ideal para mi propósito. Me iba a tocar implementar una capa de cifrado sobre la comunicación ESP-NOW.

Yo no soy ni mucho menos un experto en criptografía, pero si quería seguir adelante con este proyecto me iba a tocar aprender. Y si a un maker le gusta una cosa después de desarrollar proyectos, eso es aprender cosas nuevas.

A pesar de que mi elección estaba clara a favor de ESP-NOW, no quería dejar cerrada la puerta a utilizar otros protocolos de radio, si fuese necesario.

He hecho el diseño de manera que sea modular en cuanto al interfaz de radio. Para implementar un driver para uno diferente solamente hay que desarrollar una librería con unos pocos métodos para inicializar y terminar la comunicación, enviar datos y recibirlos.

Características de EnigmaIOT

Después de un largo tiempo de aprendizaje y desarrollo, la implementación actual del sistema tiene las siguiente funcionalidades:

Descripción del gateway

La función del gateway de EnigmaIOT es comunicar los nodos con la red local, haciendo la conversión de los datos a mensajes MQTT.

Además gestiona la comunicación con los nodos y es el encargado de comprobar la validez de las claves dinámicas.

Igual que en el nodo, las claves no se guardan de manera permanente. Éstas se almacenan en RAM para garantizar la privacidad. Si el gateway se reinicia, todos los nodos deberán volver a registrarse.

El protocolo ESP-NOW no funciona bien si se utiliza a la vez que el WiFi en el mismo microcontrolador. Por ello la funcionalidad del gateway se ha dividido en dos ESP8266.

Montaje del gateway

El primero gestiona la comunicación ESP-NOW y envía los mensajes a través del puerto serie.

El segundo toma estos datos por su interfaz serie y los reenvía por MQTT.

Como se permite la comunicación bidireccional, este segundo ESP8266 puede suscribirse a ciertos tipos de mensajes MQTT para enviarlos en sentido hacia los nodos por la misma vía.

Esta solución no sería necesaria si, en vez de ESP-NOW, se utilizase otro medio para comunicar los nodos y el gateway.

** Hace poco he descubierto que estaba cometiendo un error al asignar los canales WiFi en el sistema y ESP-NOW estaba intentando enviar los mensajes por un canal diferente al que estaba sintonizado el gateway. Después de hacer bastantes pruebas, he visto que sí es posible que la comunicación WiFi conviva sin problemas con el protocolo ESP-NOW dentro del mismo ESP8266. Por ello, de aquí en adelante, me voy a centrar en unir la funcionalidad de ambos módulos, Gateway y el Bridge MQTT.

Futuros pasos

El sistema ya tiene implementado todo lo anterior. Tengo algunas ideas para seguir trabajando en el proyecto.

La primera es diseñar una PCB a medida para sensores de bajo consumo. De esta manera podré añadir un regulador que me permita que funcione con baterías alcalinas tipo AA y eliminar todos los otros componentes que suelen llevar las placas de desarrollo. A este diseño hay que añadirle una caja que pueda imprimirse en 3D.

De momento estoy satisfecho con el montaje del gateway, aunque una placa PCB a medida tampoco le vendría mal para darle mayor fiabilidad.

En cuanto al software, estoy pensando en añadir la posibilidad de crear grupos de nodos para poder enviar mensajes a varios a la vez y que sea el gateway el que gestione dichos grupos. Esto me permitiría también cargar el firmware a en grupo, en vez de tener que hacerlo nodo a nodo.

Es deseable también poder actualizar el gateway de la misma forma que se hacen los nodos. Y si es con el mismo script mucho mejor.

Cómo puedes colaborar

De momento, el sistema está en una fase de desarrollo que podríamos valorar como pre-beta. Ya tiene la funcionalidad básica que quería implementar, por lo que ya está preparado para que montes varios nodos y los pruebes en un entorno real.

Como he comentado al principio no soy un experto en temas de cifrado y seguridad. Es muy probable tenga algún fallo en ese aspecto. Agradezco por tanto todos los comentarios y sugerencias que me puedas aportar en este aspecto.

Seguro que cuando tenga el sistema en operación en mi casa me surgirán más necesidades que podré ir implementando. Si se te ocurre alguna funcionalidad que creas interesante para implementar en el futuro no dudes en comentármela.

Salir de la versión móvil