¿Tienes paneles solares con netbilling y te duele ver que a mediodía la casa le regala energía a la red, mientras en la tarde prendes la estufa a parafina o a gas? En otoño y primavera pasa todos los días: sol de sobra al almuerzo y frío apenas se esconde. Este proyecto le da vuelta a esa ecuación con una estufa eléctrica de aceite que solo se enciende cuando los paneles producen más de lo que la casa consume, y que se apaga sola cuando pasa una nube, cuando empiezas a comprarle energía a la distribuidora o cuando la pieza ya llegó a la temperatura que quieres.

Al terminar vas a saber:

  • calcular en Home Assistant el excedente solar real sin que la propia estufa lo contamine;
  • evitar que la carga se prenda y apague cada minuto con histéresis y retardos;
  • escribir una automatización idempotente que falla hacia "apagado" si un sensor se cae;
  • decidir con números si en tu casa conviene o no, según el combustible que reemplazas;
  • y, si prefieres armarlo tú, reemplazar el enchufe comercial por un ESP32-C6 con ESPHome que comanda un contactor.

La lógica funciona con cualquier inversor o medidor que le entregue a Home Assistant la potencia en el empalme.

El concepto: por qué el excedente vale poco en Chile

Con la Ley 20.571 de generación distribuida (lo que todos llaman netbilling), la energía que inyectas no se paga igual que la que compras. La distribuidora la valoriza al precio de la energía, sin los cargos de transmisión y distribución que sí vienen en tu tarifa BT1, así que cada kWh inyectado vale bastante menos que un kWh comprado. Ese saldo se descuenta de la boleta y lo que sobra se arrastra a los meses siguientes.

La consecuencia práctica: cada kWh de excedente que consumes tú mismo te rinde más que inyectarlo. El problema es que en otoño la casa a mediodía no necesita casi nada: el refrigerador, un computador, quizás la lavadora. El resto se va a la red al precio bajo.

Una estufa eléctrica es la carga perfecta para absorber ese sobrante, con una condición dura: solo tiene sentido si funciona con excedente. Con energía comprada a tarifa residencial, calentar con resistencia eléctrica sale más caro que casi cualquier combustible. Por eso toda la automatización gira en torno a una pregunta: ¿sobra energía en este momento?

El autor del tutorial original, que vive en Alemania, lo resolvió para reemplazar su caldera a petróleo. Acá lo adaptamos a la realidad chilena: casas monofásicas de 220 V, enchufes tipo L y calefacción que suele ser parafina, gas licuado o leña.

Hardware: qué necesitas y por qué cada pieza

Una estufa de aceite con termostato mecánico. El original usa una De'Longhi Radia S de siete aletas y 1.500 W, funcionando en su nivel más bajo, que medido consume 720 W. El detalle mecánico no es un capricho, y lo explicamos en la sección siguiente.

Estufa de aceite De'Longhi Radia S vista de costado junto al enchufe Zigbee SONOFF S60ZBTPF, con la placa que indica 1.350 a 1.500 W

Un interruptor con medición de potencia. Hay dos caminos:

  • Ruta A, enchufe inteligente: el original usa un SONOFF S60ZBTPF Zigbee de 16 A, sin WiFi ni nube, que además actúa como router de la red Zigbee. Un Shelly Plug o un Tapo P110 funcionan igual por WiFi. La medición de potencia importa, porque entra en el cálculo del excedente.
  • Ruta B, ESP32-C6 con relé y contactor: la versión DIY, con la que aprendes cómo funciona por dentro. Está explicada más abajo.

Home Assistant corriendo en algo que no se apague. Una Raspberry Pi 5 con Home Assistant OS es la opción más común. Si vas por la ruta A con Zigbee, necesitas además un coordinador Zigbee USB para ZHA o Zigbee2MQTT.

Un sensor de potencia en el empalme. Esta es la pieza que no se puede saltar. Tiene que medir la potencia neta que entra o sale de la casa: negativa cuando inyectas, positiva cuando compras. El original lee el medidor EMMA de su inversor Huawei. En Chile se ven mucho Huawei, Growatt, Fronius y SMA, y casi todos tienen integración en Home Assistant. Si tu inversor no mide el empalme, en una casa monofásica basta un Shelly EM con pinza en el tablero (el Shelly Pro 3EM que menciona el original es para trifásico).

Un sensor de temperatura en la pieza. El original usa un Airthings View Plus, pero sirve cualquiera que reporte cada pocos minutos: un sensor Zigbee, un termostato de radiador o el mismo ESP32 de la ruta B con un DHT22.

Opcional: una cuenta gratuita de Solcast para la etapa de pronóstico del final.

Por qué estufa de aceite y termostato mecánico

El enchufe inteligente no "aprieta el botón" de la estufa: le corta y le devuelve la corriente completa. Eso solo lo tolera un equipo sin electrónica. Una perilla mecánica no olvida en qué posición quedó, así que cuando vuelve la corriente la estufa sigue calentando en el nivel que dejaste. Los modelos con pantalla y control digital, como la variante EasyTronic de la misma línea, arrancan en standby después de un corte: el enchufe hace clic y en la pieza no pasa nada.

Panel de control de la De'Longhi Radia S con la perilla del termostato mecánico y dos interruptores basculantes para los niveles MIN, MED y MAX

Frente a un termoventilador o un convector, la estufa de aceite tiene dos ventajas más para este uso:

  1. No tiene ventilador: es silenciosa y no levanta polvo.
  2. Inercia térmica: el aceite es un pequeño acumulador. Unos cuantos litros de aceite más el metal de las aletas guardan calor y lo siguen entregando varios minutos después de cortar la corriente. Cuando una nube se come el excedente por un rato, la pieza no se enfría de golpe. En términos de control, es un filtro pasa bajos natural que suaviza el encendido y apagado.

Por qué el nivel más bajo. La pieza solo absorbe calor hasta la temperatura objetivo; todo lo que va por encima es excedente regalado. Y 720 W se cubren con sobrante durante muchas más horas de un día de otoño que 1.500 W. Una carga chica que funciona seis horas aprovecha más sol que una grande que funciona una.

⚠️ Seguridad: estufas y enchufes programables

Los manuales de calefactores (norma IEC/EN 60335-2-30) advierten que no se deben operar con temporizadores, programadores ni control remoto, porque un equipo tapado o mal ubicado puede provocar un incendio. Este montaje va en contra de esa advertencia, y tienes que saberlo antes de empezar. Si lo replicas, lo haces bajo tu responsabilidad, y el manual del fabricante manda por sobre cualquier cosa que diga este artículo.

Reglas mínimas:

  • La estufa va parada, con espacio libre alrededor, lejos de cortinas, muebles y ropa. Nada colgado encima.
  • El interruptor va directo en el enchufe de muro, nunca en una zapatilla ni en un alargador.
  • En Chile los enchufes domiciliarios son tipo L de 10 A o 16 A a 220 V. A 1.500 W la estufa consume unos 6,8 A (1.500 / 220), y a 720 W unos 3,3 A. Muchos enchufes inteligentes que se venden en línea son de formato europeo (Schuko): no los uses con un adaptador para una carga que funciona horas, porque el adaptador es justo el punto que se calienta.
  • No la dejes funcionando sin nadie en casa. Más abajo está cómo hacer que Home Assistant lo imponga.

Los números: ¿te conviene en tu casa?

Antes de armar nada, haz la cuenta con tus precios. La métrica útil es cuánto te cuesta un kWh de calor útil con cada fuente:

  • Combustible: precio por litro (o kg) ÷ (kWh por litro × eficiencia). La parafina entrega del orden de 10 kWh por litro y el gas licuado cerca de 12,8 kWh por kg. Una estufa a parafina sin ducto deja casi todo el calor dentro de la pieza (junto con los gases de la combustión), mientras que una caldera pierde parte en la chimenea y en las cañerías.
  • Estufa con excedente: lo que te hubiera pagado la distribuidora por ese kWh inyectado. Es el costo de oportunidad.
  • Estufa con energía comprada: tu tarifa por kWh. Aquí es donde casi siempre pierde.

Como referencia, el autor del original hizo la cuenta con sus precios alemanes: su caldera a petróleo le cuesta unos 21 centavos de euro por kWh de calor, el excedente le vale 7,8 centavos y la electricidad comprada 31. En un día soleado de otoño la estufa funciona unas seis horas y entrega cerca de 4,3 kWh de calor, lo que le ahorra poco más de medio litro de petróleo al día. Su conclusión, que aplica igual en Chile: es una medida de ahorro chica y segura, no una máquina de hacer plata.

Dos casos donde no conviene:

  • Si calientas con bomba de calor o aire acondicionado inverter, olvídalo. Una bomba de calor convierte 1 kWh de electricidad en 3 a 4 kWh de calor; la resistencia de la estufa, en 1. Mejor usa el excedente para el aire acondicionado.
  • Si tu inyección vale casi lo mismo que tu combustible, el ahorro se vuelve marginal y el beneficio pasa a ser otro: menos parafina quemada dentro de la casa y menos humedad en los vidrios.

Software: de dónde saca Home Assistant el excedente

Todo el sistema descansa en un solo número: la potencia neta en el empalme. Negativa cuando inyectas, positiva cuando compras. En el original el sensor se llama sensor.emma_wirkleistung y a mediodía, con el lavavajillas funcionando, marca unos, 1.400 W; en una tarde despejada, hasta, 2.800 W.

Revisa el signo antes de seguir. Algunos medidores reportan la inyección como positiva. Si es tu caso, tienes que invertir el signo en la plantilla de más abajo.

Un error típico es usar la potencia de generación del inversor. Generar 3 kW con una casa que consume 2,8 kW no es excedente: son 200 W. Si solo tienes el dato del inversor, necesitas un medidor en el empalme (el Shelly EM en monofásico, o un lector óptico en el puerto infrarrojo del medidor, algo que se puede armar con una Raspberry Pi).

Paso 1: integrar el interruptor

El enchufe Zigbee se empareja como cualquier dispositivo por ZHA o Zigbee2MQTT; un Shelly, por su integración propia. Después configura tres cosas:

  1. Nombres de entidades. En el original, el interruptor es switch.heizung_wohnzimmer ("calefacción living" en alemán) y la potencia medida es sensor.heizung_wohnzimmer_leistung. Esos IDs aparecen en todo el código de abajo: reemplázalos por los tuyos. Si renombras algo, revisa los dashboards y automatizaciones que usaban el nombre viejo, porque Home Assistant no los actualiza solo.
  2. Comportamiento al volver la corriente: "estado anterior". En el SONOFF es la entidad de encendido tras corte; en Shelly, el estado inicial. Así, después de un corte de luz, el enchufe vuelve a donde estaba y la automatización lo corrige en el siguiente disparo.
  3. Apaga automatizaciones viejas. Al autor le pasó: ese enchufe antes controlaba una luz de mueble y seguía amarrado a una automatización del comedor. Sin este paso, prender la luz en la noche habría encendido la estufa.

Paso 2: los cuatro ayudantes (helpers)

La automatización final queda chica porque las decisiones viven en cuatro ayudantes, que se crean en Ajustes → Dispositivos y servicios → Ayudantes. La ventaja: umbrales y temperaturas quedan editables desde el dashboard, sin tocar YAML.

Lista de ayudantes de Home Assistant para la calefacción solar: medidor de consumo, entradas numéricas, sensor de plantilla y sensor de umbral

Ayudante 1: temperatura objetivo (Número). Un ayudante tipo Número, en el original input_number.heizung_wohnzimmer_solltemperatur, con rango de 15 a 26 °C en pasos de 0,5, mostrado como campo de entrada. Parte con 22,5 °C. No reutilices un ayudante de tu calefacción principal: le quitarías la temperatura objetivo a tu programa semanal.

