Interruptor inteligente para la caldera
Motivación
Mi familia y yo llevamos unos veinte años viviendo en un chalet en Sarre (Alemania). Además de una caldera de gas de condensación, calentamos el agua con un sistema solar térmico. Para ahorrar los 12 W de consumo en espera, en verano apago la calefacción por completo, porque el solar suele bastar para mantener el agua caliente. Ha habido años en los que la apagué a finales de abril y no la volví a encender hasta principios de noviembre. Este año ha sido distinto: ha habido muchas rachas de mal tiempo que me obligaban a encenderla de vez en cuando. El problema es que a veces se me olvida, y me entero cuando alguien quiere ducharse y el agua sale fría. También me ha pasado no acordarme de apagarla cuando llevaba días de sol. Era el momento de automatizarlo.
Condiciones previas
- Ya uso varios interruptores inteligentes Shelly para persianas y luces, así que era natural tirar de Shelly también aquí.
- La casa tiene un sistema de monitorización hecho por mí, con unos 25 sensores, sobre todo de temperatura pero también ambientales.
- El sistema se basa en MQTT y en un broker serverless gratuito en la nube de HiveMQ, que también quería usar para comunicarme con el Shelly.
- Ya había trasteado con Node-RED y pensé que este era un buen primer proyecto serio.
Instalación del Shelly
Como la corriente máxima de la caldera está muy por debajo de 8 A, elegí el Shelly 1PM Mini Gen3, que además me permite medir el consumo cuando la calefacción está encendida. La instalación fue sencilla, porque dentro de la carcasa de la caldera hay sitio de sobra. La caldera va conectada directamente a la red, justo detrás de un interruptor de emergencia en la habitación contigua.

Una vez configurada la conexión MQTT en el Shelly Smart Control app, todo debería estar listo para los siguientes pasos. Lo configuré como se muestra en el cuadro de diálogo de abajo (disculpen la interfaz en alemán), y una primera prueba con el cliente web proporcionado por HiveMQ funcionó inmediatamente.
Sensores utilizados
Para empezar, la lógica de conmutación usa tres sensores:
- La temperatura exterior en la cara norte de la casa. Quiero que la calefacción se encienda cuando baje de cierto nivel.
- La temperatura del acumulador de agua caliente. Tengo tres sondas en el depósito, pero para esto uso solo la del centro. Igual que antes: si baja de cierto punto, la caldera arranca y empieza a cargar el depósito.
- La temperatura de retorno del circuito de carga. Si vuelve a bajar de 50 °C, la carga ha terminado.
El primero es un sensor inalámbrico de temperatura y humedad que leo con hardware de Tinkerforge. Los otros dos son sondas DS18B20 One-Wire conectadas a una Raspberry Pi Pico W. La lógica concreta la verás más abajo, en la función de Node-RED.
Node-Red
Todos los datos de la monitorización los recoge un dispositivo perimetral basado en una Raspberry Pi Zero, que genera un paquete JSON comprimido. Los Shelly publican y consumen sus datos en topics MQTT concretos. Faltaba algo en medio que lo uniera todo, y Node-RED me pareció justo eso. Ahora mismo corre en Kubernetes (ver NodeRed-On-Rancher), aunque para producción acabaré pasándolo a una Raspberry Pi. Este es el flujo que creé para consumir los datos de los sensores, aplicar la lógica y enviar las órdenes al Shelly 1PM Mini Gen3:

Explicación
- Los nodos morados son los conectores MQTT. Todos apuntan al mismo broker, pero el de la izquierda se suscribe a la monitorización y los dos de la derecha publican en el topic de comandos del Shelly.
- El nodo rojo es un subflujo que procesa el mensaje entrante. Los datos llegan como JSON comprimido y codificado en Base64; la salida del nodo es el JSON original.
- - Los nodos amarillos convierten la salida de la lógica (0/1) en mensajes MQTT normales que el Shelly entiende. Se podría simplificar en una sola rama, pero mantengo dos (encender y apagar) porque se entiende y se depura mejor.
- Los nodos verdes solo generan la salida de depuración de la derecha.
- El nodo naranja, «Heater Switching Logic», es el que decide si encender o apagar la calefacción. Su función en JavaScript la tienes abajo.
Función de trabajo

Comandos MQTT de Shelly
Para que quede completo, estos son los comandos MQTT que controlan el interruptor de la caldera. También se ven en la ventana de depuración junto al flujo de Node-RED.
Tema: shelly1pmmini3-<device_id>/command/switch:0
Carga útil: on|off
Más información sobre los comandos MQTT en la documentación técnica de Shelly.
Conclusión
- La combinación de MQTT, Node-RED y dispositivos Shelly da mucho juego.
- Llevo años usando el broker gratuito en la nube de HiveMQ y me parece seguro, fiable y muy cómodo.
- Con Node-RED soy novato, pero le veo un potencial enorme para este tipo de conexiones, y da gusto trabajar con él.
- Y a estas alturas soy un ventilador declarado de Shelly. El 1PM Mini Gen3 de este proyecto es diminuto y aun así viene cargado: lógica de conmutación, programaciones, medición de consumo, control externo por MQTT… y eso solo lo que más me interesa a mí.
Lo que viene
Como decía, este conjunto de herramientas da mucho de sí y ya me ha dado ideas para seguir automatizando la casa. Por ejemplo:
- Una especie de geovalla que abra la puerta del garaje cuando llegue en coche. La puerta ya lleva un Shelly 1 Mini Gen3.
- Controlar el toldo del porche con un Shelly Plus 2PM, un Shelly Plus AddOn y algunos sensores (viento, radiación solar, lluvia).
- Y también añadir los sensores del Shelly AddOn a mi sistema de monitorización, algo que debería poder hacerse por MQTT.
En cuanto al proyecto actual, seguro que tendré que afinar la lógica de conmutación en invierno. Para el verano puede valer, pero me temo que en frío hará falta algo más elaborado.