La regla que a todo el mundo se le ocurre primero es "avísame cuando el consumo baje de 10 watts". Y es exactamente la regla que no funciona.
El lavavajillas pita una vez cuando termina, en la cocina, mientras tú estás en otra pieza, en el patio o durmiendo. A la mañana siguiente la loza sigue húmeda y la máquina lleva horas apagada. Con la lavadora es peor: la ropa mojada se queda dentro del tambor y al mediodía ya huele.
La solución cuesta poco y no toca la máquina: un enchufe inteligente con medición de consumo entre el toma y el electrodoméstico, Home Assistant leyendo esa potencia, y una notificación al celular cuando el programa realmente terminó. con el consumo en kWh de ese ciclo incluido.
Lo interesante de este proyecto no es la automatización en sí, que son veinte líneas de YAML. Es entender por qué la versión obvia falla y qué hay que medir para que no falle. Al final de este tutorial vas a tener la notificación funcionando, vas a saber leer la curva de consumo de tu propia máquina para sacar tus propios números, y vas a tener una tarjeta en el dashboard que muestra el estado de un vistazo.

La curva de consumo: por qué un umbral solo no alcanza
Antes de escribir una sola línea de automatización hay que dejar correr la máquina un ciclo completo con el enchufe medidor puesto, y después mirar el historial del sensor de potencia. En Home Assistant se hace haciendo clic en la entidad y entrando a Historial.
Un ciclo automático de lavavajillas medido dura poco más de dos horas y se ve así:

| Fase | Duración | Potencia |
|---|---|---|
| Puerta abierta, panel encendido (cargando) | . | 1 a 6 W |
| Prelavado, bomba de recirculación | ~3 min | 15 a 80 W |
| Fases de calentamiento (cuatro) | 2 a 5 min c/u | 1.900 a 2.000 W |
| Lavado entre calentamientos | 10 a 20 min | 30 a 100 W, con picos cortos de 300 W al bombear |
| Pausas de bomba antes del enjuague | varias de 40 s | 3 a 8 W |
| Enjuague con calentamiento | 14 min | 1.100 a 2.050 W |
| Secado | 25 min | 2 a 6 W, con un peak corto de 20 W |
| Fin de programa | . | 0 W, la máquina se apaga sola |
Ciclo completo: 2 h 11 min, consumo 1,0 kWh.
Dentro de esa curva hay dos trampas que hacen fracasar cualquier regla de umbral simple:
Las pausas de bomba. Aproximadamente una hora después de partir, la máquina se detiene varias veces por 40 segundos y cae a 3 a 8 W. Una automatización sin duración mínima manda el aviso justo ahí: una hora antes de tiempo, con la loza todavía sucia.
El secado. Después del enjuague, la máquina pasa 25 minutos consumiendo 2 a 6 W. Eléctricamente eso es idéntico a estar cargando la máquina con la puerta abierta. Ningún umbral de potencia puede distinguir "secando" de "en reposo". Solo la duración puede.
Y hay una tercera razón por la que tampoco sirve un temporizador: el programa automático se adapta a la carga. En las mediciones el mismo ciclo duró entre dos y tres horas según cuánta loza tuviera adentro.
En lavadoras y secadoras la curva se ve distinta, pero las dos trampas son las mismas. La lavadora tiene fases largas entre el lavado y el centrifugado donde solo corre la electrónica, y muchas secadoras interrumpen el antiarrugas cada pocos minutos después de terminar para girar el tambor un rato. Esas pausas son justo lo que tienes que encontrar en tu curva: la más larga de todas define cuánto tiene que esperar la automatización.
La lógica que sí funciona: dos detecciones y un ayudante
La solución combina dos condiciones que un helper enlaza entre sí:
- "Está funcionando" se detecta por la fase de calentamiento: si la potencia sube por sobre 1.000 W, hay un programa corriendo. Ninguna máquina llega a ese valor cargándola, abriendo la puerta o en reposo. Calentar solo pasa dentro de un programa.
- "Terminó" significa: la potencia estuvo 30 minutos seguidos bajo 25 W y antes se había detectado un programa en marcha. Los 25 W quedan por encima de todas las pausas y del peak de 20 W del secado; los 30 minutos cubren el secado completo.
El helper es el que garantiza exactamente un aviso por ciclo, y el que evita que abrir la puerta sin haber lavado dispare una notificación.
En la medición de referencia, esta lógica habría disparado el aviso a las 12:59, el mismo minuto en que la máquina se apagó. En el ciclo siguiente, ya con la automatización activa, el push llegó a las 13:10:59, 42 segundos antes de que el consumo llegara a 0 W, reportando 0,96 kWh.
Antes de comprar: ¿aguanta el enchufe la resistencia de calentamiento?
Este es el punto de seguridad del proyecto y no se puede saltar. Lavavajillas, lavadoras y secadoras calientan el agua o el aire con una resistencia eléctrica, y esa resistencia es la razón por la que no sirve cualquier enchufe inteligente.
La máquina medida llegó a 2.048 W en la fase de calentamiento. En Chile, con red de 220 V, eso son unos 9,3 A. En Europa a 230 V darían 8,9 A. una diferencia chica, pero que juega en contra: a menor voltaje, más corriente para la misma potencia. Muchos enchufes inteligentes baratos están construidos para 10 A, y la combinación de fase de calentamiento con operación continua es exactamente para lo que no fueron diseñados.
Así que antes de comprar:
- Busca la placa de características de tu máquina, normalmente en el marco interior de la puerta o en un costado.
- Compara la potencia nominal que dice ahí con la especificación del enchufe.
- Si tu máquina pasa de 2.300 W, necesitas sí o sí un enchufe de 16 A. No es negociable.
Y revisa algo tan básico como si puedes llegar al enchufe: en máquinas empotradas suele quedar en el mueble de al lado o detrás del zócalo. Si no hay tomacorriente accesible, la alternativa es instalar un relé con medición de consumo fijo en la alimentación. pero eso es trabajo sobre 220 V y le corresponde a un electricista con credencial SEC. No es un paso de tutorial.
Las dos rutas de hardware
Ruta A. enchufe inteligente listo (la más rápida). Cualquier enchufe que entregue a Home Assistant un sensor de potencia en watts sirve. El artículo original usa un Shelly AZ Plug, que mide localmente sin pasar por la nube y aparece en Home Assistant en dos minutos. En Chile los modelos con medición de consumo se consiguen, pero cuestan bastante más que en Europa y no todos publican la corriente máxima real en la ficha: conviene confirmarla antes.
Ruta B. DIY con ESP32 + PZEM-004T (la más flexible). Esta es la versión que más sentido hace acá, y resuelve de paso el problema de los 16 A. El módulo PZEM-004T v3.0 mide voltaje, corriente, potencia, energía acumulada, frecuencia y factor de potencia, y se comunica por Modbus sobre serial a un ESP32. Viene con una bobina toroidal (CT) de 100 A que se cierra alrededor del cable de fase sin cortarlo, así que la parte de medición es no invasiva: el conductor de 220 V nunca pasa por el módulo.
Esa es la diferencia técnica que importa frente a un enchufe inteligente común, que mide con un shunt en serie: como el shunt está en el camino de la corriente, es él quien pone el límite de amperes. Con bobina toroidal el límite lo pone el cable, no el medidor, y 100 A sobran por mucho para cualquier electrodoméstico doméstico.
Con ESPHome el ESP32 aparece en Home Assistant como un sensor de potencia más, y de ahí en adelante toda la automatización de este tutorial funciona igual: lo único que cambian son los nombres de las entidades. La contra honesta: hay que montarlo en una caja, y aunque la medición sea no invasiva, la alimentación del módulo se conecta a la red. Si no tienes experiencia trabajando con 220 V, quédate en la ruta A.
Además de la medición necesitas Home Assistant con la app Companion instalada en el celular. La app crea sola un servicio notify.mobile_app_… al configurarse, que es el que usa la automatización. Si prefieres Telegram, se reemplaza esa acción por la del bot y el resto queda igual.
Preparar el enchufe: tres ajustes que no son obvios
Conectar el enchufe al WiFi y a Home Assistant es el procedimiento normal de cualquier dispositivo. Pero para usarlo en una máquina hay tres ajustes distintos a los de una lámpara, y los tres vienen de problemas reales:
Estado tras corte de energía: encendido. Se configura en la app del fabricante. Si no lo haces, después de un corte breve o de un reinicio del enchufe la máquina queda sin electricidad y nadie se da cuenta.
Borra horarios, auto apagado y acciones que traiga el enchufe. Si el enchufe ya se usó antes para otra cosa, puede tener un horario guardado. Un horario heredado apagaría el lavavajillas en la mitad del programa.
Esconde el interruptor en Home Assistant. El enchufe aparece como una entidad switch. Esa entidad tiene que salir del dashboard y del control por voz. Si quedó habilitada para el asistente de voz, un "apaga el mueble" dicho al pasar ahora apaga el lavavajillas. Se desactiva en Ajustes → Dispositivos → Entidad → Visible y se quita el permiso en la configuración del asistente.
Aprovecha de renombrar el dispositivo en ese momento, para que las entidades queden con nombres que se entiendan. En los ejemplos de abajo se llaman sensor.spuelmaschine_leistung (watts) y sensor.spuelmaschine_energie (contador acumulado en kWh).
Paso 1: crear los cuatro helpers
En Ajustes → Dispositivos y servicios → Ayudantes se crean cuatro. Los dos primeros los necesita la automatización; los otros dos alimentan la tarjeta del dashboard del final:
- Un interruptor (entrada booleana) llamado "Spülmaschine läuft" →
input_boolean.spulmaschine_lauft - Una entrada numérica "Spülmaschine Zählerstand bei Start", modo campo de entrada, unidad kWh, máximo suficientemente alto (en el original, 1.000.000) →
input_number.spulmaschine_zahlerstand_bei_start - Una entrada numérica "Spülmaschine letzter Spülgang", unidad kWh, paso 0,01 →
input_number.spulmaschine_letzter_spulgang - Una entrada de fecha y hora "Spülmaschine zuletzt fertig", con fecha y hora →
input_datetime.spulmaschine_zuletzt_fertig