Ayudante 2: excedente disponible (sensor de plantilla). Es la pieza más importante y la que más gente hace mal. Piensa qué pasa si usas la inyección tal cual: la estufa se enciende, la inyección baja justo en 720 W, el sensor ve que ya no sobra y la apaga. La inyección sube, la vuelve a encender, y así para siempre. Es un lazo de realimentación que oscila.

La solución es sumarle al excedente lo que la propia estufa está consumiendo. Así el sensor muestra el excedente como si la estufa estuviera apagada, y el valor queda estable al encenderla y apagarla. Crea un ayudante tipo Plantilla, subtipo Sensor, con nombre "PV-Überschuss verfügbar" (o el tuyo), unidad W, clase de dispositivo potencia, clase de estado medición, y como estado:

Jinja
{{ ((0 - states('sensor.emma_wirkleistung') | float(0))
   + (states('sensor.heizung_wohnzimmer_leistung') | float(0)
      if is_state('switch.heizung_wohnzimmer', 'on') else 0)) | round(0) }}

En las opciones avanzadas, pon como disponibilidad {{ has_value('sensor.emma_wirkleistung') }}. Si el medidor se cae, el sensor pasa a "no disponible" en vez de reportar cero en silencio, y la automatización apaga la estufa. Si tu medidor reporta la inyección como positiva, cambia el 0 - del inicio por un signo más. Home Assistant le quita las diéresis al ID, así que queda como sensor.pv_uberschuss_verfugbar.

Ayudante 3: ¿alcanza el sol? (Umbral). Un ayudante tipo Umbral convierte los watts en un sí o no con histéresis incluida. Fuente: el sensor del ayudante 2. Límite superior: 720. Histéresis: 100. Con eso pasa a "encendido" recién sobre 820 W y vuelve a "apagado" bajo 620 W.

Traducido: la estufa parte cuando sobran al menos 100 W por encima de su propio consumo, y sigue funcionando hasta que la casa compra más de 100 W de la red. Esos 100 W de compra se aceptan a propósito: sin ese margen, cada vez que arranca el compresor del refrigerador la estufa se apagaría. Si tu estufa consume otra potencia, ajusta el límite. En el original el resultado es binary_sensor.pv_uberschuss_reicht_fur_heizung.

La histéresis es la misma idea del termostato de una plancha: dos umbrales distintos para encender y apagar crean una "zona muerta" que absorbe el ruido de la medición.

Ayudante 4: demanda de calor (sensor binario de plantilla). La pieza necesita calor si está bajo la temperatura objetivo. Para que no conmute cada minuto en el borde, una vez encendida calienta hasta 0,3 °C por encima del objetivo. Tipo Plantilla, subtipo Sensor binario, clase calor, estado:

Jinja
{% set t = states('sensor.wohnzimmer_view_plus_temperatur') | float %}
{% set soll = states('input_number.heizung_wohnzimmer_solltemperatur') | float(22.5) %}
{% if is_state('switch.heizung_wohnzimmer', 'on') %}
  {{ t < soll + 0.3 }}
{% else %}
  {{ t < soll }}
{% endif %}

También acá va la disponibilidad {{ has_value('sensor.wohnzimmer_view_plus_temperatur') }} en las opciones avanzadas. Cambia el sensor por el tuyo. Uno que reporta cada pocos minutos basta: la estufa de aceite reacciona lento de todas formas.

Paso 3: la automatización

Con los cuatro ayudantes, la regla es una sola: la estufa funciona si "alcanza el sol" y "demanda de calor" están los dos encendidos; si no, se apaga. Los disparadores solo existen para darle calma al sistema. Crea una automatización nueva, cambia a Editar en YAML desde el menú de arriba a la derecha y pega:

YAML
alias: Heizung Wohnzimmer – PV-Überschuss
description: Ölradiator läuft nur bei Überschuss und Heizbedarf.
mode: queued
max: 5
triggers:
  - trigger: state
    entity_id: binary_sensor.pv_uberschuss_reicht_fur_heizung
    to: "on"
    for: "00:02:00"
    id: ein
  - trigger: state
    entity_id: binary_sensor.wohnzimmer_heizbedarf
    to: "on"
    for: "00:02:00"
    id: ein
  - trigger: state
    entity_id: binary_sensor.pv_uberschuss_reicht_fur_heizung
    to:
      - "off"
      - unavailable
      - unknown
    for: "00:01:00"
    id: aus
  - trigger: state
    entity_id: binary_sensor.wohnzimmer_heizbedarf
    to:
      - "off"
      - unavailable
      - unknown
    for: "00:01:00"
    id: aus
  - trigger: homeassistant
    event: start
    id: sync
actions:
  - if:
      - condition: state
        entity_id: binary_sensor.pv_uberschuss_reicht_fur_heizung
        state: "on"
      - condition: state
        entity_id: binary_sensor.wohnzimmer_heizbedarf
        state: "on"
    then:
      - action: switch.turn_on
        target:
          entity_id: switch.heizung_wohnzimmer
    else:
      - action: switch.turn_off
        target:
          entity_id: switch.heizung_wohnzimmer

Tres decisiones de diseño que vale la pena entender:

  • Retardos asimétricos. Encender espera 2 minutos de estado estable, para que un claro entre nubes no arranque la estufa. Apagar espera solo 1, porque comprar energía duele más que perder un minuto de sol.
  • Idempotencia. La acción no se ramifica según qué disparador llegó: siempre revisa las dos condiciones desde cero. Da lo mismo cuál dispare, o si disparan tres a la vez (por eso mode: queued): el resultado siempre es el estado correcto.
  • Falla segura. "No disponible" y "desconocido" cuentan como apagado. Si se cae el medidor, el sensor de temperatura o la red Zigbee, la estufa se apaga, nunca se queda encendida.

El disparador de inicio de Home Assistant sincroniza el estado después de un reinicio. No hay horario a propósito: si prendes la estufa a mano en la noche, sigue encendida hasta el siguiente disparador de apagado. Si prefieres que la automatización mande siempre, agrega un disparador time_pattern cada 15 minutos con el id sync.

Paso 4: solo calentar si hay alguien en casa

La advertencia del manual apunta a un calefactor funcionando sin supervisión. Home Assistant sabe si hay gente en la casa gracias a la app Companion del celular, y la zona zone.home cuenta cuántas personas hay adentro. Agrega esta tercera condición en el bloque if de la automatización:

YAML
      - condition: numeric_state
        entity_id: zone.home
        above: 0

Y para que la estufa se apague apenas sale la última persona, sin esperar a una nube, suma este disparador de apagado:

YAML
  - trigger: numeric_state
    entity_id: zone.home
    below: 1
    id: aus

El original agrega un cuarto disparador sobre la misma zona, con above: 0 y dos minutos de espera, para que la estufa vuelva a partir cuando llega alguien y todavía hay sol y demanda.

Aviso al celular. Conviene una notificación en cada encendido y apagado, pero no dentro de la automatización principal (se ejecuta con cada disparador y te llenaría de avisos). Va en una automatización aparte que escucha al interruptor:

YAML
alias: PV-Heizung – Meldung aufs Handy
description: Push bei jedem Schaltvorgang des Radiators.
mode: queued
triggers:
  - trigger: state
    entity_id: switch.heizung_wohnzimmer
    from: "off"
    to: "on"
    id: an
  - trigger: state
    entity_id: switch.heizung_wohnzimmer
    from: "on"
    to: "off"
    id: aus
actions:
  - action: notify.mobile_app_iphone_philipp
    data:
      title: PV-Heizung Wohnzimmer
      message: "Radiator {{ 'an' if trigger.id == 'an' else 'aus' }} – Überschuss {{ states('sensor.pv_uberschuss_verfugbar') }} W, Raum {{ states('sensor.wohnzimmer_view_plus_temperatur') }} °C"

