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.

Did you ever get this sorted?

I had it working for ages exactly how you had it (using the input booleans to dynamically select rooms to vacuum - and it suddenly broke (I assume it was when I updated something). Curious to know if you got it working (and it’s still working?)

To anyone else running into this issue following home assistant update - claude ai to the rescue. The code syntax has changed, and you can now combine both into one script - you’ll have to change the effect of the button to run it, but here’s the proper syntax:

vacuum_clean_segments:
  sequence:
  - service: mqtt.publish
    data:
      topic: valetudo/RobotVacuum/MapSegmentationCapability/clean/set
    data_template:
      payload: >-
        {"segment_ids": {{expand("group.vacuum_rooms") | selectattr("state","eq","on") | map(attribute="attributes.room_id") | list | tojson}}}
  mode: single
  alias: vacuum_clean_segments
  icon: mdi:arrow-right

Or, if you want to do split it out, so you don’t have to change anything, here’s updated syntax for both scripts:

vacuum_clean_segments:
  sequence:
  - variables:
      room_segments: >-
        {{expand("group.vacuum_rooms") | selectattr("state","eq","on") | map(attribute="attributes.room_id") | list | tojson}}
  - service: script.turn_on
    target:
      entity_id: script.vacuum_clean_segments_message
    data:
      variables:
        segments: "{{room_segments}}"
  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/RobotVacuum/MapSegmentationCapability/clean/set
      payload: '{"segment_ids": {{segments}}}'
  mode: single
1 Like

Thank you simo26246! I found out yesterday that things had stopped working and this helped me out.