Como configurar o "Vacuum Card" para robôs aspiradores! Roborock, Mi Robot e Roomba! Escolha o cômodo com um click e visualize o mapa em tempo real!

Olá, venho com esse tutorial explicar como configurar o cartão dos robôs aspiradores! Não achei informações em português e as informações que já existiam eram desatualizadas ou não informavam o procedimento completo.

Antes disso, integre seu Roborock ao Home Assistant:

Com o Roborock já integrado, vamos ao tutorial:

O Vacuum Card ficará assim, com informações sobre o robô, os cômodos disponíveis para limpeza com um click e o mapa para visualizar a limpeza.

Antes de tudo temos que ter o HACS instalado no Home Assistant! Para isso podem seguir esse tutorial:

Agora já com o HACS instalado vamos até a aba Frontend para instalar o Vacuum card!

Na aba Frontend vamos no “+ EXPLORE & ADD REPOSITORIES” no canto direito abaixo!

2

Vamos procurar o Vaccum Card para instalar, escreva Vacuum Card.

Com ele aberto agora é só clicar para instalar o repositório!

6

Com o Vacuum Card instalado e o Home Assistant já reiniciado, vamos adicionar o cartão na nossa tela de “Visão Geral”. Vamos no menu no canto direito a cima e clicar em Configurar “interface” do usuário.

4

Clicando no “+ ADICIONAR CARTÃO” no canto direito em baixo.

1

Vamos adicionar o cartão clicando na opção Personalizado: Vacuum Card.

9

Com a tela para adicionar o cartão aberta temos que preencher com a entidade do nosso robô aspirador.

Vamos preencher certinho e clicar em salvar!

Com ele já adicionado vamos clicar em Editar!

Nas opções do cartão vamos clicar em Mostrar Editor de Código.

Com os códigos do cartão abertos vamos adicionar os códigos para temos os dados do robô aspirador e clique em Salvar.

stats:
  default:
    - attribute: filter_left
      unit: horas
      subtitle: Filtro
    - attribute: side_brush_left
      unit: horas
      subtitle: Escova lateral
    - attribute: main_brush_left
      unit: horas
      subtitle: Escova principal
    - attribute: sensor_dirty_left
      unit: horas
      subtitle: Sensores
  cleaning:
    - attribute: cleaned_area
      unit: m2
      subtitle: Cleaning area
    - attribute: cleaning_time
      unit: minutes
      subtitle: Cleaning time

Agora já temos os dados do nosso robô adicionados ao cartão!

Para darmos andamento no tutorial agora temos que criar os scripts para os comandos de cada cômodo da casa!

Como sabemos o robô aspirador separa a casa em cômodos, como podemos ver na foto abaixo, no caso temos 7 cômodos diferentes!

Para cada cômodo o robô separa um número, no meu caso são 7 cômodos, então são cômodos de 1 a 7. No seu caso podem ser mais ou menos cômodos, isso vária muito.

Não temos como saber qual cômodo é qual então temos que ir na tentativa e erro até descobrir, no meu caso o cômodo 2 é um quarto.

Devemos ir no config, no arquivo script.yaml e criar o seguinte script.

Criei um script com o nome de quarto, vc pode alterar para o nome do cômodo após descobrir qual é o cômodo para cada número.

Em params você vai alterar os número dos cômodos, cada número é um cômodo diferente.

Não esqueça de colocar a entidade correta do seu robô aspirador em entity_id.

quarto:
  sequence:
  - data:
      command: app_segment_clean
      params:
      - 2
    service: vacuum.send_command
    entity_id: vacuum.xiaomi_vacuum_cleaner

Com o script criado, agora é só salvar e reiniciar o Home Assistant.

Vai perceber que foi criado o script no Home Assistant na aba de scripts! Para testar o script e saber qual cômodo é o número que colocou é só clicar no ícone de play, assim consegue ver para aonde o robô irá!

Com todos os scripts prontos, agora é só terminar de configurar o cartão!

Agora vamos adicionar mais um código para adicionar o script que criamos ao cartão do robô aspirador!

actions:
  - name: Quarto
    service: script.quarto
    icon: 'mdi:bed-empty'

Em name vamos colocar o nome do cômodo que queremos que apareça quando colocamos o mouse em cima do ícone.

Em Service vamos colocar o nome do script que criamos! Lembra que coloquei o nome do script de quarto? Então o nome do script é script.quarto