El nombre del servicio notify lo encuentras en Herramientas para desarrolladores → Acciones: empieza con notify.mobile_app_ y termina con el nombre del teléfono en la app Companion.

Un seguro extra que recomendamos: un disparador state sobre el interruptor con for: "04:00:00" que apague la estufa y avise tras cuatro horas seguidas funcionando. Eso atrapa un sensor de temperatura pegado que reporta demanda de calor para siempre.

Paso 5: ver lo que pasa

Sin gráficos no le vas a creer a la automatización. El original agrega una pestaña "PV Heizung" al dashboard solar, con los valores del día arriba (estufa hoy, inyectado, comprado, pronóstico restante de Solcast) y tres curvas abajo: generación contra red, excedente disponible contra potencia de la estufa, y temperatura de la pieza contra objetivo.

Dashboard de Home Assistant con los valores del día, el interruptor de la estufa y las curvas de generación, red, excedente y estufa

Abajo va un historial con tres líneas de tiempo: "alcanza el sol", "demanda de calor" y "enchufe". La barra del enchufe solo puede estar verde donde las otras dos también lo están. Esa es la mirada con la que auditas la automatización de un vistazo.

Las curvas usan mini-graph-card de HACS. La tarjeta de excedente contra estufa:

YAML
type: custom:mini-graph-card
name: Verfügbarer Überschuss vs. Radiator
hours_to_show: 24
points_per_hour: 12
line_width: 2
height: 220
show:
  legend: true
  state: true
  labels: true
  fill: fade
entities:
  - entity: sensor.pv_uberschuss_verfugbar
    name: Überschuss verfügbar
    color: "#2e7d32"
  - entity: sensor.heizung_wohnzimmer_leistung
    name: Radiator
    color: "#ef6c00"

Para el consumo diario de la estufa, crea un ayudante tipo Medidor de consumo con ciclo diario sobre el sensor de energía del enchufe, y agrégalo como dispositivo individual en el panel de Energía. Así la ves junto a la lavadora en el desglose de consumo.

Paso 6: guardar calor con el pronóstico de Solcast

La automatización del paso 3 reacciona al momento. Pero si Home Assistant sabe que en lo que queda del día vienen varios kWh más de sol, la pieza puede subir un grado extra: ese calor queda guardado en muros y muebles para cuando el sol se va. Es almacenamiento térmico gratis.

Solcast entrega pronósticos de generación gratis para uso doméstico (hasta dos superficies de techo y diez consultas al día). Al crear cada superficie te pide azimut, inclinación y potencia. Ojo con el azimut, que no sigue la rosa de los vientos de una brújula: 0 es norte, este es, 90, oeste +90 y sur ±180. La buena noticia para Chile: en el hemisferio sur el techo ideal mira al norte, así que tu superficie principal probablemente sea azimut 0 o cercano. Revisa igual el aviso "Site is facing" del formulario: un signo al revés corre el pronóstico hasta una hora.

Formulario de Solcast para la superficie este: azimut, 90, inclinación 10 grados y 2,75 kW de paneles

Una instalación este oeste como la del original se registra como dos superficies, cada una con la mitad de la potencia. En Home Assistant instala por HACS la integración Solcast PV Forecast, pega la API key y las superficies aparecen solas.

Para esta etapa agrega dos ayudantes tipo Número ("temperatura día de sol", con 23,5 °C, y "umbral de pronóstico" en kWh) y un sensor de plantilla "objetivo efectivo" en °C:

Jinja
{% set normal = states('input_number.heizung_wohnzimmer_solltemperatur') | float(22.5) %}
{% set boost = states('input_number.heizung_wohnzimmer_solltemperatur_sonnentag') | float(normal) %}
{% set rest = states('sensor.solcast_pv_forecast_prognose_verbleibende_leistung_heute') | float(0) %}
{% set schwelle = states('input_number.heizung_wohnzimmer_prognose_schwelle') | float(6) %}
{{ boost if rest > schwelle else normal }}

En el sensor de demanda de calor (ayudante 4), reemplaza la línea de la temperatura objetivo por states('sensor.heizung_wohnzimmer_soll_effektiv') | float(22.5). Si el pronóstico restante supera el umbral, rige el objetivo de día de sol; si no, el normal. Si Solcast se cae, float(0) devuelve cero y vuelve el objetivo normal: otra vez, falla segura.

El autor ajustó el umbral al segundo día. Con 6 kWh, el refuerzo se cortaba a las 14:00 aunque hubo excedente hasta la tarde, y la pieza se quedó en 22,6 °C. Justo la tarde es cuando más conviene acumular calor, porque viene la noche sin sol. Lo bajó a 1 kWh, y el refuerzo ahora dura hasta poco antes de la puesta de sol. Mira tu dashboard unos días y ajústalo a tu instalación.

Prueba: el primer día

El sistema partió el 23 de septiembre de 2026 a las 13:44, con, 2.400 W en el medidor (o sea 3.100 W de excedente disponible) y 22,4 °C en el living. El enchufe encendió, la inyección bajó a, 1.700 W y el sensor de excedente se mantuvo en 3.100 W, tal como se buscaba: la estufa no se "vio" a sí misma. El pronóstico superaba el umbral y el objetivo subió a 23,5 °C. Cerca de las 15:20 la pieza llegó a 23,8 °C, el pronóstico cayó bajo el umbral, el objetivo volvió a 22,5 °C y la estufa se apagó, después de 0,62 kWh esa primera tarde.

Tarjetas de Home Assistant con la temperatura de la pieza contra el objetivo y las líneas de tiempo "alcanza el sol", "demanda de calor" y "enchufe"

Si al probar el tuyo ves que la estufa se prende y se apaga cada pocos minutos, revisa en este orden:

  1. El signo del medidor. Si el excedente sale positivo cuando compras, todo queda al revés.
  2. Que la plantilla sume la potencia de la estufa. Si el valor del excedente cae 700 W justo al encender, la corrección no está funcionando (revisa el ID del sensor de potencia del enchufe).
  3. La histéresis. Con menos de 100 W de margen, el ruido normal de la casa hace oscilar el sistema.
  4. La frecuencia del sensor de temperatura. Si reporta cada 10 minutos o más, la estufa se pasa de largo del objetivo. No es grave con aceite, pero se nota.

Qué no hace este montaje

  • No almacena energía. La pieza es el único acumulador, y se llena con un grado sobre el objetivo. Lo que sobre después sigue yéndose a la red.
  • No es inyección cero. La histéresis tolera hasta 100 W de compra y apagar puede tardar un minuto. La estufa es una carga todo o nada, no un regulador continuo.
  • No reemplaza tu calefacción. Si tienes termostatos en la misma pieza, van a ver el calor de la estufa y bajarán solos, y eso está bien.
  • No conviene con bomba de calor, y con combustibles baratos el ahorro es marginal.

Ruta B: el mismo control con un ESP32-C6 y un contactor

Si prefieres no depender de un enchufe comercial, o quieres entender qué hay dentro de uno, puedes armar el actuador con un ESP32-C6 y ESPHome. El C6 tiene WiFi 6, Bluetooth LE y radio 802.15.4 (Thread/Zigbee), así que te sirve hoy por WiFi y mañana por Thread.

La arquitectura es de dos etapas, y no es opcional:

  1. El ESP32-C6 activa un módulo relé de un canal.
  2. Ese relé solo energiza la bobina de un contactor modular instalado en el tablero, y el contactor es el que conmuta los 220 V de la estufa, en un circuito con su propio automático.

¿Por qué no conectar la estufa directo al relé del módulo? Los relés de esos módulos suelen estar especificados para 10 A, pero están en una placa con pistas delgadas y bornes pequeños. Una carga resistiva de horas en el límite los calienta. El contactor está hecho para eso. Y el trabajo en el tablero lo hace un electricista autorizado: es 220 V en un circuito de la casa.

