Roborock Downstairs (Other Floor) Automation

Hi There, This xmas we got ourselves our first robot! A Roborock Qrevo C Pro to be exact. We have a 2 story house, with the majority of the living area on the upper floor. We have an automation for the upper floor which triggers when we are both away, and thats nice and easy. However I thought I would share my current (maybe final? are they ever?) automation for cleaning downstairs, as its a bit more complex with moving the robot etc, which might help others get ideas. Also happy for any input to make this better!

The steps, when the automation is triggered from a button on our kitchen dashboard (upstairs). Note our vacuums name is “Suki”:

  1. Set the map to Upstairs (just to be sure it’s not set to Downstairs for some reason).
  2. Clean the Mop. I do this as when you trigger a routine with mopping included, the vacuum cleans the mop first. Because our downstairs routine includes mopping and Suki is not at the dock, the mops won’t be cleaned before starting mopping downstairs. This way the mops are nice and clean and wet when it starts downstairs.
  3. Send Suki to a pre-defined spot, which happens to be at the top of the stairs and wait.
  4. Change the map to Downstairs (note if no-one moves Suki within 10 mins, it changes to the upstairs map and returns it to the dock).
  5. Someone moves Suki downstairs and presses the power/start button. Note: This will trigger a “whole floor clean”, which I actually don’t want. I want to use a specific routine I have setup in the app for downstairs.
  6. Stop the “whole floor clean”, and trigger a clean using the correct routine. After which Suki will return to the starting spot. Note: Also updates some helpers.
  7. Pickup Suki and put it back in the dock.
  8. Set the map to Upstairs
  9. Clean the Mop
  10. Dry the Mop for 30mins
  11. All done.

Here is the YAML:

alias: Roborock - Clean Downstairs
description: >-
  Suki washes mops, drives to stairs, and waits for a physical button press to
  trigger the specific Downstairs Routine.
triggers: []
conditions: []
actions:
  - alias: Set Map to Upstairs
    action: select.select_option
    data:
      option: Upstairs
    target:
      entity_id: select.roborock_qrevo_c_pro_selected_map
  - alias: Wash Mop before travel
    action: vacuum.send_command
    target:
      device_id: 9308eea756d9e9a24d31af4d0f7985e0
    data:
      command: app_start_wash
  - alias: Wait for Mop Wash to finish
    wait_for_trigger:
      - trigger: state
        entity_id:
          - sensor.roborock_qrevo_c_pro_status
        from:
          - washing_the_mop
        to:
          - charging
        for:
          hours: 0
          minutes: 0
          seconds: 10
    continue_on_timeout: false
  - action: roborock.set_vacuum_goto_position
    target:
      device_id: 9308eea756d9e9a24d31af4d0f7985e0
    data:
      x: 22820
      "y": 20505
    alias: Drive to top of stairs
  - alias: Wait for arrival at stairs
    wait_for_trigger:
      - trigger: state
        entity_id:
          - sensor.roborock_qrevo_c_pro_status
        to:
          - idle
        from:
          - going_to_target
    continue_on_timeout: false
  - alias: Set Map to Downstairs (Fixed Name)
    action: select.select_option
    data:
      option: Downstairs
    target:
      entity_id: select.roborock_qrevo_c_pro_selected_map
  - alias: Wait for someone to press the Power button
    wait_for_trigger:
      - trigger: state
        entity_id: binary_sensor.roborock_qrevo_c_pro_cleaning
        to: "on"
    timeout: "00:10:00"
    continue_on_timeout: true
  - if:
      - condition: template
        value_template: "{{ wait.trigger is none }}"
    then:
      - action: select.select_option
        data:
          option: Upstairs
        target:
          entity_id: select.roborock_qrevo_c_pro_selected_map
      - delay: "00:00:02"
      - action: vacuum.return_to_base
        target:
          entity_id: vacuum.roborock_qrevo_c_pro
      - stop: Manual start timeout reached.
    else:
      - alias: Stop Generic Clean and Start Custom Routine
        action: vacuum.stop
        target:
          entity_id: vacuum.roborock_qrevo_c_pro
        data: {}
      - delay: "00:00:02"
      - action: button.press
        target:
          entity_id: button.roborock_qrevo_c_pro_vac_mop_downstairs
        data: {}
  - alias: Wait until the downstairs cycle is finished
    wait_for_trigger:
      - trigger: state
        entity_id: binary_sensor.roborock_qrevo_c_pro_cleaning
        from: "on"
        to: "off"
    timeout: "03:00:00"
  - action: counter.increment
    target:
      entity_id: counter.roborock_downstairs_clean_daily_count
  - action: input_boolean.turn_on
    target:
      entity_id: input_boolean.roborock_has_mopped_today
  - alias: Wait until Suki is physically back on Dock
    wait_for_trigger:
      - trigger: state
        entity_id: sensor.roborock_qrevo_c_pro_status
        to: charging
        for:
          seconds: 10
    continue_on_timeout: false
  - alias: Set Map to Upstairs
    action: select.select_option
    data:
      option: Upstairs
    target:
      entity_id: select.roborock_qrevo_c_pro_selected_map
  - alias: Empty and Wash
    action: vacuum.send_command
    target:
      device_id: 9308eea756d9e9a24d31af4d0f7985e0
    data:
      command: app_start_collect_dust
  - delay: "00:01:00"
  - action: vacuum.send_command
    target:
      device_id: 9308eea756d9e9a24d31af4d0f7985e0
    data:
      command: app_start_wash
  - alias: Wait for final Wash to end
    wait_for_trigger:
      - trigger: state
        entity_id: sensor.roborock_qrevo_c_pro_status
        from: washing_the_mop
        to: charging
        for:
          minutes: 1
  - action: vacuum.send_command
    target:
      entity_id: vacuum.roborock_qrevo_c_pro
    data:
      command: app_set_dryer_status
      params:
        status: 1
    alias: Start Drying Mop
  - delay: "00:30:00"
  - action: vacuum.send_command
    target:
      entity_id: vacuum.roborock_qrevo_c_pro
    data:
      command: app_set_dryer_status
      params:
        - 0
    alias: Stop Drying Mop
mode: single
1 Like