El contador al inicio es la base del cálculo de consumo que va en el aviso: se guarda la lectura del medidor cuando arranca el programa, y al terminar se resta. Los dos últimos helpers guardan el resultado para poder verlo después en el dashboard.
Un detalle que confunde a mucha gente: Home Assistant genera los IDs de entidad a partir del nombre y en el proceso elimina las diéresis y caracteres especiales. Por eso "Spülmaschine läuft" se convierte en spulmaschine_lauft. Si tú los nombras en español, tus IDs van a ser distintos a los del código de abajo y vas a tener que reemplazarlos.
Paso 2: la automatización
En Ajustes → Automatizaciones se crea una nueva, se cambia a modo YAML desde el menú de tres puntos arriba a la derecha, y se pega este código. Los IDs de entidad y el servicio de notificación hay que ajustarlos a tus nombres. el código va tal cual del original, en alemán:
alias: Spülmaschine – Fertigmeldung
description: >-
Läuft = Heizphase über 1000 W. Fertig = 30 Minuten unter 25 W.
Gemessen: Trocknen 2–6 W, Pumpenpausen 3–8 W, Ausreißer 20 W.
mode: single
triggers:
- trigger: numeric_state
entity_id: sensor.spuelmaschine_leistung
above: 1000
id: laeuft
- trigger: numeric_state
entity_id: sensor.spuelmaschine_leistung
below: 25
for:
minutes: 30
id: fertig
actions:
- choose:
- alias: Spülgang beginnt
conditions:
- condition: trigger
id: laeuft
- condition: state
entity_id: input_boolean.spulmaschine_lauft
state: "off"
sequence:
- action: input_number.set_value
target:
entity_id: input_number.spulmaschine_zahlerstand_bei_start
data:
value: "{{ states('sensor.spuelmaschine_energie') | float(0) }}"
- action: input_boolean.turn_on
target:
entity_id: input_boolean.spulmaschine_lauft
- alias: Spülgang fertig
conditions:
- condition: trigger
id: fertig
- condition: state
entity_id: input_boolean.spulmaschine_lauft
state: "on"
sequence:
- variables:
verbrauch: >-
{{ (states('sensor.spuelmaschine_energie') | float(0)
- states('input_number.spulmaschine_zahlerstand_bei_start') | float(0))
| round(2) }}
- action: input_number.set_value
target:
entity_id: input_number.spulmaschine_letzter_spulgang
data:
value: "{{ verbrauch }}"
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.spulmaschine_zuletzt_fertig
data:
timestamp: "{{ now().timestamp() }}"
- action: notify.mobile_app_euer_handy
data:
title: Spülmaschine fertig
message: "Geschirr kann ausgeräumt werden. Verbrauch: {{ verbrauch }} kWh."
- action: input_boolean.turn_off
target:
entity_id: input_boolean.spulmaschine_lauft

