Blog, Domótica

Home Assistant: Mis automatizaciones del lavadero

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 secados
  • counter.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: singleLenguaje 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: singleLenguaje 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: singleLenguaje 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: singleLenguaje 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: singleLenguaje 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: singleLenguaje 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: singleLenguaje 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.

Deja una respuesta

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

Información básica sobre protección de datos Ver más

  • Responsable: David Marín Carreño.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Digital Ocean que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.