E em icon vamos colocar o ícone referente ao cômodo, se for um quarto podemos usar mid:bed ou mdi:bed-empty, para uma sala podemos usar mdi:sofa e para o banheiro (casa de banho) mid:toilet. Site com os icones: https://cdn.materialdesignicons.com/3.2.89/

Agora é só clicar em Salvar!

Clicando em cima do ícone o robô aspirador vai limpar o cômodo!

Gostaria de visualizar o mapa e observar em tempo real onde o seu robô aspirador se encontra?

Para ter o mapa é preciso instalar um componente pelo HACS!

Vá no HACS, em integrações.

Depois vá no menu no canto direito superior e vá em Custom Repositories.

Em Add custom repository URL coloque o endereço do github do repositório:
(https://github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor) e selecione “integration”, clique em ADD.

Vai ficar assim e reinicie o Home Assistant para a integração ser instalada.

Agora você precisa adicionar ao seu configuration.yaml o seguinte código para criar uma “câmera” do mapa do seu robô aspirador Roborock.

camera:
  - platform: xiaomi_cloud_map_extractor
    host: !secret xiaomi_vacuum_host
    token: !secret xiaomi_vacuum_token
    username: !secret xiaomi_cloud_username
    password: !secret xiaomi_cloud_password
    draw: ['all']
    attributes:
      - calibration_points 

Com tudo configurado corretamente vá até o cartão do seu robô aspirador e em Entity (Required) selecione a “câmera” criada com o mapa do seu Roborock!

É isso, espero que tenham gostado!
Um abraço!

Já colocou o seu Roborock em Português do Brasil? Ainda não? Clica aqui embaixo pra colocar:

10 Curtiram

Que belo tuturial… Obrigado.feito aqui.

1 Curtiu

Boas,
belo tutorial. Já implementei, mas não consigo limpar áreas.
O meu aspirador é o STYJ02YM da Xiaomi sem alterações ao firmware. Se conseguirem ajudar agradeço.

Bom tutorial. Essa do mapa é o que me está a faltar. Vou ter de fazer. Obrigado pela partilha.

1 Curtiu

Boa tarde.
Gostava de poder seleccionar as diversas divisões a aspirar de modo a que a limpeza fosse despoletada automáticamente logo que a casa estivesse desocupada. Acho que já vi algures qualquercoisa em python para construir a string com os codigos das divisões ( metodologia usada nos Roborock). Alguem já fez alguma coisa do género.
Cumprimentos,

MFM

@Marco_Moiron basta fazeres uma breve pesquisa no fórum para encontrar boas bases para fazer o que pretendes, podes usar este tópico e partir daí já tens uma boa base para depois criar um input_select com várias zonas de aspiração incluíndo uma zona da casa toda.

Caso não queiras modificar o firmware do teu aspirador… podes lêr este tópico é provável que tenha que se fazer alguns ajustes pois o tutorial já tem algum tempo, mas a base e a lógica passará por aí.

Obrigado pela rápida resposta.
Já tinha “virado” esses tópicos e pareceu-me que não tinham resposta ao meu problema.
Infelizmente ainda não há root (seguro) para o S5 Max (sigo o grupo no TG) … deve ser a única coisa com um FW original al cá em casa;-)
Já tenho, claro, o token é o card a funcionar e os IDs das divisões e, usando o Services, já testei dar comandos para limpeza de divisões individualmente. Já não pego no assunto há uns meses, mas tanto quanto me lembro, tenho que concatenar as strings dos IDs das divisões numa única para poder dar comando de limpeza às mesmas.
Não sei se é possível fazê-lo usando templates (para ser sincero acho a sintaxe do jinja intragável) ou usando o “addon” “python scripts” (não estou certo do nome).
Claro que se houvesse alguém que o tivesse feito, aproveitaria. Vou investigar mais um pouco e quando chegar a conclusão, volto aqui.
Cumprimentos

1 Curtiu

Só para partilhar o que alcancei com o meu trabalho de alfaiate, corta e cose, e sem querer insultar os alfaiates, usando como fonte este forum consegui um script para aspirar duas divisões seleccionadas com dois boolean inputs. Mas como foi feito não é facil escalar para mais divisões. A dificuldade está em criar listas usando templates.