Dos detalles de la electrónica: el ESP32-C6 entrega 3,3 V en sus GPIO, y hay módulos relé que necesitan 5 V en la señal para activarse con confianza (busca uno con optoacoplador y entrada compatible con 3,3 V). Y si agregas un DHT22 al mismo ESP32, montado lejos de la estufa, ya tienes también el sensor de temperatura de la pieza.

Esta configuración de ESPHome expone el relé como interruptor y la temperatura como sensor, y apaga la estufa si pierde contacto con Home Assistant:

YAML
esphome:
  name: estufa-living

esp32:
  board: esp32-c6-devkitc-1
  framework:
    type: esp-idf

logger:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

api:
  on_client_disconnected:
    - switch.turn_off: rele_estufa

ota:
  - platform: esphome

switch:
  - platform: gpio
    pin: GPIO4
    id: rele_estufa
    name: "Estufa living"
    restore_mode: ALWAYS_OFF

sensor:
  - platform: dht
    pin: GPIO5
    model: DHT22
    update_interval: 60s
    temperature:
      name: "Temperatura living"
    humidity:
      name: "Humedad living"

Fíjate en dos líneas. restore_mode: ALWAYS_OFF hace que, tras un corte de luz, el relé parta apagado y espere la orden de Home Assistant (lo contrario de la ruta A, donde el enchufe recordaba su estado: aquí preferimos falla segura). Y on_client_disconnected apaga la estufa si Home Assistant se reinicia o se cae la red. Como el contactor no mide potencia, en esta ruta el ayudante 2 no puede sumar la potencia medida: reemplaza el sensor.heizung_wohnzimmer_leistung de la plantilla por la potencia nominal fija de la estufa (720 W) cuando el interruptor está encendido.

Variantes y mejoras

  • Otras cargas, misma lógica. El sensor de excedente con autocompensación y la histéresis sirven para cualquier carga todo o nada: un termo eléctrico para el agua caliente (el acumulador térmico más grande de la casa), la bomba de la piscina o el cargador de un auto eléctrico. Con el termo es donde más rinde, porque el agua guarda calor muchas horas.
  • Cargas por prioridad. Si tienes dos o más cargas, crea un umbral por cada una con límites escalonados (por ejemplo, termo sobre 1.200 W y estufa sobre 2.000 W) para que la primera en entrar sea la que más te conviene.
  • Estufa con regulación continua. En vez de todo o nada, un regulador de potencia por ángulo de fase o un SSR con control por ciclos completos, comandado por el ESP32-C6, permite seguir el excedente watt a watt y acercarse a la inyección cero. Es otro nivel de complejidad eléctrica y de seguridad, y también pasa por un electricista.
  • Episodios críticos. En ciudades con restricción de leña, puedes subir el objetivo los días de preemergencia para depender menos de la combustión y usar más la estufa eléctrica mientras haya sol.

Personalización para Chile

En Chile consigues en MechatronicStore la base del montaje (busca cada uno en el catálogo, la disponibilidad cambia):

  • Raspberry Pi 5: el servidor de Home Assistant OS, encendido todo el día con bajo consumo.
  • Tarjeta microSD de 32 GB o más: para el sistema de Home Assistant; con uso intensivo, conviene un SSD por PCIe.
  • Placa ESP32-C6 DevKit: el actuador de la ruta B con ESPHome; también sirve como nodo Thread o Zigbee.
  • Módulo relé de 1 canal: activa la bobina del contactor, nunca la estufa directo.
  • Sensor de temperatura y humedad DHT22: la temperatura de la pieza, conectado al mismo ESP32-C6.

Si el original usa un Airthings View Plus como sensor de temperatura, el DHT22 conectado al ESP32 cumple la misma función en esta automatización. La estufa de aceite con termostato mecánico, el medidor del empalme y el contactor modular los compras en ferreterías o tiendas eléctricas, y el contactor lo instala un electricista.

Recursos

Versión chilena con componentes en stock local en MechatronicStore.