Automação para limpar o "bin" do Aspirador?

Olá a todos.

Estou no processo de migrar todas as minhas automações para o node-red e quero implementar um flow que envie o Roborock para a zona do caixote do lixo quando um X número de metros quadrados foi limpo.

A minha ideia era comparar a área total limpa antes de aspirar com a nova área total limpa depois de concluída a limpeza da casa. Conceptualmente é o que me faz mais sentido mas, na prática, não sei como implementar.

O que sugerem?

1 Like

Boas .
Tenho isso feito , mas em yaml. De qualquer maneira o conceito é simples. Para começar envio a área total para um input-number , depois tenho um sensor template que está sempre a comparar a diferença desse input number para a área total actual. Por fim tenho um script em que quando essa diferença for maior que 200, e quando alguém chegar a casa ou se estiver alguém envia para o lado do caixote e anuncia nos media player para despejar. Por fim volta para a base e a última acção do script é enviar outra vez o valor actual da área total limpa para o input-number ficando o sensor template outra vez a 0.

Em node red , acho que o problema é guardar valores que não desapareçam depois de um restart. Mas se usar só o input-number do HA e resto fazer lá, também deve dar concerteza.

Obrigado pela dica.
Já agora, dá para partilhar o código yaml?
Eu tinha isso a funcionar por um input_bool, que quando a área de limpeza era >70 ficava verdadeiro e uma automação que na mudança de estado “cleaning->returning to the dock” mandava o roborock para o caixote do lixo, mas quando a casa era limpa por zonas, o input_bool nunca saia do false.

Sim concerteza, logo já coloco aqui isso.

sensor:
    vacuum_area_limpeza_total:
        friendly_name: Área Total Aspirada
        value_template: '{{ states.vacuum.xiaomi_vacuum_cleaner.attributes.total_cleaned_area }}'
        unit_of_measurement: 'm ²'


    m2_lixo:
      friendly_name: "nivel deposito de lixo"
      value_template: >
     
         {%- if ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int == 200 %}
           100
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 180 %}
           90
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 160 %}
           80
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 140 %}
           70
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 120 %}
           60
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 100 %}
           50
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 80 %}
           40
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 60 %}
           30
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 40 %}
           20
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 20 %}
           10
         {% elif ((float(states.sensor.vacuum_area_limpeza_total.state) - float(states.input_number.m2_vazio.state))) | int >= 0 %}
           0
         {% else %}
         {% endif %}
      unit_of_measurement: '%'

#### inicio peretence ao automatismo de medir m2 para achar balde cheio
    
input_number:
  m2_vazio:
    name: m2 vazio
    mode: box
    min: 0
    max: 999999999


automation:

  - alias: activar despejar lixo
    trigger:
      - platform: state
        entity_id: person.ricardo_costa
        to: home
    condition:
      condition: and
      conditions:
      - condition: template
        value_template: "{{ states.sensor.m2_lixo.state >= '90' }}"
    action:             
      - delay: 600
      - service: script.turn_on
        data:
          entity_id: script.despejar_lixo



script:

  despejar_lixo:
    sequence:
      # ir para a frente do caixote do lixo
      - service: vacuum.send_command
        data:
          entity_id: vacuum.xiaomi_vacuum_cleaner
          command: app_goto_target
          params: [17900,26350]
      #Wait untill done
      - wait_template: "{{ states.vacuum.xiaomi_vacuum_cleaner.attributes.status == 'Idle'}}"
      - service: notify.alexa_media
        data_template:
           target: 'media_player.echo_dot_de_ricardo'
           data:
             type: announce
           message: "<voice name='Ines'><lang xml:lang='pt-PT'> Despejar lixo do panquéca !</lang></voice>"
      - delay: '00:00:30'
      #regressar à base
      - service: vacuum.return_to_base
        data:
          entity_id: vacuum.xiaomi_vacuum_cleaner
      - service: input_number.set_value
        data_template:
          entity_id: input_number.m2_vazio
          value: "{{ states('sensor.vacuum_area_limpeza_total') }}"

@maskiopt

Bem acho que não me esqueci de nada. Os dois sensores podem ser simplificados, na verdade o primeiro só serve para tirar o atributo do aspirador e torná-lo num sensor.

Para o sensor m2 lixo começar a contar é preciso ou activar o script e ele correr completamente ou colocar à mão o valor actual da arêa total limpa no input_number.

qualquer duvida é só apitar.

Obrigado pela partilha, dá para perceber a lógica que usas perfeitamente, mas qual o porquê da diferença de 200% ser o 100% do sensor?
Isso quer dizer que o sensor dá o bin do lixo cheio a ± cada 200 m^2 aspirados, ou não?

Sim 200m2 é no meu caso o 100%. Mas isso é ir vendo o que se adequa ao teu caso.

Boa, obrigado pelas dicas, vou implementar o input number no HA.
A automação que atualiza o input number quando o roborock vai para a dock e o script foi tentar fazer no node-red


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade