Introducción
Si tienes autoconsumo con baterías, seguro que te ha pasado: estás generando a tope, la batería llega al 100%, hay excedente “de sobra”… y aun así acabas calentando el termo manualmente.
En esta entrada te enseño cómo he montado una automatización en Home Assistant para que el termo se encienda solo cuando interesa:
✅ Batería al 100%
✅ Hay sol “de verdad” (sin necesitar sensor de excedentes a red)
✅ Solo hasta una hora límite (15:30)
✅ Con anti-nubes (para que no haga ON/OFF cada 2 minutos)
✅ Y lo más importante: por la tarde/noche si lo enciendes a mano, no te lo apaga (duchas sin sustos)
¿Qué necesito?
- Home Assistant
- Un relé/enchufe controlable para el termo (switch.termo)
- Sensor de SOC de batería (0–100%)
- Sensor de potencia de batería (W), donde:
- positivo = cargando
- negativo = descargando
En mi caso:
switch.termosensor.jhb_501810019e79_bateria_socsensor.jhb_501810019e79_potencia(positivo cargando / negativo descargando)
⚙️ ¿Cómo funciona?
Como no tengo medición directa de excedentes a red, uso una idea muy simple:
- Si la batería está al 100% y además la potencia de batería está ≥ 0W, significa que hay sol suficiente (o como mínimo no me estoy comiendo batería).
- Si al encender el termo pasa una nube, la batería puede ponerse negativa unos minutos. Para eso meto:
- anti-nubes (descarga fuerte sostenida X minutos)
- ignorar arranque (no cortar en los primeros 12 min)
Además, uso un input_boolean para separar “modo auto solar” del uso manual.
Y lo activo automáticamente solo dentro de la ventana (por ejemplo 08:00–15:30).
🔧 Helpers necesarios
Crea este helper en Home Assistant:
input_boolean.termo_auto→ “Termo automático solar”
🧠 Automatización: gestionar el modo auto solar (ON ventana / OFF fuera)
Esta automatización enciende el modo auto por la mañana y lo apaga a las 15:30.
También se sincroniza al arrancar Home Assistant (por si actualizas/reinicias).
alias: "Termo - Gestionar modo auto solar (ON ventana / OFF fuera)"
mode: single
trigger:
- platform: homeassistant
event: start
- platform: time
at: "08:00:00"
- platform: time
at: "15:30:00"
action:
- choose:
- conditions:
- condition: time
after: "08:00:00"
before: "15:30:00"
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.termo_auto
default:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.termo_auto
✅ Automatización: encender el termo con batería llena y sol estable
alias: "Termo - Auto solar ON (SOC 100% y sol estable)"
mode: single
trigger:
- platform: time_pattern
minutes: "/5"
# Sol estable: batería cargando al menos 3 min
- platform: numeric_state
entity_id: sensor.jhb_501810019e79_potencia
above: 100
for: "00:03:00"
# SOC alto
- platform: numeric_state
entity_id: sensor.jhb_501810019e79_bateria_soc
above: 99.5
condition:
- condition: state
entity_id: input_boolean.termo_auto
state: "on"
- condition: time
before: "15:30:00"
- condition: numeric_state
entity_id: sensor.jhb_501810019e79_bateria_soc
above: 99.5
# En este instante NO estás descargando
- condition: numeric_state
entity_id: sensor.jhb_501810019e79_potencia
above: 0
- condition: state
entity_id: switch.termo
state: "off"
action:
- service: switch.turn_on
target:
entity_id: switch.termo
🛑 Automatización: apagar si falta sol (anti-nubes + ignora arranque)
El termo consume ~1800–2000W, así que el corte lo hago con descarga fuerte sostenida:
- Si la batería está por debajo de -800W durante 10 min, apago.
- Y para evitar el “enciendo termo → MPPT reacciona → batería negativa → apago”, ignoro los primeros 12 min tras encender.
alias: "Termo - Auto solar OFF si falta sol (anti-nubes + ignora arranque)"
mode: restart
trigger:
- platform: numeric_state
entity_id: sensor.jhb_501810019e79_potencia
below: -800
for: "00:10:00"
- platform: numeric_state
entity_id: sensor.jhb_501810019e79_bateria_soc
below: 98.5
condition:
- condition: state
entity_id: input_boolean.termo_auto
state: "on"
- condition: time
before: "15:30:00"
- condition: state
entity_id: switch.termo
state: "on"
# Ignorar los primeros 12 min tras encender
- condition: template
value_template: >
{{ (as_timestamp(now()) - as_timestamp(states.switch.termo.last_changed)) > 720 }}
action:
- service: switch.turn_off
target:
entity_id: switch.termo
Importante: el apagado “cuando el termo ya está caliente”
En mi caso el termo, cuando llega a temperatura, baja el consumo casi a cero.
Yo tengo otra automatización (independiente) que apaga el switch cuando detecta consumo bajo X minutos.
Esto es ideal porque:
- aunque haya sol, no lo dejo encendido “porque sí”
- lo corto cuando realmente ya calentó
Ajustes recomendados
- Si ves que apaga demasiado pronto con nubes:
- baja sensibilidad:
below: -1000ofor: 00:12:00
- baja sensibilidad:
- Si ves que se te come batería:
- sube exigencia de sol: en el encendido cambia
above: 100porabove: 200(o más)
- sube exigencia de sol: en el encendido cambia
En resumen
Con estas automatizaciones consigues:
✅ Termo automático cuando la batería está llena y hay sol
✅ Sin sensor de excedentes a red
✅ Anti-nubes
✅ Sin que te corte duchas por la tarde/noche (fuera de ventana el auto se apaga)
✅ Compatible con tu automatización de “consumo bajo” para apagar cuando ya calentó
Si quieres, lo siguiente “nivel pro” es añadir un cooldown (por ejemplo 30 min) para que si se apaga por nube no reintente inmediatamente, pero con los tiempos que usamos normalmente ya va muy estable.