Qué hay que entender de ese código:
- Los dos disparadores tienen un
id, y la acciónchoosedecide con ese ID qué rama corre. Así todo queda en una sola automatización en vez de dos. - El disparador "sobre 1.000 W" se dispara en cada fase de calentamiento, o sea cuatro o cinco veces por ciclo. La condición "el helper está apagado" hace que solo cuente la primera, y que el contador inicial no se sobrescriba a mitad de camino.
mode: singlesignifica que si la automatización ya está corriendo, una nueva activación se descarta. Acá es lo correcto, porque las ramas terminan en milisegundos.
Un detalle sobre for: que el artículo original no menciona y que cuesta una noche de depuración: en Home Assistant, un disparador numeric_state con for: no es un temporizador que corre por su cuenta. El conteo se reinicia con cualquier lectura que vuelva a pasar el umbral. que es justo lo que queremos. , pero además no sobrevive a un reinicio de Home Assistant. Si actualizas o reinicias HA mientras la máquina está en el secado, el conteo de los 30 minutos parte de cero y el aviso llega hasta media hora tarde, o no llega si la máquina ya se apagó del todo antes de completarse. No es un error de tu configuración: es cómo funciona. Si reinicias HA seguido, conviene subir el umbral de "terminó" y confiar más en la duración que en el valor exacto.
Paso 3: ajustar los tres números a tu máquina
El 1.000, el 25 y el 30 salen de esa máquina medida. Para la tuya. da lo mismo si es lavavajillas, lavadora o secadora. los tres valores se deducen así de tu propia curva:
Umbral de "funcionando": aproximadamente la mitad de la potencia de calentamiento. Con una resistencia de 2.000 W, 1.000 W es seguro; en una secadora de 2.500 W van bien 1.200 W. Lo único que importa es que ningún otro estado alcance ese valor.
Umbral de "terminado": apenas por encima del valor más alto que la máquina todavía muestra en sus pausas y al final del programa. En la medición fueron 20 W durante el secado, por eso quedó en 25. Una lavadora que al salir del centrifugado todavía marca 40 W necesita 50.
Duración de "terminado": más larga que la pausa más larga del programa, y más larga que una fase de secado o antiarrugas que quieras contar como "todavía no termina". Acá fueron 30 minutos por los 25 de secado. Una secadora con antiarrugas cada cinco minutos se arregla con diez.
Ante la duda, alarga la duración. Un aviso que llega diez minutos tarde no molesta a nadie; uno que llega en la mitad del programa vuelve inútil toda la automatización.
Lo que cuesta un ciclo (en pesos)
El contador de energía del enchufe marcaba 1,619 kWh antes del ciclo y 2,625 kWh después: un ciclo automático consume aproximadamente 1 kWh, casi todo en las cinco fases de calentamiento. La bomba y la electrónica apenas pesan.
Llevado a Chile, con tarifas residenciales que se mueven en el rango de $150 a $200 CLP por kWh según distribuidora y horario, cada ciclo sale entre $150 y $200 pesos. Tres ciclos por semana son unos $2.400 al mes; sumar la lavadora y la secadora fácilmente triplica esa cifra.
Ese mismo número viaja en cada notificación, así que después de algunas semanas tienes, sin hacer nada extra, una comparación real entre lo que gasta el programa eco y lo que gasta el automático en tu casa. Ese dato normalmente se estima; acá se mide.

