Howto: Xiaomi vacuum zoned cleaning

Thank you! :beers:

This is my view, the basic controls and informations are on the card (the orange is the state icon) . The next card contains the zone switches and on the right side you can see the timed cleaning and timed zone cleaning control.

And this is my hadashboard view:

1 Like

@masterfink I really like your clean and simple vacuum lovelace setup. Can you share your settings?

I use the button-card for everything that you see in the screenshot, so you will need to have that installed for this to work. I utilize templates for the button-card in the lovelace.yaml file, which is the last section of code that I’ll post. The others are just horizontal stacks with button-card cards. At some point I’ll post my dotfiles online but here are the ones that you care about:

Vacuum with 3 buttons

cards:
  - color: 'rgba(0,0,0,0)'
    icon: 'mdi:power'
    tap_action:
      action: call-service
      service: input_boolean.turn_on
      service_data:
        entity_id: input_boolean.rover_cleaning
    template: mode
    type: 'custom:button-card'
  - entity: vacuum.xiaomi_vacuum_cleaner
    show_name: false
    show_state: true
    state:
      - color: 'rgb(20,20,20)'
        value: docked
      - color: 'rgb(200,0,0)'
        value: paused
      - color: 'rgb(255,0,0)'
        styles:
          card:
            - animation: blink 3s ease infinite
        value: error
      - color: 'rgb(200,100,0)'
        value: idle
      - color: 'rgb(0,200,50)'
        styles:
          card:
            - animation: blink 3s ease infinite
        value: cleaning
    tap_action:
      action: more-info
    template: switch
    type: 'custom:button-card'
  - color: 'rgba(0,0,0,0)'
    icon: 'mdi:cancel'
    size: 75%
    tap_action:
      action: call-service
      service: script.1559765640394
    template: mode
    type: 'custom:button-card'
type: horizontal-stack

Rooms selection

cards:
  - entity: input_boolean.vacuum_masterbed
    icon: 'mdi:hotel'
    name: Master Bed
    show_name: true
    template: mode
    type: 'custom:button-card'
  - entity: input_boolean.vacuum_masterbath
    icon: 'mdi:water-pump'
    name: Master Bath
    show_name: true
    template: mode
    type: 'custom:button-card'
  - entity: input_boolean.vacuum_family
    icon: 'mdi:television'
    name: Family Room
    show_name: true
    template: mode
    type: 'custom:button-card'
  - entity: input_boolean.vacuum_kitchen
    icon: 'mdi:food-fork-drink'
    name: Kitchen
    show_name: true
    template: mode
    type: 'custom:button-card'
  - entity: input_boolean.vacuum_dining
    icon: 'mdi:food'
    name: Dining Room
    show_name: true
    template: mode
    type: 'custom:button-card'
type: horizontal-stack

lovelace.yaml section

button_card_templates:
  mode:
    color_type: card
    hold_action:
      action: more-info
    show_name: false
    size: 80%
    state:
      - color: 'rgb(110,0,255)'
        styles: {}
        value: 'on'
    styles:
      card:
        - font-size: 14px
        - border-radius: 10px
        - filter: opacity(75%)

  switch:
    color: auto
    color_type: card
    hold_action:
      action: more-info
    size: 85%
    styles:
      card:
        - font-size: 14px
        - border-radius: 10px
        - filter: opacity(75%)
1 Like

I really like vacuum lovelace setup. Can you share your settings?

Any experience how all this works with 2 floors? Any point to even start this integration?

Can I have different named areas in upstairs, and then area called downstairs, and when i manually bring roborock to downstairs and start zoned cleaning there, it works? And when i bring it back upstairs and do zoned cleans there, the upstairs zones stil work? Should map saving be on or off?

Can i update to 3.3.9_001864 released in June?

Not possible, it’s only possible to save 1 map, the new model s6 can do that

Yes I know, it also cannot have named zones with predefined coordinates with home assistant integration, yet it is possible.

i think, when a map is created/saved, doesnt mather, its imossible to do a zone on another floor, becuase map is invalid then
what is maybe possible , if you move the roborock upstairs, maybe put him on the same exact X Y coordinates on the other floor, then map should be OK normally , well, the X Y are

But do you need a saved map for zoned cleaning? I didn’t see it in any requirements. Cannot you just give raw coordinates and robo will blindly go there and clean within those coordinates what it can access?

saved map “xiaomi feature” is not needed, but there must be a last map available on your xiaomi, but it doesnt need to be “saved”

so when you do a clean start, it will make a map, then afterwards, NEVER do a clean start anymore, otherwise your last “good” map is lost, so if you want a full clean, make also a zone for your full map, than also use zone cleaning then

If i do zoned cleanup corner to corner whole downstairs, will it get lost when it sees a wall in different place than upstairs? Exterior walls are in same place

it will just create a new map, the wall is not an issue, it will just bump to it
you just need to place it on same exact X Y coordinates, then you should be fine

I have the card setup and the vacuum seems to go to the designated zones. However, once it reaches the zone its “finished” and returns back to the dock. It doesn’t start cleaning anything.

