Vacuum Interactive Map Card

I see that you have used “generate static config” button. Have you changed manually anything in yaml config of the card?

Yes. I did change a lot inside of yaml.

Ok, so you can just attach it to icons section:

type: custom:xiaomi-vacuum-map-card
map_source:
  camera: camera.roborockladenvorne_map
calibration_source:
  camera: true
entity: vacuum.roborockladenvorne
vacuum_platform: humbertogontijo/homeassistant-roborock
icons:
  - icon: mdi:play
    conditions:
      - entity: vacuum.roborockladenvorne
        value_not: cleaning
      - entity: vacuum.roborockladenvorne
        value_not: error
      - entity: vacuum.roborockladenvorne
        value_not: returning
    tooltip: Start
    tap_action:
      action: call-service
      service: vacuum.start
      service_data:
        entity_id: vacuum.roborockladenvorne
  - icon: mdi:pause
   # [...]
  - some more icon: points
  - type: menu
    menu_id: "room_1_mode_selector"
    entity: "select.vacuum_room_1_mode"
    available_values_attribute: "options"
    icon: "mdi:robot-vacuum"
    icon_mapping:
      'Mop': "mdi:water"
      'Vacuum': "mdi:vacuum"
      'Vacuum or mop': "mdi:vacuum-outline"
    tap_action:
      action: "call-service"
      service: "select.select_option"
      service_data:
          option: "[[value]]"
          entity_id: "[[entity_id]]"
tiles:
  - tile_id: status
   # [some info]
  - some more tile_ids:
map_modes:
  - name: Zone cleanup
   # [...]
  - name: Pin & Go
  # [...]
  - template: vacuum_clean_segment
 #[...]
additional_presets: []
title: vorne

Hmm. Somehow Im struggling here.

  - type: menu
    menu_id: fanspeed
    entity: vacuum.roborockladenvorne
    available_values_attribute: off, quiet, balanced, turbo, max, max_plus
    icon: mdi:robot-vacuum
    icon_mapping:
      off: mdi:fan-off
      quiet: mdi:fan-minus
      balanced: mdi:fan
      turbo: mdi:fan-speed-1
      max: mdi:fan-speed-2
      max_plus: mdi:fan-alert
    tap_action:
      action: call-service
      service: vacuum.set_fan_speed
      service_data:
        option: [[value]]
        entity_id: [[entity_id]]

No errors provided with this code, but my Menu isn’t shown.
I suppose the string for " available_values_attribute" isnt formatted properly.

Maybe it has to be something like this?

available_values_attribute: {{ states.vacuum.roborockladenvorne.attributes.fan_speed_list }}

But still no menu shown.

No, it should be:

available_values_attribute: fan_speed_list 

You can create a new card from the scratch and adjust its config - the menu should already be there.

Ah it looks like there is everything i need, to change this to my needs.
Sorry, I didnt realize the menu is integrated out of the box.
And thanks a lot for your help :o)

1 Like

Well, Im sorry, but Im still struggling.
With the fan speed menu I had no problems.
But is there a way to change the water box mode menu?

  - type: menu
    menu_id: water_box_mode
    icon_id: water_box_mode
    available_values_attribute: options
    icon: mdi:water
    icon_mapping:
      'off': mdi:water-remove
      mild: mdi:water-minus
      moderate: mdi:water
      intense: mdi:water-plus
      custom: mdi:water-sync
    tap_action:
      action: call-service
      service: select.select_option
      service_data:
        option: '[[value]]'
        entity_id: '[[entity_id]]'

I want to translate the shown menu items into german → off, moderate, mild, and so on.
And I want to hide the “custom” button.
Is there a way to do so?
Or do I have to create some menu like for the fan speed (which is way more code)?

Edit: For testing purposes I did rebuild the given “fan” menu for my waterboxmode.
This works - but isnt there an easy way?
The following code does exactly what I want - german description and missing custom mode (ignore silly icons and menuid please)

  - menu_id: wisch
    icon: mdi:water
    label: aus
    conditions:
      - entity: vacuum.roborockladenvorne
        attribute: waterBoxMode
        value: 200
    tooltip: Saugleistung ändern
    tap_action:
      action: call-service
      service: vacuum.send_command
      service_data:
        command: set_water_box_custom_mode
        params: 200
      target:
        entity_id: vacuum.roborockladenvorne
  - menu_id: wisch
    icon: mdi:water
    label: sanft
    conditions:
      - entity: vacuum.roborockladenvorne
        attribute: waterBoxMode
        value: 201
    tooltip: Saugleistung ändern
    tap_action:
      action: call-service
      service: vacuum.send_command
      service_data:
        command: set_water_box_custom_mode
        params: 201
      target:
        entity_id: vacuum.roborockladenvorne
  - menu_id: wisch
    icon: mdi:water
    label: mittel
    conditions:
      - entity: vacuum.roborockladenvorne
        attribute: waterBoxMode
        value: 202
    tooltip: Saugleistung ändern
    tap_action:
      action: call-service
      service: vacuum.send_command
      service_data:
        command: set_water_box_custom_mode
        params: 202
      target:
        entity_id: vacuum.roborockladenvorne
  - menu_id: wisch
    icon: mdi:water
    label: intensiv
    conditions:
      - entity: vacuum.roborockladenvorne
        attribute: waterBoxMode
        value: 203
    tooltip: Saugleistung ändern
    tap_action:
      action: call-service
      service: vacuum.send_command
      service_data:
        command: set_water_box_custom_mode
        params: 203
      target:
        entity_id: vacuum.roborockladenvorne
  - icon: mdi:waves
    conditions:
      - entity: vacuum.roborockladenvorne
        attribute: waterBoxMode
        value_not: 200
      - entity: vacuum.roborockladenvorne
        attribute: waterBoxMode
        value_not: 201
      - entity: vacuum.roborockladenvorne
        attribute: waterBoxMode
        value_not: 202
      - entity: vacuum.roborockladenvorne
        attribute: waterBoxMode
        value_not: 203

