Termo inteligente con batería al 100% en Home Assistant (sin medir excedentes)

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.termo
  • sensor.jhb_501810019e79_bateria_soc
  • sensor.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: -1000 o for: 00:12:00
  • Si ves que se te come batería:
    • sube exigencia de sol: en el encendido cambia above: 100 por above: 200 (o más)

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.

About Author

Artículos recomendados

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *