Roborock S7MaxV - HA Integration

Are you using the Xiaomi Miio integration which works with the Xiaomi Home app, or the new roborock integration which works with the roborock app?

My post was referring to the new Roborock integration, not the Xiaomi Miio.

1 Like

Indeed I had not seen that you had recreated an api. What evolution does your integration bring ? Did you test it with a roborock s7 pro ultra ?

It is not my integration :slight_smile: This integration was primarily developed to be able to use the roborock app which supports the camera of the S7 MaxV - which does not work in the Xiaomi Home app.

Since S7 pro doesnā€™t have the camera, that is not a valid reason for you of course. I have not used the Xiaomi Miio integration, so I donā€™t know if there are other major differences.

1 Like

Ok I see to integrate it. And it works well. No more flipped sensor and most importantly the mop management works unlike the Xiaomi Home app integration. Thank you itā€™s a nice discovery

Since the sensor life is measured in seconds when you look at the history, I made my own sensors in config.yaml to convert the values to percentages and then reference those new sensors to create a tile in the vacuum card. See code below.

@wgumaa As far as zones and rooms go, it is rather straight forward after you ā€˜generate static configā€™ and ā€˜generate room configā€™ā€¦Just check the yaml code in the card to make sure the service calls are referencing your entity, otherwise it wonā€™t work. Not sure if it has been fixed or not in recent updates, but when I first generated config my service calls were referencing something like xiaomi.vacuum_clean_segment rather than the correct reference for me which was roborock.vacuum_clean_segment.

@tjafbe I have noticed that although I donā€™t appear to lose ā€˜connectionā€™ to the entities and map, they do stop updating after a while and a restart of HA is required. Is this still a bug being worked on?

      - name: "Roborock Filter Left"
        unit_of_measurement: '%'
        state: >-
            {{ (((states('sensor.max_filter_remaining') | float(0)) * 100) / 540000) | round(0) }}
            
      - name: "Roborock Main Brush Left"
        unit_of_measurement: '%'
        state: >-
            {{ (((states('sensor.max_main_brush_remaining') | float(0)) * 100) / 1080000) | round(0) }}
            
      - name: "Roborock Side Brush Left"
        unit_of_measurement: '%'
        state: >-
            {{ (((states('sensor.max_side_brush_remaining') | float(0)) * 100) / 720000) | round(0) }}
            
      - name: "Roborock Clean Sensors"
        unit_of_measurement: '%'
        state: >-
            {{ ((states('sensor.max_sensor_dirty_remaining') | float(0)) / 3600) | round(0) }}
            
      - name: "Roborock Room"
        state: >
          {% if is_state_attr('camera.max', 'vacuum_room', 16) %}
            Dining Room
          {% elif is_state_attr('camera.max', 'vacuum_room', 17) %}
            Sunroom
          {% elif is_state_attr('camera.max', 'vacuum_room', 18) %}
            Kitchen
          {% elif is_state_attr('camera.max', 'vacuum_room', 19) %}
            Living Room
          {% else %}
            Not Sure
          {% endif %}
2 Likes

Yeah. For me the map also regularly stops updating with only an integration reload helping. I hope this will eventually be addressed, but I am not involved (and not capable) with the development.

How do you generate those?

Hey guys,
The HACS Roborock integration is great - I am glad to be able to keep my Roborock app up and running!

I am able to add the device with 21 entities - but seem to be missing the camera entity? (S7 VMax Ultra). Any ideas??

Edit: After several reboots/device updates the camera entity did finally pull in. Not sure what I did to trigger it - but it was most likely me being impatient.

2 Likes

Do you mean the live front camera?

When I send the vacuum.pause command to my S7, it sets it ā€˜idleā€™ and is unable to resume whatever it was set to clean (e.g. segment, zone, etc.). Sending a vacuum.start command after the vacuum is either ā€˜idleā€™ or ā€˜pausedā€™ causes it to start a full cleaning (even when paused from the app). Also, vacuum.start_pause throws an unknown error, regardless of what state the vacuum is in.

Is there a way to pause the current cleaning and then resume? Maybe by creating a new roborock.pause or roborock.start_pause command?

Iā€™ll also add that after pausing from the app, I was able to resume cleaning from HA using

service: vacuum.send_command
data:
  command: resume_segment_clean

After a few days of use, I notice that the Roborock service crashes regularly which causes an error message when calling the service and the card does not update. Moreover, I find that the update of the values is too slow.

Hi,
I tried setting up a simple automation to send notification when attribute ā€œdock_error_statusā€ change to 38.
But for some reason it doesnā€™t seam to work.
Any idea why ?


alias: Roborock water tank notification
description: ""
trigger:
  - platform: state
    entity_id:
      - vacuum.roborock_s7_maxv
    attribute: dock_error_status
    to: "38"
  - platform: state
    entity_id:
      - vacuum.roborock_s7_maxv
    attribute: dock_error_status
    to: "39"
condition: []
action:
  - service: notify.mobile_phone
    data:
      message: water tank full
mode: single

Hello All,

Is it possible to read rooms and send the vacuum to multiroom cleaning, eg. kitchen and floor?

I donā€™t see this data pointsā€¦

I canā€™t get those sensors to show up. Iā€™m still pretty green though. Is there anyway you could post a screen shot of your actual config, so I can get the spacing right? I have added everything to the config.yaml, and itā€™s not throwing any errors. Rebooted and they sensors are still not showing up.

I found that if you use the xiaomi-vacuum-map-card, go into the code editor and make sure that all the sensors are using the ones created by your integration. It didnā€™t automatically pick up the name of my vacuum.

I have the vacuum set up with 22 sensors. Iā€™m trying to get the sensor info turned into percentage, so I can add the tile to the card.

  • platform: roborock

    name: ā€œRoborock Filter Leftā€

    unit_of_measurement: ā€œ%ā€

    state: >-

    {{ (((states('sensor.max_filter_remaining') | float(0)) * 100) / 540000) | round(0) }}
    

This passes the self check, but Iā€™m not getting a new sensor with the % of life left.

I know but Iā€™m saying if you use the xiaomi-vacuum-map-card, then you will get the sensors to show up, as long as you update the yaml code in the card to reflect the actual name of the sensors being provided. However, the sensors will show up as ā€œhours remaining.ā€

For example, the xiaomi-vacuum-map-card defaults to something like ā€˜sensor.filter_remainingā€™ but I had to change it to sensor.[VACUUM NAME]_filter_remaining

The conversion above is to change it from hours to percentage. If thatā€™s what youā€™re trying to accomplish, then you can ignore my post.

I get the value to show up, as hours remaining, but I want %. I canā€™t figure out how to get it to show a percentage.

First of all, great work! Working really good with my Roborock S7.
I got one problem with the integration though, all commands (send_command) gives me an error message ā€œFailed to request the service blablablaā€. It works, but I got this error message. Anyone know what causing this?

Try to put this in your sensor.yaml:

- platform: template
  sensors:
    roborock_filter_left:
      friendly_name: "Roborock Filter Left"
      unit_of_measurement: '%'
      value_template: >-
        {{ (((states('sensor.change_this_to_your_sensor) | float(0)) * 100) / 540000) | round(0) }}

then reload template sensors and use sensor.roborock_filter_left in your tile.

  - entity: sensor.roborock_filter_left
    label: Filter livslƤngd
    icon: mdi:air-filter
    unit: '%'