vacuum_selected:
  alias: Vacuum selected rooms
  sequence:
  - data_template:
      entity_id: vacuum.xiaomi
      segments: >-
        {% set do_wc_comum = is_state('input_boolean.aspiracao_wc_comum', 'on') %}
        {% set do_wc_quarto = is_state('input_boolean.aspiracao_wc_quarto', 'on') %}
        {% set wc_comum = 20 if do_wc_comum else '' %}
        {% set wc_quarto = 18 if do_wc_quarto else '' %}
        {% set x = ',' if do_wc_comum and do_wc_quarto else '' %}
        [{{wc_comum}}{{x}}{{wc_quarto}}]
      repeats: 1
    service: vacuum.vacuum_clean_segment

As usual, vou procurando e partilhando. Caso alguém tenha sugestões, eu agradeço.

Aparentemente o Robot não se importa se os segments tiverem uma virgula extra depois do último ID da divisão, por exemplo:

segments: [1,2,]

o que leva a que o script da seguinte solução, embora um pouco quick’n’dirty, funcione:

'1611704800394':
  alias: Aspirar
  sequence:
  - data_template:
      entity_id: vacuum.xiaomi_vacuum_cleaner
      segments: >-
        {% set do_wc_comum = is_state('input_boolean.aspiracao_wc_comum', 'on') %}
        {% set do_wc_quarto = is_state('input_boolean.aspiracao_wc_quarto', 'on') %}
        {% set do_cozinha = is_state('input_boolean.aspiracao_cozinha', 'on') %}
        {% set wc_comum = 20 if do_wc_comum else '' %}
        {% set x1 = ',' if do_wc_comum else '' %}
        {% set wc_quarto = 18 if do_wc_quarto else '' %}
        {% set x2 = ',' if do_wc_quarto else '' %}
        {% set cozinha = 23 if do_cozinha else '' %}
        {% set x3 = ',' if do_cozinha else '' %}
        [{{wc_comum}}{{x1}}{{wc_quarto}}{{x2}}{{cozinha}}{{x3}}]
    service: xiaomi_miio.vacuum_clean_segment
  mode: single

Cumprimentos

Boas. As automações que tinha para aspiração automática da casa quando ninguém está em casa têm estado desactivadas nos últimos meses por causa do confinamento. Sempre tive foi a necessidade de conseguir seleccionar diferentes divisões, sem haver um conjunto predefinido delas ou seja, poder escolher só mesmo as divisões que quero aspirar na altura ( sejam elas quais forem) e escolher as repetições necessárias para cada uma delas ( esta parte por vezes também dá jeito, embora não seja essencial).

Por isso criei um card um pouco ainda mal acabado onde usei sobretudo , input booleans e um flow no node red.

IMG_20210127_022015

Se achar que algo pode servir é só dizer.

Obrigado pelo apoio, Ricardo. Ainda não vai ser desta que entro no node red, mas está nos planos.
Para já, consegui construir a lista com os templates e ficou a funcionar, embora haja sempre espaço para melhorar, claro.
O Lovelace ficou assim:


Apenas com o essencial.

1 Curtiu

Já consegui adicionar tudo, mas o mapa não me aparece no cartão

Boas a todos, o meu aspirador é o STYJ02YM, segui este tutorial e já o tenho adicionado no HA, contudo também não estou a conseguir aspirar por zonas, criei o script mas quando corro o script obtenho o seguinte erro:

Sei que já faz algum tempo, mas queria algo exatamente como este card. Poderias compartilhar as configurações pf?

Peço desculpa mas só agora reparei no post. aqui vão alguns detalhes na forma de tópicos:

  • Usar App Mi Home (App Roborock não funciona)
  • Obter o token (link mais acima neste artigo)
  • Confguration.yaml:
vacuum:
  - platform: xiaomi_miio
    host: 192.168.1.153
    token: 6242XXXXXXXXXX436c31537a5a337274


  • Instalar o HACS:
  • Instalar o Cloud Map Extractor com o HACS:
  • Instalar o Vacuum Card no HACS
  • Quanto ao Cloud Map Extractor tenho esta configuração:
camera:
  - platform: xiaomi_cloud_map_extractor
    host: !secret xiaomi_vacuum_host
    token: !secret xiaomi_vacuum_token
    username: !secret xiaomi_cloud_username
    password: !secret xiaomi_cloud_password
#    draw: ['all']
    auto_update: true
    scan_interval: 10
    attributes:
      - calibration_points
    map_transformation:
      trim:
        top: 23
        bottom: 23
        left: 25
        right: 23
    colors:
      color_path: [255, 255, 255]
      color_predicted_path: [0, 0, 0]
    draw:
      - charger
      - path
      - goto_path
      - predicted_path
      - vacuum_position
#      - zones
#      - no_go_zones
#      - virtual_walls
#      - no_mopping_zones`

O trim é para apagar a parte inútil em redor do mapa. Ficou assim:

  • Para despoletar a limpeza por zonas:
    usando input booleans e templates nos scripts:
'1611704800394':
  alias: Aspirar
  sequence:
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.limpeza_imediata
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.limpeza_diferida
  - data_template:
      entity_id: vacuum.roborock
      segments: '{% set do_wc_comum = is_state(''input_boolean.selecao_aspiracao_wc_comum'',''on'')
        %} {% set do_wc_quarto = is_state(''input_boolean.selecao_aspiracao_wc_quarto'',
        ''on'') %} {% set do_cozinha = is_state(''input_boolean.selecao_aspiracao_cozinha'',
        ''on'') %} {% set do_sala = is_state(''input_boolean.selecao_aspiracao_sala'',
        ''on'') %} {% set do_quarto = is_state(''input_boolean.selecao_aspiracao_quarto'',
        ''on'') %} {% set do_quarto_s = is_state(''input_boolean.selecao_aspiracao_quarto_s'',
        ''on'') %} {% set do_escritorio = is_state(''input_boolean.selecao_aspiracao_escritorio'',
        ''on'')%} {% set do_entrada = is_state(''input_boolean.selecao_aspiracao_entrada'',''on'')
        %} {% set do_corredor = is_state(''input_boolean.selecao_aspiracao_corredor'',
        ''on'') %} {% set wc_comum = 22 if do_wc_comum else '''' %} {% set x1 = '',''
        if do_wc_comum else'''' %} {% set wc_quarto = 23 if do_wc_quarto else ''''
        %} {% set x2 = '','' if do_wc_quarto else '''' %} {% set cozinha = 16 if do_cozinha
        else '''' %} {% set x3 = '','' if do_cozinha else '''' %} {% set sala = 18
        if do_sala else '''' %} {% set x4 = '','' if do_sala else '''' %} {% set quarto
        = 24 if do_quarto else ''''%} {% set x5 = '','' if do_quarto else '''' %}
        {% set quarto_s = 17 if do_quarto_s else '''' %} {% set x6 =
        '','' if do_quarto_s else ''''%} {% set escritorio = 20 if do_escritorio
        else '''' %} {% set x7 = '','' if do_escritorio else '''' %} {% set entrada
        = 19 if do_entrada else '''' %} {% set x8 = '','' if do_entrada else ''''
        %} {% set corredor = 21 if do_corredor else '''' %} {% set x9 = '','' if do_corredor
        else '''' %} [{{wc_comum}}{{x1}}{{wc_quarto}}{{x2}}{{cozinha}}{{x3}}{{sala}}{{x4}}{{quarto}}{{x5}}{{quarto_s}}{{x6}}{{escritorio}}{{x7}}{{entrada}}{{x8}}{{corredor}}{{x9}}]'
    service: xiaomi_miio.vacuum_clean_segment
  mode: single
limpeza_dupla_cozinha:
  alias: 'Limpeza Dupla Cozinha '
  sequence:
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - service: xiaomi_miio.vacuum_clean_zone
    data:
      zone:
      - - 21490
        - 25043
        - 27140
        - 29493
      - - 22347
        - 23010
        - 27047
        - 29510
      repeats: 1
    target:
      entity_id:
      - vacuum.roborock
  - service: vacuum.set_fan_speed
    data:
      fan_speed: Gentle
    target:
      entity_id:
      - vacuum.roborock
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.limpeza_dupla_cozinha
  - wait_template: '{{ is_state(''sensor.vacuum_status'', ''Charging'')}}'
    timeout: '2:00:00'
  - service: vacuum.set_fan_speed
    target:
      entity_id:
      - vacuum.roborock
    data:
      fan_speed: Auto
  mode: single

Na parte final está também o script para fazer a limpeza cruzada (as coordenadas definem duas areas rectangulares: uma “horizontal” e outra “vertical”. Assim conseguimos forçar o varrimento cruzado). Para saber as coordenadas há um truque na app android FloleVac (seleccionar map - zoned cleanup - selecionar a zona - carregar longo em cleanup e as coordenadas ficam copiadas para o Clipboard).

Cumprimentos,

Marco

1 Curtiu

Obrigado pela resposta … principalmente pela dica do app FloleVac!! :+1:t2:


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


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