S7 Mop control

Working, thanks!

Hi @matlar,

Can you explain to me how to implement this script into my automations?

Thnx

Maybe someone has figured out how to change Mop Route setting to Deep?

Just found the solution for passing variables to an script inside an automation:

alias: Test vacuum settings
description: ''
trigger: []
action:
  - service: script.roborock_set_manual_mode
    target:
      entity_id: vacuum.roborock_vacuum_a15
    data:
      vacuum: silent
      mopping: 'off'

@vgimbutas i would like to know that to.

1 Like

I would like to join the question! Iā€™ve been playing around a bit with custom settings. I set deep mopping for custom cleaning in the app. However, Iā€™ve had unreliable success - occasionally Iā€™ve been able to start deep mopping via Home Assistant using this:

service: vacuum.send_command
data:
  command: set_water_box_custom_mode
  params:
    - 204
target:
  device_id: ...
1 Like

So i discovered how to set the mopping route, the following script can be used:

alias: Set Roborock mopping route
fields:
  route:
    description: 'Mopping route - can be: standard | deep'
    example: 'standard'
sequence:
  - alias: Config variables
    variables:
      config_mopping_route:
        'standard': 300
        deep: 301
      mopping_route: '{{ config_mopping_route[route]}}'
  - choose:
      - alias: Invalid mopping route value
        conditions:
          - condition: template
            value_template: '{{ route not in config_mopping_route|list }}'
        sequence:
          - service: system_log.write
            data:
              message: >-
                Invalid mopping_route value '{{ route }}'. Valid values are {{
                config_mopping_route|list|join(', ') }}
              level: warning
              logger: roborock
    default:
      - alias: Set mopping route
        service: vacuum.send_command
        target:
          entity_id: vacuum.roborock_vacuum_a15
        data:
          command: set_mop_mode
          params: '[{{ mopping_route }}]'
mode: single
4 Likes

Itā€™s working, thanks!
I also see (and hear from the robot) the changes in the Mii app

1 Like

Thank you @f.welvering - the solution was 301. It worked immediately!

1 Like

Is there a way to create an entity that represents the mopping status of the robot? Currently the robot arttibutes show vacuum strength only.

I want that because I want to try to make an input boolean that tells if the mop pad is dirty or clean.

For that I need to know when the robot is back after mopping.
I can do that manually by adding it to the script, so when manually set to mopping it will also change an entity to let it know, but then I would not have this information if I sent the robot from the Mii App.

Any suggestions?

Is there a way to combine this with number of repeats?
This scripts work for me, but I canā€™t choose how many repeats for each room.
I can of course send the vacuum twice to the same room but itā€™s different, the roborock does a different route if itā€™s set to 2-3 repeats

Yes i think you can, iā€™m using the following script to mop a zone twice:

mop_bijkeuken:
  alias: 'Mop: Bijkeuken'
  sequence:
  - service: xiaomi_miio.vacuum_remote_control_stop
    target:
      entity_id: vacuum.roborock_vacuum_a15
    data: {}
  - delay:
      hours: 0
      minutes: 0
      seconds: 2
      milliseconds: 0
  - service: script.set_mopping_route
    target:
      entity_id: vacuum.roborock_vacuum_a15
    data:
      route: deep
  - service: xiaomi_miio.vacuum_clean_zone
    target:
      entity_id: vacuum.roborock_vacuum_a15
    data:
      repeats: 2
      zone:
      - - 22976
        - 21080
        - 26604
        - 22285
  mode: single
  icon: mdi:robot-vacuum
1 Like

Iā€™m using specific room cleaning script. I wonder if itā€™s possible to combine it with repeats.
This is what Iā€™m using for automate room cleaning:

      - service: vacuum.send_command
        target:
          device_id: !secret roborock_device_id
        data_template:
          command: app_segment_clean
          params: '{% set room_id = states("input_number.roborock_room_enum_" + room)
            | int %} {{ room_id }} '

This thread looks very promising - I spent a lot of time trying to get this to work a few months ago, but it looks like you guys cracked the code. Can some ELI5 how to configure this or set this up? Iā€™ve read through the last few comments and tested all the code but itā€™s not working for me. But Iā€™m probably not doing something correctly.

Ideally I would like to create a script that has a hardcoded mop route of ā€œdeepā€ with that I can call from an automation.

Edit: Actually, I think I got I working now. Iā€™ll post a how-to guide shortly. Guide here: https://smarthomepursuits.com/roborock-s7-mop-control-in-home-assistant/

Hereā€™s what I have in Lovelace - x2 input_selects for every room in my house (1 for vacuuming & 1 for mopping). I then have a reset button to change the mop route to Standard, sets scrub intensity to none, and vacuum power to max.

And for what itā€™s worth - since I have individual scripts for mopping each room and vacuuming each room, I was able to configure it with Google Assistant, so I can now say ā€œHey Google, mop the officeā€ or ā€œHey Google, vacuum the master bedroomā€ and off she goes.

image

2 Likes

Thanks for this guys. Bought the S7 because of the possibility in this thread.

My automations (maybe useful to anyone):

