Skip to content

McOrts/domohome

Repository files navigation

Un Mosquitto controla mi casa

Este es un proyecto del tipo de los que nunca se acaban, Pero he querido ordenar y documentar la parte principal de este sistema de domótica que he instalado en mi casa, para poder compartirlo con la comunidad.

Construido bajo los principios del Do It Yourselft, aquí encontraréis todo el código Python, NodeJS, SQL y Node-RED utilizado. Así como las referencias al open-hardware utilizado: Raspberry Pi.

Mi implementación del IOT

Para montar un sistema de domótica en casa se pueden aplicar muchas soluciones. Y en como tantas otras cosas. Hay una fácil y cara. Y otra difícil y barata. La mía es más bien de estas últimas.

La instalación descrita aquí funcionalmente se ocupa de:

  • informarme y alertarme por twitter de:
    • cuándo amanece y anochece cada día.
    • cual es la temperatura y humedad del trastero.
  • Activar un deshumidificador en función de la hora del alba y del ocaso.
  • Almacenar toda la información en una base de datos relacional y en Cloud.

El componente principal de la arquitectura que he utilizado el un Broker de mensajería basado en topic. Los sensores están conectados a puertos GPIO de una mini-CPU que ejecuta un programa especifico para cada uno. Este programa realiza las siguientes tareas:

  • Lee el valor del sensor.
  • Graba el valor en una BBDD relacional.
  • Envía el valor a:
    • Una plataforma de Cloud via API Rest.
    • Un mensaje MQTT a un topic especifico.

Por encima de esta gestión corre una aplicación middleware que subscrita a los topics, toma decisiones acerca de:

  • Activar un dispositivo a través de puertos GPIO.
  • Enviar avisos a Twitter.
  • Ofrece un interface de usuario web para operar el sistema. Arquitectura domohome

Los sensores también se pueden construir incorporados en microcontroladores dedicados operando de forma autónoma. El valor entonces en enviado en un mensaje MQTT por un canal inalámbrico o físico a broker. En sucesivos artículos describiré otras muchas maneras de implementar sensores.

MQTT ¿Qué, cuándo y dónde?

En 1999 dos ingenieros, el Dr. Andy Stanford-Clark de IBM y Arlen Nipper de Eurotech. Estaban participando en la construcción de un oleoducto con el reto de conectar online sus 4.000 sensores a un sistema centralizado de SCADA. Utilizando un enlace de satélite como única comunicación posible.

Y así se diseñó este protocolo MQTT a fin de cumplir la restricción de utilizar una comunicación costosa, de banda estrecha y con latencias importantes. Siendo sus características principales:

  • Simple y ligero. Con menos requerimientos de proceso y ancho de banda.
  • Tolerancia a altas latencias. Lo que permite utilizar canales de comunicacion poco óptimos para otros protocolos.
  • Fiabilidad de entrega de mensajes. Incorpora tres niveles de calidad del servicio (QoS):
    • QoS 0: como máximo una vez. Esto implica que puede que no se entregue.
    • QoS 1: al menos una vez. Se garantiza la entrega pero puede que duplicados.
    • QoS 2: exactamente una vez. Se garantiza que llegará una vez el mensaje.

En 2012 Andy Stanford-Clark contó su experiencia y su visión del futuro de la IOT basado en MQTT en esta famosa conferencia TED: TEDxWarwick

En 2011 IBM cedió el código a la fundación Eclipse liberándolo a la comunidad. De manera que su popularización le llevó a que en En 2014 se convirtiera en un estándar certificado por la Organización para la Adopción del Estándar de Comercio Electrónico y Servicios Web ( OASIS).

Manos a la obra

Lo primero, definir la estructura de los topic que necesito usar. Un topic al fin y al cavo, es un buzón público de correo que cualquiera puede leer. Con la caracteristica especial de que pueden organizarse gerárquimanente. En mi caso este es el árbol:

