Construye tu caldera inteligente con MQTT

por Ricardo Vega el 16 de diciembre, 2020
Etiquetas:
DIYHogarIoTArduino
9 minutos.

Hace 3 años y medio te hablaba de cómo Home Assistant se había convertido en el centro de mi hogar inteligente gracias a una serie de características que consideraba muy importantes, entre las que destacaba el cumplimiento de uno de los que considero pilares fundamentales de una casa conectada: el respeto por la privacidad y el uso de tecnologías que no te "aten" a ningún servicio o proveedor propietario.

Después de todo este tiempo, puedo confirmarte que Home Assistant no ha dejado de crecer, tanto como proyecto Open Source (nueva interfaz, muchas más integraciones, comunidad, etc) como dentro de mi propio hogar. ¡Hasta ha sobrevivido a una mudanza!

Sin embargo, hoy no he venido a hablar de mi hogar inteligente aunque es un tema que sin duda tengo en el tintero y debería abordar más pronto que tarde, sino de un componente concreto, construido por mi y que me ha permitido automatizar la caldera de mi vivienda de forma sencilla, útil y barata.

Realmente, este componente es un "termostato" MQTT construido con una placa que integra el chip ESP8266 del que ya hemos hablado alguna vez por este blog. Pero empecemos por el principio...

¿Que es un termostato?

Un termostato es un dispositivo analógico o digital que manda una señal de activación o desactivación a elementos de climatización en función de una temperatura configurada.

Los más sencillos, los analógicos, cuentan con una pletina metálica de un material sensible a la temperatura lo que le lleva a experimentar variaciones en su forma. Nos los podemos imaginar como un interruptor que por defecto está cerrado pero que, al calentarse, la pletina se dilata curvándose hasta el punto de abrir el interruptor. A través de un mando de control fijamos un temperatura objetivo que hará que el interrupor se active o desactive: a mayor temperatura fijada, más cerca estará la pletina del contacto y por tanto más dilatación (más calor) será necesaria para abrir el circuito.

Termostato - Ricardo Vega

Los digitales, por contra, no disponen de esta pletina, sino de un termómetro digital que al llegar a la temperatura objetivo, activan o desactivan un relé que actúa como interruptor.

Con un mecanismo u otro, podemos pensar que un termostato, si lo simplificamos mucho es un interruptor que se activa o desactiva en función de la temperatura.

Llegados a este punto, es importante señalar que estoy pensando en la instalación típica europea, donde la caldera tiene dos cables de salida que se conectan al termostato y el funcionamiento es muy simple: el termostato simplemente abre o cierra el circuito. En otros lugares del mundo (por ejemplo en EEUU), los termostatos y calderas tienen una configuración más compleja por lo que mi diseño no sólo no funcionaría sino que podría causar daños a la caldera.

DIY

La advertencia típica: este circuito está probado en dos instalaciones diferentes durante más de 3 años sin ningún tipo de problema, pero en todo caso, no me hago responsable de los posibles daños que pudiese generar en tu instalación. Actúa bajo tu propia responsabilidad.

Vamos a construir un termostato digital muy simple para lo que vamos a necesitar:

  • Un sensor de temperatura que en mi caso es externo y está configurado dentro de Home Assistant.
  • Un relé controlado por WiFi que va a ser la pieza que realmente construyamos. Debe configurarse como un cliente MQTT ya que usaremos este protocolo para actuar sobre él.
  • Configuración en Home Assistant para enlazar el sensor de temperatura y el relé.

Sensor de temperatura

En mi caso, tengo sensores Xiaomi Zigbee, entre ellos uno de temperatura, enlazados a mi instalación de Home Assistant de forma que puedo leer su valor en tiempo real y emplearlo dentro del sistema.

Puedes usar cualquier otro sensor de temperatura siempre y cuando lo puedas enlazar con Home Assistant. Incluso, puedes crearte el tuyo propio...

Relé WiFi + MQTT

En mi caso, he empleado un WeMo D1 Mini, que dispone de un chip ESP8266 que le da conectividad WiFi. Esta clase de tarjetas, son muy pequeñas, baratas y accesibles, además de contar con una serie de "shields" que le puedes añadir a la tarjeta original para expandir sus posibilidades. En mi caso, empleo una shield que añade un relé al sistema.

Para alimentar el aparato, uso un cargador de 5V antiguo de un móvil que me da 1A de salida a través de una salida microUSB que puedo conectar directamente al WeMo.

Sólo nos queda configurar / programar el dispositivo:

He creado un repositorio específico en Github para alojar el fichero .ino.

Asumo que el IDE de Arduino te es familiar. La rutina programa hace uso de las siguientes librerías:

La primera, se instala cuando configuras el IDE de Arduino para trabajar con placas ESP8266 como por ejemplo los Wemos. Si aún no lo has hecho te dejo este tutorial

Gracias a esta librería, podremos conectar nuestra placa a nuestra red WiFi. A continuación, debes instalar la librería PubSubClient siguiendo las instrucciones facilitadas por su autor. Esta librería nos permitirá conectarnos e interaccionar con una red MQTT construida dentro de nuestra red local (a través de WiFi)

El objetivo de este proyecto no es configurar una red MQTT ni un broker MQTT. Para ello, te dejo esta otra pequeña guía que escribí hace unos años.

Te recomiendo que configures tu broker MQTT con autenticación para añadir una pequeña capa de seguridad a la red.