- alias: 'Stofzuiger beneden'
  initial_state: 'true'
  trigger:
    platform: time
    at: '3:00:00'
  condition:
    - condition: state
      entity_id: input_boolean.vakantie
      state: 'off'
    - condition: state
      entity_id: input_boolean.stofzuiger_beneden
      state: 'on'
  action:
    - choose: 
        - conditions:
            - condition: numeric_state
              entity_id: counter.stofzuiger
              above: 1
          sequence: 
            - service: script.roborock_set_manual_mode
              target: 
                entity_id: vacuum.roborock_vacuum_a15
              data:
                vacuum: max
                mopping: 'off'
            - service: vacuum.start
              data:
                entity_id: vacuum.roborock_vacuum_a15
      default:
        - service: script.roborock_set_manual_mode
          target: 
            entity_id: vacuum.roborock_vacuum_a15
          data:
            vacuum: balanced
            mopping: 'off'
        - service: vacuum.start
          data:
            entity_id: vacuum.roborock_vacuum_a15
        - service: counter.increment
          entity_id: counter.stofzuiger

- alias: 'Stofzuiger dweilen beneden'
  initial_state: 'true'
  trigger:
    platform: time
    at: '4:00:00'
  condition:
    - condition: state
      entity_id: input_boolean.vakantie
      state: 'off'
    - condition: state
      entity_id: input_boolean.stofzuiger_beneden
      state: 'on'
    - condition: numeric_state
      entity_id: counter.stofzuiger
      above: 1
  action:
    - service: script.roborock_set_manual_mode
      target: 
        entity_id: vacuum.roborock_vacuum_a15
      data:
        vacuum: silent
        mopping: high
    - service: script.roborock_set_mopping_route
      target: 
        entity_id: vacuum.roborock_vacuum_a15
      data:
        route: deep
    - service: vacuum.start
      data:
        entity_id: vacuum.roborock_vacuum_a15
    - service: counter.increment 
      entity_id: counter.stofzuiger

- alias: 'Stofzuiger dweilen uit beneden'
  initial_state: 'true'
  trigger:
    platform: time
    at: '5:00:00'
  condition:
    - condition: state
      entity_id: input_boolean.vakantie
      state: 'off'
    - condition: state
      entity_id: input_boolean.stofzuiger_beneden
      state: 'on'
    - condition: numeric_state
      entity_id: counter.stofzuiger
      above: 1
  action:
    - service: script.roborock_set_manual_mode
      target: 
        entity_id: vacuum.roborock_vacuum_a15
      data:
        vacuum: balanced
        mopping: 'off'
    - service: script.roborock_set_mopping_route
      target: 
        entity_id: vacuum.roborock_vacuum_a15
      data:
        route: 'standard'
    - service: counter.increment 
      entity_id: counter.stofzuiger 

- alias: Stofzuiger leegmaken
  initial_state: 'true'
  trigger:
    platform: state
    entity_id: sensor.pixel_5_charger_type
    from: 'wireless'
    to: 'none'
    for: 
      minutes: 1
  condition:
    - condition: numeric_state
      entity_id: counter.stofzuiger
      above: 2
    - condition: state
      entity_id: input_boolean.stofzuiger_leegmaken_melding
      state: 'on'
  action:
    - service: notify.mobile_app_pixel_5
      data:
        title: 'Bitch'
        message: "De stofzuiger mag weer leeggemaakt worden. Die bitch staat alweer op je te wachten!"
        data:
          actions:
            - action: bitch_naar_prullenbak
              title: Terug naar dock
          color: '#F92772'
          priority: high
          ttl: 0
          channel: Bitch
          group: Bitch
          ledColor: '#F92772'
          tag: "bitchlegen"
    - service: script.turn_on
      entity_id: script.bitch_prullenbak
    - service: counter.reset
      entity_id: counter.stofzuiger
          
- alias: 'Bitch naar dock'
  initial_state: 'on'
  trigger:
    - platform: event
      event_type: mobile_app_notification_action
      event_data:
        action: bitch_naar_prullenbak
  action:
    - service: vacuum.return_to_base
      entity_id: vacuum.roborock_vacuum_a15

- alias: 'Melding wissen bij terug naar dock'
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: vacuum.roborock_vacuum_a15
      to: 'returning'
  condition:
    - condition: time
      after: 04:00:00
  action:
    - service: notify.mobile_app_pixel_5
      data:
        message: "clear_notification"
        data:
          tag: "bitchlegen"

So every night at 3 am the S7 will vacuum (3th day at max). Every third night at 4 am the S7 will mop in deep mopping mode. The next morning when my phone is off the wireless charger for 1 minute, the vacuum will go to the trash bin, so I can clean the dust bin and replace the mop (and add water). When I push the action link in the Android notification the vacuum goes back to the dock. Or when I choose to push the button on the vacuum, the notification gets cleared.

The automations wonā€™t get triggered when we are on vacation (wife and I away for 24 hours). I didnā€™t want to use delays btw, as the automation will fail when for some reason HA will restart (power outage or whatever).

And only mopping every third night is because I donā€™t want to change the mop every day.

4 Likes

Anyone succeeded doing specific rooms / route mop (deep/standard) on Roborock S7 MaxV?
It all worked well for me on S7. I upgraded to S7 MaxV and only succeeded to to part of the commands.

does anyone already found the new details for the deep+ setting on mopping with the s7?

Would love to implement them on my s7 automations.

Hi,

Yes, i Just discovered the new mopping route has ID 304, so Just add it to your scripts

Enjoy

I just created similar post in the WTH subforum: WTH vaacum entities have to mopping controls?

Can you plase vote it? Its a good opportunity to get this feature implemented

1 Like

I canā€™t get the S7 to perform mops only via scripts anymore.

Have tried everything but somehow it seems that the command, set_mop_mode no longer exists, has changed causing it not to pick it up.

I can change the suction config, mop config but the Route(mop only) wonā€™t work. do more people suffer from this?

In my robot Roborock S7 the number that i use are:
300 standard
301 Deep
302 custom
303 deep+

I donā€™t tried 304.