Trying to set up select room cleaning

Hi, I recently installed valetudo and have got that all integrated with Home Assistant using MQTT. I wanted to use the room select code that is posted within the documentation of valetudo. Home Assistant | Valetudo
I have copied the codes, scripts, groups, and customization but it never runs. The script works when I change the segment to being a predefined value, but when I try and use the segments variables nothing happens.
Is there a way to test out the segments varaible and seeing an output? I don’t have much knowledge of what is going on within the code.
Thanks!

I don’t have valetudo on my robot but segments cleaning requires a room id. Probably you have wrong room id. I don’t know how it makes rooms ids. Probably it needs a map first and then you can name the rooms and generate rooms ids.

I have Vatletudo installed.

I also use this custom integration to convert the mqtt camera to something usable:

I use this with the map extractor integration and card:

To clean preprogrammed segments I use these automations:

- id: 9fd287f3-b92e-4cad-a6f4-9fc4654f9534
  alias: Upstairs Scheduled Vacuum 1
  trigger:
    platform: state
    entity_id: schedule.upstairs_vacuum_schedule_1
    to: "on"
  action:
  - service: mqtt.publish
    data:
      topic: valetudo/roborock_upstairs/MapSegmentationCapability/clean/set
      payload: '{"segment_ids": ["17", "20", "27", "16", "22", "21", "26"], "iterations": 1, "customOrder": true}'

- id: bec092cc-5a40-4c86-9702-334ccda98fb1
  alias: Upstairs Scheduled Vacuum 2
  trigger:
    platform: state
    entity_id: schedule.upstairs_vacuum_schedule_2
    to: "on"
  action:
  - service: mqtt.publish
    data:
      topic: valetudo/roborock_upstairs/MapSegmentationCapability/clean/set
      payload: '{"segment_ids": ["23", "24", "25", "18", "19"], "iterations": 1, "customOrder": true}'

If I need to clean a particular room I just select it from the map card.

2 Likes

I have the map ID’s and if I replace the segment variable within the script with an ID it will run with that room ID’s. I just don’t have the knowledge to debug why its not working.

Well you can always try to run script manually and if it doesn’t run check the logs and post it here. Someone probably will be able to help you based on your error log.

This is the error which I get when running to code.


MQTT: Error while handling valetudo/Wall-E/MapSegmentationCapability/clean/set {
  payload: '{"segment_ids": []}',

So there is an issue with the segmenting of the rooms. I have the ID’s related to boolean inputs. Which can be switched on or off. A button then runs the script and segments the rooms.

vacuum_clean_segments:
  sequence:
  - service: script.turn_on
    data:
      variables:
        segments: '{{expand("group.vacuum_rooms") | selectattr("state","eq","on")
          | map(attribute="attributes.room_id") | list | to_json}}'
    target:
      entity_id: script.vacuum_clean_segments_message
  mode: single
  alias: vacuum_clean_segments
  icon: mdi:arrow-right
vacuum_clean_segments_message:
  alias: vacuum_clean_segments_message
  sequence:
  - service: mqtt.publish
    data:
      topic: valetudo/Wall-E/MapSegmentationCapability/clean/set
      payload_template: '{"segment_ids": {{segments}}}'
  mode: single

As I see you dont have segments_ids. Look at toms post above.
May I ask you something?
How did you get this vacuum robot? Did you flash it yourself or you bought it ?

I’ll take a deeper look above. I got this robot through amazon and then flashed it with valetudo myself. It wasnt too hard of a process. I have a Dreame D10s Pro.