Una vez tengas funcionado un broker MQTT securizado y tu IDE de Arduino listo para trabajar con Wemos, puedes subir el fichero boiler.ino del repositorio a tu placa, reemplazando los siguientes valores con aquellos apropiados para tu red y configuración:

  • CLIENT_ID: identificador del dispositivo dentro de la red MQTT. Puedes poner lo que quieras, pero recuerda que debe ser único dentro de la red.
  • MQTT_USER y MQTT_PASSWORD: credenciales MQTT.
  • ip: La IP del dispositivo dentro de tu red WiFi. Debe ser único.
  • gateway: La IP del router.
  • subnet: Tu máscara de red, probablemente 255.255.255.0
  • ssid: El nombre de tu red WiFi.
  • password: la contraseña de tu WiFi.
  • mqtt_server: la IP del broker MQTT dentro de tu red.

En cuanto subas esta configuración a tu placa y la conectes a la red eléctrica, se conectará a tu red WiFi y al broker MQTT, empezando a enviar y recibir mensajes.

Principalmente, el cliente publicará en stat/<CLIENT_ID>/POWER el estado del relé (ON / OFF), a la par que se subscribirá a cmnd/<CLIENT_ID>/POWER, escuchando los mensajes que lleguen a ese "topic" para cambiar su estado. El "payload" esperado es también ON / OFF.

Si estás usando Mosquitto, llegados a este punto, puedes probar el sistema subscribiéndote a stat/<CLIENT_ID>/POWER y enviando mensajes a cmnd/<CLIENT_ID>/POWER para comprobar cómo el relé responde acorde a los mensajes publicados.

Precisamente el siguiente paso, será configurar Home Assistant para emplear esos dos "topics" y poder así controlar el dispositivo.

Configuración Home Assistant

Para configurar Home Assistant vamos a configurar el broker MQTT, un interruptor MQTT y la integración "Termostato Genérico":

1# MQTT
2mqtt:
3 broker: <host_broker>
4 port: 1883
5 client_id: home-assistant
6 protocol: 3.1
7 username: <user_broker>
8 password: <password_broker>
9
10climate:
11 - platform: generic_thermostat
12 name: Calefaccion
13 heater: switch.caldera
14 target_sensor: sensor.temperature_sensor
15 min_temp: 16
16 max_temp: 25
17 target_temp: 20
18 cold_tolerance: 0.3
19 hot_tolerance: 0.3
20 initial_hvac_mode: "off"
21 away_temp: 16
22
23switch:
24 # Caldera
25 - platform: mqtt
26 name: "Caldera"
27 state_topic: "stat/caldera/POWER"
28 command_topic: "cmnd/caldera/POWER"
29 qos: 1
30 payload_on: "ON"
31 payload_off: "OFF"
32 retain: false

Como puedes ver, se hace referencia a sensor.temperature_sensor que es el sensor de temperatura que yo tengo configurado dentro del sistema. No doy detalles de su configuración porque es muy específica de mi dispositivo; simplemente habría que seguir los pasos requeridos para configurar el sensor dentro de Home Assistant.

Algunos datos adicionales que pueden ser de interés es ver como marcamos una tolerancia de 0.3 ºC para que "salte" el termostato. Suponiendo una temperatura objetivo de 20 ºC (que con la configuración que he puesto es la por defecto) El termostato no pasaría de OFF a ON hasta que la temperatura baje de 19.7 ni de ON a OFF hasta que no soprepase los 20.3. Esto hace que el termostato no esté constantemente encendiéndose y apagándose.

Conclusiones

Con esto, tendríamos un sistema de calefacción completamente programable con Home Assistant, ya sea con AppDaemon o con las automatizaciones del propio Home Assistant. Además, si tenemos Home Assistant conectado al exterior, podremos apagar o encender la calefacción con el móvil lo cual, puede sernos de utilidad en más de una ocasión.

He escrito un post largo, pero como ves, ninguno de los pasos son complicados y el hardware necesario es muy barato. A partir de aquí, podemos hacer muchas cosas que, más allá de un control remoto de la calefacción será lo que realmente de "potencia" al sistema. Por ejemplo, en mi caso, una de las automatizaciones que tengo programadas es apagar la calefacción si alguno de los sensores de apertura de ventanas que tengo colocados devuelve que alguna ventana está abierta, ahorrando así el consecuente gasto energético. Las posibilidades son infinitas.

Por supuesto, todo esto nos lo podemos evitar instalando un termostato inteligente, lo que sin duda nos va a dar una solución más sencilla pero también bastante más cara. Si te gusta "cacharrear" y te ha interesado el tema (lo cual supongo si has llegado hasta aquí), puedes montar el dispositivo tu mismo y hacer tus propias pruebas y configuraciones. Si no te convence, siempre podrás adaptarlo para usarlo como relé MQTT que es realmente lo que hemos montado.

Un saludo,

Ricardo

Discutir en Twitter

Compartir artículo
Ricardo Vega es un desarrollador "full-stack" al que le gusta "cacharrear con todo" pero está especializado sobre todo en tecnologías Javascript, principalmente en React. Intenta devolver a Internet lo que Internet le ha dado.

Sigue leyendo 😀


Apoya al blog


Si te ha gustado este artículo, valora apoyarme económicamente a través de Patreon, una plataforma de Micro-mecenazgo con la que puedes hacerme un donativo que ayude a la continuidad del blog. Una pequeña ayuda significa mucho.

Permanezcamos en contacto!


¿Quieres enterarte de todas las novedades del sector? ¿Te gustaría trabajar conmigo? ¡Puedes contactar conmigo de forma muy sencilla!

@ricveal

ricardo.vega@ricveal.com

Ricardo Vega