Anyone got any idea what this could be?

Configuration.yaml:

input_select:
  vacuum_room_select:
    name: Choose a room to clean
    options:
      - Kitchen
      - Printer
      - Livingroom
      - Hallway
      - Gamingroom
      - Bedroom

Scripts:

vacuum_livingroom:
      alias: "Vacuum the livingroom"
      sequence:
        - service: vacuum.send_command
          data:
            entity_id: vacuum.xiaomi_vacuum_cleaner
            command: app_zoned_clean
            params: [[23400,29000,30000,25000, 1]]
            
vacuum_kitchen:
      alias: "Vacuum the Kitchen"
      sequence:
        - service: vacuum.send_command
          data:
            entity_id: vacuum.xiaomi_vacuum_cleaner
            command: app_zoned_clean
            params: [[24000,31500,30000,28900, 1]]
            
vacuum_printer:
      alias: "Vacuum the Printer"
      sequence:
        - service: vacuum.send_command
          data:
            entity_id: vacuum.xiaomi_vacuum_cleaner
            command: app_zoned_clean
            params: [[24000,31500,27500,28900, 2]]   

vacuum_hallway:
      alias: "Vacuum the Hallway"
      sequence:
        - service: vacuum.send_command
          data:
            entity_id: vacuum.xiaomi_vacuum_cleaner
            command: app_zoned_clean
            params: [[29700,33000,31500,27900, 1]]    

vacuum_gamingroom:
      alias: "Vacuum the Gamingroom"
      sequence:
        - service: vacuum.send_command
          data:
            entity_id: vacuum.xiaomi_vacuum_cleaner
            command: app_zoned_clean
            params: [[31350,33000,36000,29550, 1]] 

vacuum_bedroom:
      alias: "Vacuum the Bedroom"
      sequence:
        - service: vacuum.send_command
          data:
            entity_id: vacuum.xiaomi_vacuum_cleaner
            command: app_zoned_clean
            params: [[30500,28000,35000,25000, 1]]            
            
vacuum_room:
    alias: "Start cleaning"
    sequence:
      - service: script.turn_on
        data_template:
          entity_id: >
            {% if is_state("input_select.vacuum_room_select", "Kitchen") %}
              script.vacuum_kitchen
            {% elif is_state("input_select.vacuum_room_select", "Livingroom") %}
              script.vacuum_livingroom
            {% elif is_state("input_select.vacuum_room_select", "Printer") %}
              script.vacuum_printer
            {% elif is_state("input_select.vacuum_room_select", "Hallway") %}
              script.vacuum_hallway
            {% elif is_state("input_select.vacuum_room_select", "Gamingroom") %}
              script.vacuum_gamingroom
            {% elif is_state("input_select.vacuum_room_select", "Bedroom") %}
              script.vacuum_bedroom
            {% endif %}

This is cool. Got my scheduled zoned clean-up up and running very quick (with help from the Flole app). Thank you.

It could be possible with scripts.
You could have one script for each floor with the following algorithm:

  • First put the vacuum always on the same corner to ensure the map when reset will always be the same.
  • Then call the service to do a standard clean. It will reset the map for the floor and start reconstruct a new one.
  • Wait around 20 seconds and call service to stop standard clean.
  • You can add after the service call to do zone cleaning.

Tips: try to order the zones consistently with the floor discovery. Or you can add some ‘to go’ instructions after the reset to help the vacuum construct the floor map.

Please check this topic:

Maybe @3_14 knows the answer. :slight_smile:
He made a great card for the zoned cleaning and it is working perfectly without interuptions.

Hi offered a solution, maybe it is working:

- service: vacuum.xiaomi_clean_zone
  data_template:
    entity_id: vacuum.xiaomi_vacuum
    repeats: '{{ states.input_number.vacuum_times.state | int }}'
    zone: 
      {% if is_state('input_boolean.vacuum_room_1', 'on') %}
      - [13954, 14901, 31754, 32751]
      {% endif %}
      {% if is_state('input_boolean.vacuum_room_2', 'on') %}
      - [23954, 24901, 32754, 32752]
      {% endif %}
      {% if is_state('input_boolean.vacuum_room_3', 'on') %}
      - [33954, 34901, 33754, 32753]
      {% endif %}

I’m trying to find coordinates with FloleVac but when I select Map it keeps loading forever with the message “Loading Map”. It’s able to fetch Clean Area, Battery level and Duration of the last cleaning, but no map shows up. Suggestions? I’ve tried different servers in the settings and I tried e-mailing the developer but he doesn’t respond.

KEY to the coordinate system. If the vacuum cleaner tells you that some parts are unreachable you have wrong coordinates. I prepared a quick picture for clarification. I hope it is right. It works for me.

You do not tell the vacuum cleaner any point coordinates, but what line (number) must not go

image

1 Like

Make sure you’ve input the correct Xiaomi Username and password, as well as the correct vacuum ip in the FloleVac settings to access the map functionality.