`-- home
    |-- meteo
    |   `-- solar
    `-- storageroom
        |-- humidity
        `-- temperature

Esta estructura y la sintaxis que se utiliza la podéis ver en el contenido del fichero config.json

"domohome_humidity":{
    	"device_id": "xxxxxx",
    	"device_token": "xxxxxx",
	"gpio_pin_input": "4",
	"gpio_pin_output": "6",
	"max_warning": 70,
	"topic_humidity":"/home/storageroom/humidity",
	"topic_temperature":"/home/storageroom/temperature"
	},

Hardware

El proyecto está basado en el más clásico de las mini-CPUs. La Raspberry Pi. En mi caso he utilizado dos. Un modelo 2 para alojar el MySQL y el sensor solar y otro modelo 3 para alojar Mosquitto y el sensor de humedad y temperatura. RaspberryPi3

La lista de materiales fundamentales es:

El circuito es muy simple. Necesitaremos 2 entradas y 2 salidas digitales. Además utilizaremos el pin de 5V y el GND (toma de tierra) para alimentar los sensores y relés: Arquitectura breadboard

He montado todos los componentes en una amplia caja de plástico con sitio para poder incorporar más dispositivos:

domohome_montaje_trastero

Servicios de cloud en Samsung Artik

Proviene de la antigua plataforma que se llamaba SAMlio y posteriormente SmartThings. El concepto original era dar soporte a dispositivos médicos y de salud. Pero rápidamente se dieron cuenta que también podrían dar soporte a proyectos del IoT. De aquí surgió Artik Cloud, donde han unificado tanto hardware y software.

Mi caso de uso es solo para almacenar informacion y mostrarla a través de la apliación móvil: domohome_artikcloud_app

Es compatible con Amazón Echo (interfaz de voz), Fitbit (monitor de actividad), Nest (termostato de Google) y, por supuesto, con Samsung. Si quieres saber todas las plataformas que son compatibles puedes acceder a su web oficial. Una de las mayores ventajas es que soporta IFTTT, lo que nos permite comunicación con cualquier cosa que te puedas imaginar.

Por otra parte tiene un plan de precios con un tramo gratuito. Está limitado a un uso que encaja perfectamente en un proyecto de este tipo. artikcloud_precios

Software

El broker elegido para Raspberry Pi es Eclipse Mosquitto. Las instrucciones para su instalación las tenéis en múltiples webs. mosquitto-text-side

Por otra parte necesitamos muchas librerías de Python pàra que todo esto se pueda utilizar. Aconsejo paciencia para instalar y muchas veces reinstalar las más adecuadas. Para la mensajería MQTT he utilizado Eclipse Paho MQTT Python client library es simple y que funciona muy bien.

En la parte del middleware tenemos Node-RED. Nos permite programar todos nuestros interfaces, colas, webservices, sockets, APIs... de forma gráfica. Y además generar un interface de usuario web responsivo perfecto para dispositivos móviles. Una maravilla desarrollada por IBM’s Emerging Technology Services team y ahora es parte de JS Foundation. La base de datos relacional es MySQL. Un clásico fácil de instalar.

He desarrollado un sencillo dashboard para conocer los valores ambientales de mi trastero, poder activar dispositivos y luces y conocer los eventos y valores meteorológicos: domohome_nodered_ui

Y ¿Cómo se maneja todo esto? Simplemente dibujando flujos entre ´nodos´ muy fácilmente configurables. Así, por ejemplo, tenemos un nodo para suscribirnos a topics MQTT u otro para activar puertos QPIO de las Raspberry PI. Incluso hay para interactuar con un Alexa Echo.

Este es el flujo para el control de humedad: domohome_storageroom_nodered_workflow

Como se puede ver tiene un node para Tweeter. Y así quedan los tweet en el dashboard de la cuenta del dispositivo: domohome_twitter

Agradecimientos y referencias

About

Domotic project. Sustainable energy management and home control based on Raspberry Pi

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published