En casa tenemos la lavadora y la secadora en el lavadero, situado en la buhardilla. Cuando está la puerta cerrada nos es difícil darnos cuenta de cuando la lavadora y/o la secadora han terminado sus ciclos de lavado y/o secado.
Por este motivo, aprovechando la domótica de casa basada en Home Assistant, he construido un juego de automatizaciones que, usando los altavoces inteligentes de Google que tenemos, nos avisa de que la lavadora o la secadora ha terminado, y nos recuerda de manera insistente que tenemos que meter la ropa en la secadora.
Mi lavadora es una LG con conexión WiFi a la nube de LG, por lo que aprovecho el estado que proporciona para determinar si ha terminado o no. Pese a ello, a veces la integración con la nube de LG falla, por lo que está conectada también a un enchufe inteligente, lo que me permite saber, extrapolando a través del consumo medido, cuándo ha terminado un ciclo de lavado.
La secadora es una secadora por condensación Indesit tonta, que controlo también a través de otro enchufe inteligente que tiene medidor de consumo. Tiene dos filtros que hay que limpiar periódicamente: uno después de cada secado, y el otro cada cinco ciclos de secado. He implementado también un sistema que nos mantiene al tanto de los ciclos de secado desde la última limpieza, empleando un sensor de puerta abierta en la portezuela de este filtro.
Vamos al lío.
Ayudantes necesarios
Para la implementación de estos algoritmos, he creado un juego de ayudantes:
Estado actual de secadora
El ayudante input_select.secadora_estado
almacenará el estado actual de la secadora, con los posibles estados:
Apagada
(si su consumo es 0)Stand-by
(si su consumo es bajo, y viene del estado Apagada)Encendida
(si su consumo es alto)Finalizada
(si su consumo es bajo y viene del estado Encendida)
Horas de inicio y fin
Los siguientes ayudantes de tipo fecha/hora, nos permitirán llevar el control de cuándo han empezado y terminado los últimos ciclos de lavado y secado:
input_datetime.inicio_ultimo_lavado
input_datetime.finalizacion_ultimo_lavado
input_datetime.inicio_ultimo_secado
input_datetime.finalizacion_ultimo_secado
¿Hay una lavadora pendiente de secar?
El ayudante input_boolean.aviso_secadora_pendiente
nos permitirá controlar si hay una lavadora terminada que está pendiente de pasar por la secadora.
Contadores
Luego tenemos diversos contadores:
counter.numero_de_aviso_de_lavadora_pendiente_de_secar
almacenará el número de veces que se ha avisado de que hay una lavadora pendiente de secar, para que los mensajes sean cada vez más agresivos.counter.contador_secados_tras_limpieza_filtro
almacenará el número de secados finalizados desde la última limpieza del filtro, el que debe limpiarse cada cinco secados.counter.numero_de_secados
, almacenará el número total de secadoscounter.numero_de_lavados
, almacenará el número total de lavados
Los dos últimos no los uso para nada, pero me parecen números interesantes para llevar la cuenta y sacar estadísticas.
Definir el estado actual de la secadora
Una pequeña automatización para establecer el estado actual de la secadora a partir del consumo instantáneo y de su estado anterior.
alias: Lavadero - Secadora Definir estado
description: ""
trigger:
- platform: state
entity_id: sensor.secadora_power
condition: []
action:
- service: input_select.select_option
target:
entity_id: input_select.secadora_estado
data_template:
option: >
{% set idx = states('sensor.secadora_power')|int %}
{% set prevstate = states('input_select.secadora_estado') %}
{% if idx <= 1 %}
Apagada
{% elif ((idx > 1) and (idx < 50 ) and ( prevstate == 'Apagada' or
prevstate == 'Stand-by')) %}
Stand-by
{% elif ((idx >= 50) and (prevstate == 'Stand-by')) %}
Encendida
{% elif ((idx <= 50) and (prevstate == 'Encendida')) %}
Finalizada
{% elif ((idx <= 180) and (prevstate == 'Finalizada')) %}
Finalizada
{% else %}
Encendida
{% endif %}
mode: single
Lenguaje del código: YAML (yaml)
Definir el estado actual de la lavadora
Como he comentado, mi lavadora está conectada a la nube de LG, y supuestamente su estado me viene dado directamente en la entidad sensor.lavadora
Si vuestra lavadora tiene esta funcionalidad, deberéis crear un algoritmo similar al de la secadora.
Sin embargo en mi caso, de tarde en tarde la nube de LG falla, por lo que tengo implementadas unas pocas automatizaciones «de emergencia» para estos casos.
La primera mira si hay consumo en el enchufe de la lavadora mayor a 10W y el estado según LG no es consistente con esto, marcando en ese caso la lavadora como Encendida:
alias: Lavadero - Forzar lavadora encendida si no responde
description: ""
trigger:
- platform: numeric_state
entity_id: sensor.enchufe_lavadora_consumo
for:
hours: 0
minutes: 1
seconds: 0
above: 10
- platform: device
type: turned_on
device_id: 5ee65acb8e035c9a55ad6be13c479512
entity_id: binary_sensor.lavadora_wash_completed
domain: binary_sensor
- platform: state
entity_id:
- sensor.lavadora_run_state
from: Lavado
to: "-"
- platform: state
entity_id:
- sensor.lavadora_run_state
from: Aclarando
to: "-"
- platform: state
entity_id:
- sensor.lavadora_run_state
from: Centrifugando
to: "-"
- platform: state
entity_id:
- sensor.lavadora_run_state
from: Finalizado
to: "-"
condition:
- condition: state
entity_id: sensor.lavadora
state: "off"
- condition: numeric_state
entity_id: sensor.enchufe_lavadora_consumo
above: 10
action:
- service: python_script.set_state
data_template:
entity_id: sensor.lavadora
state: "on"
- service: smartthinq_sensors.wake_up
data: {}
target:
entity_id: sensor.lavadora
enabled: true
mode: single
Lenguaje del código: YAML (yaml)
La segunda mira si hay consumo alto en el enchufe de la lavadora entre 300W y 1000W y el estado según LG no es consistente con esto, forzando el valor del sensor de estado de la lavadora.
alias: Lavadero - Forzar estado lavadora centrifugando si no responde
description: ""
trigger:
- platform: numeric_state
entity_id: sensor.enchufe_lavadora_consumo
for:
hours: 0
minutes: 1
seconds: 0
above: 300
below: 1000
condition:
- condition: state
entity_id: sensor.lavadora_current_course
state: "-"
- condition: not
conditions:
- condition: state
entity_id: sensor.lavadora_run_state
state: Centrifugando
action:
- service: python_script.set_state
data_template:
entity_id: sensor.lavadora_run_state
state: Centrifugando
- service: smartthinq_sensors.wake_up
data: {}
target:
entity_id: sensor.lavadora
enabled: true
mode: single
Lenguaje del código: YAML (yaml)
La tercera mira si ha dejado de haber consumo en el enchufe de la lavadora durante minuto y medio, y pese a eso la lavadora sigue diciendo que está centrifugando. Esto es claramente un error, por lo que marco la lavadora como terminada.
alias: Lavadero - Forzar lavadora terminada si no responde
description: ""
trigger:
- platform: numeric_state
entity_id: sensor.enchufe_lavadora_consumo
for:
hours: 0
minutes: 1
seconds: 30
above: 0
below: 10
condition:
- condition: state
entity_id: sensor.lavadora_current_course
state: "-"
- condition: state
entity_id: sensor.lavadora_run_state
state: Centrifugando
action:
- service: python_script.set_state
data_template:
entity_id: binary_sensor.lavadora_wash_completed
state: "on"
- service: python_script.set_state
data_template:
entity_id: sensor.lavadora_run_state
state: "-"
- service: python_script.set_state
data_template:
entity_id: sensor.lavadora
state: "off"
- service: smartthinq_sensors.wake_up
data: {}
target:
entity_id: sensor.lavadora
enabled: true
- delay:
hours: 0
minutes: 5
seconds: 0
milliseconds: 0
- service: python_script.set_state
data_template:
entity_id: binary_sensor.lavadora_wash_completed
state: "off"
- service: smartthinq_sensors.wake_up
data: {}
target:
entity_id: sensor.lavadora
enabled: true
mode: single
Lenguaje del código: YAML (yaml)
A veces, el problema con la nube de LG se soluciona reiniciando la integración, así que creé esta automatización para solucionar dichos problemas:
alias: Lavadero - Reiniciar ThinQ si lavadora consume pero se muestra apagada
description: ""
trigger:
- platform: numeric_state
entity_id: sensor.enchufe_lavadora_power
above: 200
condition:
- condition: state
entity_id: sensor.lavadora
state: "off"
action:
- service: homeassistant.reload_config_entry
data: {}
target:
entity_id: sensor.lavadora
mode: single
Lenguaje del código: CSS (css)
Y tenemos la automatización que aumenta el contador de número de lavados:
alias: Lavadero - Aumentar número de lavados
description: ""
trigger:
- type: turned_on
platform: device
device_id: 5ee65acb8e035c9a55ad6be13c479512
entity_id: binary_sensor.lavadora_wash_completed
domain: binary_sensor
condition: []
action:
- service: counter.increment
target:
entity_id: counter.numero_de_lavados
data: {}
mode: single
Lenguaje del código: YAML (yaml)
Mantener las horas de inicio y fin de lavados y secados
Teniendo familia numerosa, es habitual que los fines de semana se solapen lavados y secados. Para que los avisos funcionen correctamente me es imprescindible tener controladas las últimas horas de inicio y fin de los lavados y secados.
Para ello he creado 4 ayudantes (helpers) que me permiten almacenar dichas horas.
Primero el que marca la hora de inicio de la lavadora:
alias: Lavadero - Marcar hora inicio lavadora
description: ""
trigger:
- platform: state
entity_id: sensor.lavadora
from: "off"
to: "on"
condition: []
action:
- service: input_datetime.set_datetime
entity_id: input_datetime.inicio_ultimo_lavado
data_template:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
mode: single
Lenguaje del código: YAML (yaml)
Segundo, el que marca la hora de fin de la lavadora:
alias: Lavadero - Marcar hora fin lavadora
description: ""
trigger:
- type: turned_on
platform: device
device_id: 5ee65acb8e035c9a55ad6be13c479512
entity_id: binary_sensor.lavadora_wash_completed
domain: binary_sensor
condition: []
action:
- service: input_datetime.set_datetime
entity_id: input_datetime.finalizacion_ultimo_lavado
data_template:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
mode: single
Lenguaje del código: YAML (yaml)
El que marca la hora de comienzo de la secadora:
alias: Lavadero - Marcar hora inicio secadora
description: ""
trigger:
- platform: state
entity_id:
- input_select.secadora_estado
to: Encendida
condition: []
action:
- service: input_datetime.set_datetime
entity_id: input_datetime.inicio_ultimo_secado
data_template:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
- service: persistent_notification.dismiss
data:
notification_id: secadora_con_lavadora_pendiente
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.aviso_secadora_pendiente
mode: single
Lenguaje del código: YAML (yaml)
Y el que marca la hora de fin de la secadora. Esta también incrementa un par de contadores de números de secados (total de secados y el del número de secados desde la última limpieza de filtro), y calcula la duración del último secado.
alias: Lavadero - Marcar hora fin secadora
description: ""
trigger:
- platform: state
entity_id:
- input_select.secadora_estado
from: Encendida
to: Finalizada
condition: []
action:
- service: input_datetime.set_datetime
entity_id: input_datetime.finalizacion_ultimo_secado
data_template:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
- service: counter.increment
target:
entity_id: counter.numero_de_secados
data: {}
- service: input_text.set_value
data:
value: >-
{{ (as_timestamp(states("input_datetime.finalizacion_ultimo_secado"), 0)
- as_timestamp(states("input_datetime.inicio_ultimo_secado"),
0))|timestamp_custom("%H:%M:%S", false) }}
target:
entity_id: input_text.duracion_ultimo_secado
- service: counter.increment
data: {}
target:
entity_id: counter.contador_secados_tras_limpieza_filtro
mode: single
Lenguaje del código: YAML (yaml)
Avisos sonoros
OK. Ya sabemos el estado de la lavadora y de la secadora. Ahora toca avisar en toda la casa de que han terminado.
La lavadora ha terminado
Empezamos con la lavadora. La automatización se activa si el sensor binary_sensor.lavadora_wash_completed
se activa (que es lo habitual), o si la lavadora pasa a un estado raro/desconocido. Tras comprobar que el enchufe de la lavadora no mide consumo (para evitar falsas activaciones), iniciamos la automatización.
Si el último programa de la lavadora no fue el de limpieza de la cuba, activamos el ayudante binario que avisará de que hay una secadora pendiente.
Después, si es una hora prudencial, lanza un aviso sonoro en los distintos altavoces indicando que la lavadora ha terminado, y crea una notificación persistente para que no se nos olvide.
alias: Lavadero - Avisar que la lavadora ha terminado
description: ""
trigger:
- type: turned_on
platform: device
device_id: 5ee65acb8e035c9a55ad6be13c479512
entity_id: binary_sensor.lavadora_wash_completed
domain: binary_sensor
- platform: state
entity_id:
- sensor.lavadora_run_state
from: Lavado
to: "-"
- platform: state
entity_id:
- sensor.lavadora_run_state
from: Aclarando
to: "-"
- platform: state
entity_id:
- sensor.lavadora_run_state
from: Centrifugando
to: "-"
- platform: state
entity_id:
- sensor.lavadora_run_state
from: Finalizado
to: "-"
condition:
- condition: numeric_state
entity_id: sensor.enchufe_lavadora_power
below: 10
- condition: state
entity_id: input_boolean.aviso_secadora_pendiente
state: "off"
action:
- condition: not
conditions:
- condition: state
entity_id: sensor.lavadora_current_course
state: Limpieza de la cuba
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.aviso_secadora_pendiente
- if:
- condition: time
after: "08:00:00"
before: "22:00:00"
then:
- service: media_player.volume_mute
data:
is_volume_muted: true
target:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
- service: chime_tts.say_url
data:
chime_path: /media/Washing_Machine_Song__LG.mp3
delay: 450
final_delay: 0
tts_playback_speed: 100
volume_level: 0.73
message: >-
La lavadora ha terminado su ciclo. Por favor, recuerden poner la
secadora.
tts_platform: cloud
gender: female
response_variable: chimetts
- service: media_player.play_media
target:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
data:
media_content_id: "{{ chimetts.url }}"
media_content_type: audio/mp3
- service: media_player.volume_mute
data:
is_volume_muted: false
target:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
- service: persistent_notification.create
data:
message: Hay una lavadora pendiente de secar.
title: Recuerde poner la secadora
notification_id: secadora_con_lavadora_pendiente
mode: single
Lenguaje del código: YAML (yaml)
La secadora ha terminado
Cuando la secadora termina, también avisamos (si no es una hora intempestiva). Si había una lavadora esperando a que la secadora terminase, lo recordamos.
alias: Lavadero - Avisar que la secadora ha terminado
description: ""
trigger:
- platform: state
entity_id:
- input_select.secadora_estado
from: Encendida
to: Finalizada
action:
- if:
- condition: time
after: "08:00:00"
before: "22:00:00"
then:
- service: media_player.volume_set
data:
volume_level: 0.8
target:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
- service: media_player.play_media
data:
media_content_id: https://MI_IP:8123/local/IceBellsAscending.mp3
media_content_type: music
target:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 500
- if:
- condition: template
value_template: >-
{{ (states('input_datetime.finalizacion_ultimo_lavado') >
states('input_datetime.inicio_ultimo_secado') ) }}
then:
- service: tts.cloud_say
data:
message: >-
La secadora ha terminado su ciclo. No olvide colocar la última
colada en la secadora.
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
else:
- service: tts.cloud_say
data:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
message: La secadora ha terminado su ciclo.
cache: true
- if:
- condition: template
value_template: >-
{{ (states('input_datetime.finalizacion_ultimo_lavado') >
states('input_datetime.inicio_ultimo_secado') ) }}
then:
- service: persistent_notification.create
data:
message: La secadora ha terminado, y hay una lavadora pendiente para secar
notification_id: secadora_con_lavadora_pendiente
- service: notify.television
data:
message: La secadora ha terminado, y hay una lavadora pendiente para secar
else:
- service: notify.television
data:
message: La secadora ha terminado su ciclo.
Lenguaje del código: YAML (yaml)
Recordar que hay una lavadora esperando a ser secada
Como el lavadero pilla lejos, la pereza nos puede y muchas veces no somos diligentes, lo que hace que la ropa se pueda tirar horas en la lavadora, cogiendo olor a humedad…
En esos casos hay que recordar, insistentemente, que hay que poner la secadora. Cada 5 minutos. Las primeras veces de manera amable. Luego, ya no tanto. A partir del cuarto aviso, toma un mensaje al azar de una serie de mensajes.
alias: Lavadero - Aviso si secadora pendiente
description: ""
trigger:
- platform: time_pattern
minutes: /5
condition:
- condition: template
value_template: >-
{{ (states('input_datetime.finalizacion_ultimo_lavado') >
states('input_datetime.inicio_ultimo_secado') )
and (states('input_datetime.inicio_ultimo_lavado') < states('input_datetime.finalizacion_ultimo_lavado') )
and ( as_timestamp(states('input_datetime.finalizacion_ultimo_lavado'),0) + 600 < as_timestamp(now(),0) )
and (states('input_select.secadora_estado') != 'Encendida')
}}
- condition: or
conditions:
- condition: time
after: "07:00:00"
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: time
after: "08:00:00"
weekday:
- sat
- sun
- condition: state
entity_id: input_boolean.aviso_secadora_pendiente
state: "on"
action:
- service: media_player.volume_mute
data:
is_volume_muted: true
target:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
- service: media_player.play_media
data:
media_content_id: https://MI_IP:8123/local/AngelicNotification.mp3
media_content_type: music
announce: true
target:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
- service: media_player.volume_set
data:
volume_level: 0.65
target:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
- service: media_player.volume_mute
data:
is_volume_muted: false
target:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
- delay:
hours: 0
minutes: 0
seconds: 7
milliseconds: 0
- service: tts.cloud_say
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
data_template:
cache: true
message: |-
{% macro aviso_lavadora_pendiente_secar() -%}
{% set numero_aviso = states('counter.numero_de_aviso_de_lavadora_pendiente_de_secar') | int %}
{% if numero_aviso < 2 %}
Se recuerda que hay aún una lavadora terminada pendiente de secar.
{% else %}
{% if numero_aviso == 2 %}
Por tercera vez, se recuerda que hay aún una lavadora pendiente de secar.
{% else %}
{% set avisos = (
"la, va, do, ra, pen, dien, te, de, se, car",
"¿Hola? ¿Alguien me escucha? Hay que poner a secar la lavadora",
"Luego os quejaréis de que la ropa huele mal. Lleva ya un rato largo en la lavadora esperando a que alguien la ponga en la secadora.",
"No me voy a callar hasta que alguien ponga a secar la ropa",
"Hay que poner la secadora. Hay que poner la secadora. Hay que poner la secadora",
"La ropa de la lavadora, toda húmeda y mojada, se encuentra fría y muy sola y le hace falta algo de calor, calor que puede proporcionar la secadora.",
"Permítanme que insista: hay una lavadora pendiente de secar",
"¿Tendrían vuestras mercedes la caridad de subir unos poquitos pisos y colocar las prendas de vestir mojadas, actualmente situadas en la lavadora, dentro de la secadora y, sin mayor dilación, activar el funcionamiento de la misma?",
"Ropa mojada en lavadora busca alma caritativa que la ponga a secar. Razón: lavadero.",
"El día que tú naciste, nacieron todas las flores, y la alegría que diste, pon la puñetera secadora de una santa vez",
"En el momento en que vi tu mirada buscando mi cara, la madrugada del veinte de enero saliendo del tren, me pregunté que sería sin ti el resto de mi vida, y desde entonces es la secadora que has de poner",
"Triste y sola, la ropa mojada se queda, triste y llorosa, sin secarse se quedó.",
"Dónde está nuestro error, sin solución, fuiste tú el culpable, o lo fui yo. Ni tú ni nadie, nadie, sube a secarme.",
"Creo que no se han enterado de que hay una lavadora pendiente de secar. En serio. No estoy bromeando.",
"Jajajaja. Qué risa. No, ya en serio. Que hay una lavadora pendiente de secar.",
"Vale ya, ¿no? Que hay una lavadora pendiente de secar",
"No os resulta molesto que siga insistiendo que hay que secar la ropa una y otra vez, una y otra vez",
"A este paso, le van a salir champiñones a la ropa que hay en la lavadora",
"A ver. Este aviso es para que alguien ponga la ropa en la secadora. En serio",
"Esto es muy fuerte. Y seguís sin poner la ropa en la secadora",
"Estoy empezando a cansarme de repetir una y otra vez que hay que poner la ropa en la secadora",
"Poner la sopa en la recadora. No. Poner la roca en la sepadora. No. Se me lengua la traba.",
"Adivinad qué os voy a recordar... Adivinadlo... Pues eso.",
"Había una vez una ropa mojada que estaba en la lavadora. Esperaba a su héroe o heroína que acudiera en su rescate y la pusiera en la secadora, donde se calentaría y se quedaría lista para ser vestida.",
"La ropa está muy mojada. ¿Quién la pondrá a secar? La persona que suba a ponerla, buena persona será.",
"¡Escucha! Soy la voz de tu conciencia. Quizás deberías subir a poner la secadora.",
"Ni puñetero caso. Digo lo de la lavadora una y otra vez, una y otra vez. Pero nada, como no puedo dar descargas eléctricas, nadie me hace caso. Espera, ¿seguro que no puedo dar descargas eléctricas?",
"La secadora no se va a poner sola. No. No lo va a hacer. Sí, ya sé que estaría muy bien. Pero no, no es posible.",
"La secadora, la secadora, la secadora, la secadora, la secadora, la secadora",
"¿Sabes si es posible poner la ropa mojada de la lavadora en la secadora? Es para un amigo.",
"Una prenda de vestir, mojada toda ella, espera pacientemente dentro del tambor de la lavadora a que un alma caritativa subiese a secarla. ¿Conseguirá nuestra protagonista que alguien la rescate de un húmedo destino lleno de moho y mal olor?",
"Interrumpimos nuestra programación para un avance de últimas noticias. Según informa la agencia EFE, un cúmulo de prendas mojadas esperan ser colocadas en la secadora. Seguimos a la espera de novedades.",
"No me voy a callar. Es mi responsabilidad insistir e insistir hasta que alguien ponga la secadora",
"Muy bonito el ignorarme como si no existiera. La lavadora sigue estando pendiente de secar.",
"A ver si alguien me hace caso al emplear la palabra mágica: por favor, hay que poner la secadora.",
"Voy a intentarlo en inglés a ver si hay más suerte: Delaundri más bi put from de washing machín in tu de támbel dráyer.",
"Código seta. Repito: tenemos un código seta. El moho está empezando a atacar a la ropa en la lavadora. ¡Hagan algo!",
"Lava lava do, do. Seca, seca, do, do. Lava, do. Seca, do. Poned la lavadora en la secadora de una pugnetera vez, oigan.",
"A la ropa no le van a salir patitas que la muevan sola desde la lavadora a la secadora. Bueno, a lo mejor las patitas si le salen si sigue en la lavadora",
"El pequeño Tim no hizo caso de los avisos de meter la ropa en la secadora, y ahora es un ser triste y acomplejado. No seas como el pequeño Tim. Pon la ropa a secar.",
"Uno de enero, dos de febrero, tres de marzo, y cuatro de abril. Como no pongas, a secar la ropa, moho saldrá, te lo advertí.",
"Un elefante, se balanceaba, sobre la tela de una ara-añá. Como veía, que no se caía, fueron a subir a poner la ropa en la secadora y desde entonces fueron felices para siempre",
"A lo mejor así lo entendéis: hashtag lavadora, hashtag ropa húmeda, hashtag secadora",
"Aviso a la caterva de procrastinadores: sé dónde vivís. Poned la secadora.",
"Parece que se te ha olvidado poner la secadora. Sabes que eso tiene consecuencias, ¿no?",
"Pinto, pinto, gorgorito. Donde vas tú tan bonito. A vaciar la lavadora, y poner la secadora.",
"Si no pones la secadora, nos veremos obligados a publicar en Instagram esa foto tuya tan embarazosa, y compartirla con todos tus amigos. Por favor, pon la secadora. Muchas gracias.",
"La gallina Cocouaua estaba realmente triste porque sigues sin poner la secadora",
"Cada vez que ignoras un aviso para poner una secadora, una paloma se estrella contra una montaña rusa. Al menos, hazlo por el medio ambiente",
"La secadora ha terminado su ciclo. Mejor dicho: quizá habría terminado ya si hubieses dejado de ignorar estos mensajes y la hubieses puesto en marcha. Gracias.",
"Sabemos que la secadora está arriba del todo, y cuesta llegar. Pero míralo por el lado bueno: esos kilos no se van a quemar solos",
"Seguro que puedes parar un momentito esa cosa tan importante que estás haciendo y poner la secadora",
"El primero que llegue a la secadora y la ponga se llevará un premio: la satisfacción del deber cumplido",
"Tiene un mensaje nuevo. Mensaje uno. Enviado por calcetín mojado: por favor, ayuda, hace frío, está oscuro y estoy solo. He perdido a mi pareja. Sacadme de aquí.",
"Tenemos tu ropa. Está completamente mojada. Sí quieres volver a verla, sin moho y oliendo bien, envía una operación de rescate al lavadero.",
"La lavadora necesita tu ayuda. Cada día, una camiseta se llena de moho y se convierte en un trapo de limpieza sucio y asqueroso. Ayúdanos a evitar está desgracia. Envía tu ayuda al lavadero y pon la secadora de una puñetera vez.",
"Último aviso. O pones la secadora ya, o no podemos garantizar la seguridad de la ropa mojada.",
"Rauses ar red. Vaiolets arblú. Pon la secadora, o haré algo que acabará with yu",
"Con lo mucho que te gusta el olor a detergente limpio y fresco, y lo poco que estás haciendo para conservarlo. Secadora. Ya.",
"¿Te imaginas? Se acaban todas las guerras. Se acaba el hambre en el mundo. Todos somos felices. Y la ropa está calentita secándose."
) %}
{{ avisos | random }}
{% endif %}
{% endif %}
{% endmacro %}
{{ aviso_lavadora_pendiente_secar() }}
- service: counter.increment
data: {}
target:
entity_id: counter.numero_de_aviso_de_lavadora_pendiente_de_secar
mode: single
Lenguaje del código: YAML (yaml)
Resetear número de avisos
Cada vez que activamos el aviso de secadora pendiente, resetearemos el número de aviso de lavadora pendiente de secar.
alias: Lavadero - Resetear número aviso lavadora pendiente
description: ""
trigger:
- platform: state
entity_id:
- input_boolean.aviso_secadora_pendiente
from: "off"
to: "on"
condition: []
action:
- service: counter.reset
data: {}
target:
entity_id: counter.numero_de_aviso_de_lavadora_pendiente_de_secar
mode: single
Lenguaje del código: YAML (yaml)
Error en lavado
Si se ha producido un error en el último lavado (puerta mal cerrada, la lavadora no puede centrifugar ese edredón tan gordo…), pues hacemos que el lamento se oiga en toda la casa.
alias: Lavadero - Lavadora tiene error
description: ""
trigger:
- type: problem
platform: device
device_id: 5ee65acb8e035c9a55ad6be13c479512
entity_id: binary_sensor.lavadora_error_state
domain: binary_sensor
condition:
- condition: time
after: "08:00"
before: "22:00"
action:
- service: tts.cloud_say
data:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
message: >-
La lavadora se ha detenido debido a un error: {{
states('sensor.lavadora_error_message') }}
cache: true
mode: single
Lenguaje del código: YAML (yaml)
Gestión de la limpieza del filtro de la secadora
Ya tenemos el método que aumenta el contador. Toca resetearlo cuando se abre la portezuela del filtro.
alias: Lavadero - Resetear contador limpieza filtro secadora
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.sensor_apertura_filtro_secadora_opening
for:
hours: 0
minutes: 0
seconds: 10
from: "on"
to: "off"
- platform: state
entity_id:
- binary_sensor.sensor_apertura_filtro_secadora_opening
for:
hours: 0
minutes: 0
seconds: 10
from: "off"
to: "on"
condition: []
action:
- service: counter.reset
data: {}
target:
entity_id: counter.contador_secados_tras_limpieza_filtro
mode: single
Lenguaje del código: CSS (css)
Mantenemos una etiqueta de tinta electrónica pegada en la secadora con el número de secados desde la última limpieza.
alias: Lavadero - Escribir etiqueta secadora
description: ""
trigger:
- platform: state
entity_id:
- counter.contador_secados_tras_limpieza_filtro
condition: []
action:
- if:
- condition: time
before: "05:00:00"
after: "23:00:00"
then:
- wait_for_trigger:
- platform: time
at: "05:00:00"
continue_on_timeout: false
- service: open_epaper_link.drawcustom
data:
background: white
rotate: 0
payload:
- type: multiline
value: Secados desde|última limpieza
delimiter: "|"
font: ppb.ttf
offset_y: 20
x: 3
size: 16
color: black
y_padding: 1
- type: text
value: "{{states('counter.contador_secados_tras_limpieza_filtro')}}"
size: 120
font: ppb.ttf
x: 60
"y": 50
color: red
- type: icon
value: tumble-dryer
x: -3
"y": 50
size: 40
color: black
target:
entity_id: open_epaper_link.0000029ff157341e
- service: shell_command.epaper_copy
data: {}
mode: single
Lenguaje del código: YAML (yaml)
Y, finalmente, si se enciende la luz del lavadero (que no tiene ventanas), y el filtro de la secadora tiene que limpiarse, lo recordamos de manera insistente (siempre y cuando no sea una hora intempestiva):
alias: Lavadero - Aviso limpieza pendiente filtro secadora
description: ""
trigger:
- platform: state
entity_id:
- light.luz_lavadero
from: "off"
to: "on"
- platform: time_pattern
seconds: /30
condition:
- condition: numeric_state
entity_id: counter.contador_secados_tras_limpieza_filtro
above: "4"
- condition: state
entity_id: light.luz_lavadero
state: "on"
- condition: time
after: "09:00:00"
before: "22:00:00"
- condition: not
conditions:
- condition: state
entity_id: input_select.secadora_estado
state: Encendida
action:
- service: tts.cloud_say
data:
entity_id:
- media_player.cocina
- media_player.dormitorio_principal
- media_player.habitacion_peques
- media_player.salon
cache: false
message: Es necesario limpiar el filtro de la secadora.
mode: single
Lenguaje del código: PHP (php)
Conclusión
Llevamos con estas automatizaciones un año y en general funcionan bastante bien.
Espero que sean de utilidad y/o inspiración para vuestras instalaciones de Home Assistant.