miércoles, 28 de septiembre de 2016

Automatizar mi casa (prólogo)

Después de pensar mucho y estar investigando el mercado, he decidido empezar a automatizar mi casa para que sea más eficiente y cómoda, lo que se llama Home Automation en inglés o Domótica en castellano, pero no hay ninguna solución comercial que dé todo lo que pido, control de luces, calefacción, alarmas, programación horaria, estación meteorológica, etc. Y que además sea totalmente configurable.
Además tampoco quiero depender de servidores externos (que pueda usarlos es una cosa, que esté obligado a usarlos es distinto) para evitar que me pase lo que a los usuarios de Revolv, un sistema de automatización del hogar creado por Google y que ha decidido discontinuar con el pequeño inconveniente de que al estar basado en la nube, al discontinuarlo el aparato que se compraron los usuarios se ha convertido en un pisapapeles muy caro.
Así que me lié la manta a la cabeza y he decidido montármelo todo por mí mismo, DIY, junto con algunas Soluciones Open Source.
En este serie de entregas contaré como lo he hecho, proporcionando todos los detalles necesarios por si alguien quiere copiarlo o (mejor) mejorarlo y adaptarlo. Cualquier sugerencia será también bienvenida.

Herramientas

Para el controlador y después de algunas investigaciones (no las suficientes, pero muchas), me he decidido por implementar OpenHAB (http://www.openhab.org/). Es muy versátil permite hacer todo lo que yo quiero, y eso que hay cosas realmente difíciles de implementar en mi proyecto, pero a cambio es muy complejo de configurar y si hubiera un libro de OpenHAB, uno bueno, me lo compraría.
OpenHAB soporta un gran número de módulos de diversos fabricantes, incluyendo las bombillas Vue de Philips, diversos equipos multimedia y televisores con conexión WiFi, sistemas de domótica de Netatmo, etc. Sin embargo dado que la mayoría de mis módulos son desarrollados por mí mismo, OpenHAB no los soporta directamente,  pero para estos casos  la recomendación es usar MQTT.
MQTT es un Broker de mensajes.  Definido de forma sencilla es un servidor al que se publican mensajes asociados a un tópico. Por ejemplo podemos publicar en el tópico "Entrada" el mensaje "ON". Además los tópicos pueden ser jerárquicos. Puede haber  una jerarquía "Bombillas" debajo de la cual cuelga "Entrada". Entonces publicaríamos "ON" al tópico "Bombillas/Entrada” para indicar que queremos encender esa bombilla.
Aparte de elementos que publican también hay subscriptores. En el caso anterior, nuestra bombilla, con conexión WiFi, se suscribirá al tópico Bombillas/Entrada y en este caso el servidor la avisará cuando haya un mensaje ON u OFF y la bombilla actuará en consecuencia.
Inicialmente monte ambos servicios, OpenHAB y el servidor MQTT (mosquitto) en un MacMini que tengo de servidor multimedia en casa, pero he decidido migrarlos a su propio servidor basado en una Raspberry PI 3. Así que aquí incluiré las instrucciones para este último caso.

Sensores y actuadores

Todo el hardware muestra (por lo menos en el momento de escribir este artículo), la evolución de lo que estoy aprendiendo y no esperes encontrar la mejor solución descrita paso a paso. Si volviera a empezar elegiría otras soluciones para muchas necesidades, pero aquí está lo que he implementado y está funcionado –eso es importante, que funciona– y espero que te sea de utilidad.
Parte de las soluciones están hechas basándose en Arduino con el módulo WiFi ESP8266, posteriormente descubrí como usar el ESP8266 de forma independiente y lo he usado para otros elementos del hogar.

Todos los módulos están configurados para poder funcionar de forma autónoma, si se cae el servidor OpenHAB y/o MQTT, los interruptores podrán seguir encendiendo y apagando las bombillas, la calefación funcionará, etc. pero perderé la posibilidad de control central desde el movil (u otra herramienta).

Además este sevidor central sirve para darle inteligencia a la casa. Por ejemplo tengo una luz en el porche de la entrada. En lugar de encenderlo y apagarlo a mano, se encenderá y apagará automáticamente basado en la liuz exterior. Para ello necesito una estación meteorológica (en realidad he montado dos) que me de el valor de luz y de paso de humedad y temperatura para el control de la calefación.

Esto es la introducción. En la siguiente entraga, como montar OpenHAB