For changing labels for different values in menu you can use value_translation_keys option:

- type: menu
    menu_id: water_box_mode
    icon_id: water_box_mode
    available_values_attribute: options
    icon: mdi:water
    icon_mapping:
      'off': mdi:water-remove
      mild: mdi:water-minus
      moderate: mdi:water
      intense: mdi:water-plus
      custom: mdi:water-sync
    value_translation_keys:
      'off': Nope
      mild: Kinda
      moderate: It's something
      intense: Intensifies
      custom: PLZ don't use
    tap_action:
      action: call-service
      service: select.select_option
      service_data:
        option: '[[value]]'
        entity_id: '[[entity_id]]'

You can’t hide options when using config shown above.

This works - but isnt there an easy way?

The easy mode is presented above, but it has some limitations that can be bypassed using “advanced” mode (one used for fan).

Hi All,

I removed some obstacles in the Roborock app.But they are still on the map showing.
How can I remove those spots also on the map in HA?

You have to edit draw section, remove all value and add all possible ones except ones with ignored prefix

I have to do that in roborock app? If so I already did that. Removed all obstacles couple of days ago

Below the map in roborock app

Oh, you probably use Roborock integration. My instructions were applicable for Map Extractor. You have to look in documentation of Roborock integration, the card doesn’t modify the image

Yes. Use this integration:

So you have to ask creator of this integration, but as far as I know it’s not possible to adjust this behavior.

Heyhey
I managed to solve my first problem with your help :o) Thanks again for that.
Now I was able to remove some buttons on my dashboard, that did change cleaning settings (fan speed, mop mode and so on), because I no longer need them anymore.
I now wanted to adjust the Vacuum maps on my dashboard (4 pieces).
By adding horizontal and vertical stacks to put them in a 2x2 grid, I found out that all the map cards are completely different in size. So my grid would look crappy.

To demonstrate this I added a screenshot with all 4 cards next to each other in a horizontal grid.
Is there a way to make all my cards having same size?
If it matters here, all 4 Robo are Roborock S8 plus (integrated with the Hacs integration)

The height of the card depends on image size. You might try to change the size to a fixed value with card mod, but I’m not sure if it will work.

I exactly got the same problem. The map image size seems to be defined by the map data?
@3_14 : Wouldn’t it be nice to have the possibility of a fixed map area within the card and to ‘scale’ the image automatically?
@TheSmurf : Did you find a way to achieve a more alligned view using card mod integration?

Yup. It also depends on vacuum model/platform.

Potentially someday :slight_smile: You can create a feature request in card’s repo

Hello Piotr, thank you very much for your efforts, I am extremely grateful for the work you have done. If possible, please help me solve the problem:
I integrated the Xiaomi Mijia 1 vacuum cleaner, installed Xiaomi Miio integration (tried both cloud settings and local ones), Xiaomi map extractor, registered the recommended camera config, installed a vacuum map card, but I constantly receive messages (Timeout fetching roborock.vacuum.m1s data and Update of camera.xiaomi_cloud_map_extractor is taking over 10 seconds). Because of these errors, the vacuum cleaner “falls off” along with all entities and updates events in the log (according to the configured automation, messages are received about changes in the state of the vacuum cleaner). At first this happened very often, but after certain manipulations there seemed to be fewer messages, but it’s difficult to say for sure, not much time has passed since I did the following:

  1. Checked the IP address;
  2. Checked the token;
  3. Reinstalled the extractor, vacuum card, xiaomi miio integration;
  4. Deleted and redrew the map;
  5. I completely reset the vacuum cleaner settings, reconnected it and adjusted the config for the new token.
    After everything that has been done in the last 2 hours, there are fewer messages, but I think it’s too early to judge.
    Please tell me how to solve this problem, unfortunately, I’m just starting to master Home Assistant and I don’t always succeed on my own.
    Of course, I still have many questions about setting up vacuum cards, but first I would like to solve this problem.