La tarjeta en el dashboard
La notificación sirve para el momento; la tarjeta sirve para la mirada de paso: ¿está funcionando ahora, cuánto está consumiendo, y cuándo terminó el último ciclo?

Es una tarjeta markdown con el estado en una frase, cuatro fichas y el historial de potencia de las últimas seis horas:
type: grid
cards:
- type: heading
heading: Spülmaschine
icon: mdi:dishwasher
- type: markdown
grid_options:
columns: full
content: >-
{% if is_state('input_boolean.spulmaschine_lauft', 'on') %}
**Läuft** – gestartet {{ relative_time(states.input_boolean.spulmaschine_lauft.last_changed) }},
aktuell {{ states('sensor.spuelmaschine_leistung') }} W
{% elif is_state('input_datetime.spulmaschine_zuletzt_fertig', 'unknown') %}
Noch kein Spülgang erfasst
{% else %}
**Fertig** – letzter Spülgang
{{ as_timestamp(states('input_datetime.spulmaschine_zuletzt_fertig')) | timestamp_custom('%d.%m. %H:%M') }} Uhr,
{{ states('input_number.spulmaschine_letzter_spulgang') }} kWh
{% endif %}
- type: tile
entity: input_boolean.spulmaschine_lauft
name: Läuft
icon: mdi:dishwasher
color: blue
tap_action:
action: more-info
grid_options:
columns: 6
- type: tile
entity: sensor.spuelmaschine_leistung
name: Leistung
grid_options:
columns: 6
- type: tile
entity: input_number.spulmaschine_letzter_spulgang
name: Letzter Spülgang
grid_options:
columns: 6
- type: tile
entity: input_datetime.spulmaschine_zuletzt_fertig
name: Zuletzt fertig
grid_options:
columns: 6
- type: history-graph
hours_to_show: 6
grid_options:
columns: full
rows: 4
entities:
- entity: sensor.spuelmaschine_leistung
name: Leistung
La sección se agrega en el editor del dashboard con "Añadir sección" y cambiando ahí a modo YAML. La ficha de "funcionando" al tocarla solo abre los detalles: deliberadamente no es un interruptor, para que nadie cambie el helper sin querer. En el celular las cuatro fichas se acomodan solas de a dos.
Lo que este montaje no puede hacer
Vale la pena ser explícito con los límites antes de que alguien se decepcione:
No conoce el programa ni el tiempo restante. El enchufe solo ve watts. Qué programa corre y cuánto falta lo sabe únicamente la máquina.
Un programa sin calentamiento no se detecta. Si lavas solo en frío, nunca se cruza el umbral de "funcionando" y no llega aviso. Para un programa frío habría que bajar el umbral al nivel de la bomba, y entonces hay que convivir con falsas alarmas cada vez que se abre la puerta.
El aviso llega con retraso. Es el precio de los 30 minutos. Si no quieres esperar el secado, acortas la duración. y sacas la loza todavía mojada.
Un corte de luz no resetea el helper. Si la máquina queda detenida en la mitad del programa, el helper se queda en "encendido" hasta que corra el siguiente programa completo. Es inofensivo: el próximo aviso igual llega, solo que el consumo reportado va a ser el de los dos programas sumados.
Variantes y mejoras
Avisar en la pieza, no solo al celular. La misma automatización puede encender una ampolleta inteligente de un color determinado por unos minutos, o mandar un mensaje a un parlante con TTS. Se agrega como una acción más en la rama de "terminado", sin tocar el resto de la lógica.
Detectar que la loza sigue adentro. Si a las dos horas del aviso el helper nunca volvió a activarse y la puerta. con un sensor magnético de apertura en el marco. tampoco se abrió, es que nadie descargó la máquina. Una segunda notificación de recordatorio se arma con un disparador de estado con for: hours: 2 sobre el input_datetime.
Extender el mismo principio a otros aparatos. La lógica de "helper + duración mínima" no tiene nada de específico de un lavavajillas. Sirve igual para una impresora 3D (detectar fin de impresión por caída de consumo del calefactor de cama), para un cargador de auto eléctrico o para una bomba de agua que no debería estar funcionando de noche. Los tres números cambian; la estructura no.
Estimar el tiempo restante. Con varias curvas registradas del mismo programa puedes calcular en qué fase está la máquina comparando el consumo acumulado del ciclo actual contra el promedio histórico. No es exacto, pero da un porcentaje de avance bastante mejor que nada.
Personalización para Chile
El proyecto completo se puede armar con lo que hay en el catálogo de MechatronicStore si tomas la ruta DIY, que es además la que resuelve el problema del límite de corriente:
- ESP32 DevKit V1. el microcontrolador que lee el medidor y publica los datos a Home Assistant por WiFi. Con ESPHome no hay que programar nada a mano.
- Módulo medidor PZEM-004T v3.0 con bobina 100 A. mide voltaje, corriente, potencia, energía acumulada, frecuencia y factor de potencia. La bobina toroidal abraza el cable de fase sin cortarlo.
- Fuente 5 V switching o cargador USB 5 V 1 A. para alimentar el ESP32.
- Caja plástica de montaje. obligatoria si el conjunto va cerca de la instalación de 220 V.
- Jumpers hembra hembra 20 cm. para el enlace serial entre el PZEM y el ESP32.
- Raspberry Pi 5 (o Pi 4). si todavía no tienes un servidor Home Assistant corriendo. Es la plataforma más común para HA en la casa.
Dos cosas del proyecto no salen de una tienda de electrónica y conviene tenerlo claro: el enchufe inteligente comercial con medición de la ruta A, que se compra en retail de domótica, y la instalación eléctrica si decides ir por un relé fijo en la línea en vez de un enchufe intermedio. eso es trabajo de electricista certificado, no un paso más del tutorial.
La ruta DIY completa, sin contar el servidor de Home Assistant, ronda los $45.000 CLP. Los precios y el stock exactos hay que confirmarlos en el catálogo al momento de comprar.
Un detalle eléctrico propio de Chile que conviene repetir: acá la red domiciliaria es de 220 V a 50 Hz. Los valores de potencia de este tutorial se trasladan tal cual, porque lo que mide el sensor son watts. Lo que cambia es la corriente: los mismos 2.048 W que en Europa a 230 V son 8,9 A, acá a 220 V son 9,3 A. Si estás justo en el límite de un dispositivo de 10 A, esa diferencia importa.
Recursos
- Tutorial original (alemán): Spülmaschine oder Waschmaschine fertig? Push Benachrichtigung mit Home Assistant und einer Shelly Steckdose. por Philipp Schweizer, raspberry.tips
- Documentación de notificaciones de Home Assistant: Companion App. Notifications
- Documentación del disparador
numeric_state: Automation Triggers. Numeric state - ESPHome (para la ruta DIY con ESP32 + PZEM-004T): Componente PZEM-004T v3
Versión chilena inspirada en el artículo de raspberry.tips, re angulada con una ruta DIY basada en ESP32 y componentes en stock local.




