Valetudo - Xiaomi Vacuum Dustcloud alternative, Live Maps

ICantBelieveItsNotValetudo is an assistant service which runs on your Linux box, Pi, whatever.
Basically it does the heavy lifting map-wise for the vacuum, because otherwise the vacuum will run out of resources.
You can run it by cloning the git and the command “npm start”.
Don’t forget to make a proper config file with the proper mqtt topics.
Make sure this config settings match the mqtt topics from your valetudo config on the vacuum.

If you want to run it on the background, use something like PM2.

Good luck!
By the way, I use the fork of rand256, he also made a ICantBelieveItsNotValetudo fork which is now called valetudo-mapper.
Rand256-Valetudo
Rand256-mapper

So, Mqtt was used to communicate between ICantBelieveItsNotValetudo and Valetudo?
I have integration vacuum image in used ( Valetudo ). If i want to use Rand256-valetudo, Do i need to build vacuum image again and flash to vacuum cleaner? Thanks for your help :)

No, just replace Valetudo. He also makes deb files, which you can easily copy to the vacuum and do dpkg to install.
All this information is found in that git!

I’m trying to do this, upgrading from normal valetudo 0.4. But i get stuck, see last line. Any idea what to do?

Preparing to unpack .../valetudo-re_0.8.1_armhf.deb ...
Unpacking valetudo-re (0.8.1) over (0.8.1) ...
Setting up valetudo-re (0.8.1) ...
Processing triggers for ureadahead (0.100.0-16) ...

Maybe first try to install the new Valetudo by hand?
Just replace the binary file in the folder /usr/local/bin
Just make sure first to stop Valetudo and chmod +X Valetudo binary before starting again.

Thanks I didn’t know you could install that easy. Seems to be working fine!

Hi,

I have Roborock that is flashed with Valetudo and is connected to HA with mqqt. I also have icantbelieveitsnotvaletudo hass.io addon installed so I have the map as a camera sensor.

But how I can get a Live map to show? The map is not updating when the vacuum is on.

Edit: It is working, had to change the mapDataTopic to match the identifier.

Try adding the vendor option to your Lovelace card, like this:

      - type: custom:xiaomi-vacuum-card
        entity: vacuum.rockrobo
        image: false
        name: Xiaomi Roborock Vacuum
        buttons: true
        vendor: valetudo

Are you using the portainer addon to run valetudo-mapper?

1 Like

would be my question too, how to run valetudo-mapper by rand25 in home assistant? or does it go separately?

Anyone using Valetudo by rand256 with home assistant and the now supported rooms? Would like to know how to use those predefined rooms straight from hass.

Valetudo RE latest release uses 2008 firmware (Gen 2), but I thought that was non-rootable? Are there any “risk” to flashing firmware 2008?

i have the same “looks” for the parsed json. how do you go about fixing this? is it in the “customize” menu?

Hi guys

I have a xiaomi roborock v55 and want to root it etc. Is there a detailed guidance on how to do it please?

Thanks.

Hi, i’m trying to get zone cleaning working.

When I launch the script I log this in mosquitto_sub:

valetudo/rockrobo/command/send_command {"command": "zoned_cleanup", "zone_ids": ["keuken"]}
valetudo/rockrobo/state {"state":"docked","battery_level":100,"fan_speed":"medium","cleaned_area":"1.0","cleaning_time":"0.7"}

nothing happens.
When trying locate vacuum I get:

valetudo/rockrobo/command locate
valetudo/rockrobo/state {"state":"docked","battery_level":100,"fan_speed":"medium","cleaned_area":"1.0","cleaning_time":"0.7"}

and that works…

My yaml:

vacuum:
  - platform: mqtt
    name: "stofzuiger"
    supported_features:
      - turn_on
      - turn_off
      - pause
      - stop
      - return_home
      - battery
      - status
      - locate
      - clean_spot
      - fan_speed
      - send_command
    command_topic: "valetudo/rockrobo/command"
    battery_level_topic: "valetudo/rockrobo/state"
    battery_level_template: "{{ value_json.battery_level }}"
    charging_topic: "valetudo/rockrobo/state"
    charging_template: "{{ value_json.charging }}"
    cleaning_topic: "valetudo/rockrobo/state"
    cleaning_template: "{{ value_json.cleaning }}"
    docked_topic: "valetudo/rockrobo/state"
    docked_template: "{{ value_json.docked }}"
    error_topic: "valetudo/rockrobo/state"
    error_template: "{{ value_json.error }}"
    fan_speed_topic: "valetudo/rockrobo/state"
    fan_speed_template: "{{ value_json.fan_speed }}"
    set_fan_speed_topic: "valetudo/rockrobo/set_fan_speed"
    fan_speed_list:
      - Silent
      - Normal
      - Turbo
      - Max
      - Mop
    send_command_topic: 'valetudo/rockrobo/send_command'

sensor:
  - platform: rest
    resource: http://192.168.2.77/api/map/latest
    name: xiaomi_map
    json_attributes:
      - image
      - path
      - charger
      - robot
      - virtual_walls
      - no_go_areas
      - zones
    value_template: 'OK'
    scan_interval: 5

script:
  vacuum_zones:
    alias: "Zone stofzuigen"
    sequence:
      - service: vacuum.send_command
        data_template:
          entity_id: vacuum.stofzuiger
          command: 'zoned_cleanup'
          params:    
            'zone_ids': ['keuken']

What am I doing wrong?

Anyone please?

@bachoo786

Last time I flashed I followed the guide linked below using the app in the post

4 Likes

That guide is hilarious! Awesome. Thanks for sharing the links

Anyone had any luck flashing a new xiaomi vac that shipped with 4008 firmware?
I get time outs when flashing

Edit: Not new gen 1 but with 4008 firmware

I am making progress here. I have it starting up to do a zone clean. Tips for young players the zone id is case sensitive!!

I now want to be able to send a command to dock the vacuum but this is not working. Here is my script. Anyone have a working example?

vacuum_return_home:
  alias: "vacuum return home"
  sequence:
    - service: vacuum.send_command
      data:
        entity_id: vacuum.rockrobo
        command: 'pause'
    - delay: 5
    - service: vacuum.send_command
      data:
        entity_id: vacuum.rockrobo
        command: 'return_to_base'

Looking at MQTT explorer. When home assistant sends a command it comes in on the custom_command topic. In order for me to pause the vacuum I have to use the command topic. Anyone know why that is?

EDIT:
I have come up with a solution but it is a hack so I hope someone can point me out the proper way to do this. I added to my configuration.yaml a vacuum entry so I now have two vacuum entities for the same thing and then I sent the command to that. First block is configuration.yaml and second block is scripts.yaml

vacuum:
  - platform: mqtt
    name: "Valetudo Vacuum"
    schema: state
    supported_features:
      - start
      - pause
      - stop
      - return_home
      - battery
      - status
      - locate
      - clean_spot
      - fan_speed
      - send_command
    command_topic: "valetudo/rockrobo/command"
    state_topic: "valetudo/rockrobo/state"
    set_fan_speed_topic: "valetudo/rockrobo/set_fan_speed"
    fan_speed_list:
      - min
      - low
      - medium
      - high
      - max
    send_command_topic: 'valetudo/rockrobo/command'
vacuum_return_home:
  alias: "vacuum return home"
  sequence:
    - service: vacuum.send_command
      data:
        entity_id: vacuum.valetudo_vacuum
        command: 'pause'
    - delay: 5
    - service: vacuum.send_command
      data:
        entity_id: vacuum.valetudo_vacuum
        command: 'return_to_base'