Support for Ecovacs Deebot T50 OMNI

What entities do you get ?

Hello all, I’ve bought a Ecovacs Omni T50 Pro and installed it in HA. I can start and stop the robot but can’t choose an area (room). Any idea why?

@oracle Did you use Matter over Wifi for the Integration in HASS?
I cant choose an area either.
I think Ecovacs didn’t implemented this feature into the Matter protocoll yet

I tried it with both, the standard ecovacs integration as well as the matter integration. There are less options in the matter integration. However, there are no rooms available in both. We may have to wait until they provide a fix.

Btw: If I use apple home, it works fine including the rooms.

They did. Area selection is available when controlling the vacuum from Apple Home app via Matter. Vacuum implementation in Home Assistant Matter Server seems incomplete.

When it comes to Ecovacs integration - client.py library does not currently support newer bots completely. Map, area, water amount, station functions etc support is missing or incomplete.

Any news? I have a Deebot T50 Omni Pro, but I can’t get it to start. It’s currently fully charged.

1 Like

Is there any update regarding the map issue? I recently updated to Home Assistant 2025.11 and I have a Deebot X9 Pro Omni, but I am still unable to view the map. Do you know if a solution is being developed?

Can the ecovacs t50 be blocked from internet connection once it is integrated in HA? That way I could control it completely on local network without cloud access?

Since custom water amount I was campaigning for was recently added and maps for newer bots got implemented I decided to again attempt creating more functional hardware file for Deebot T50 Max Pro Omni which turned out to be easy since there was already a functional file for X8 Pro Omni - it’s the same generation bot so all I had to change was to add round mop lifetime support.

I already submitted pull request to the Deebot client.py library github so hopefully it will ship with HA by default some time in the future.

In the meantime if anyone wants to try it out instructions are basically identical as before but some paths have changed:

  1. SSH into your HAOS or use the Terminal addon
  2. execute the following commands:
  • docker exec -it $(docker ps -f name=homeassistant -q) bash
  • cd /usr/local/lib/python3.13/site-packages/deebot_client/hardware
  • mv c8rj4y.py c8rj4y.py.old
  • wget https://raw.githubusercontent.com/ClassicGOD/client.py/refs/heads/dev/deebot_client/hardware/c8rj4y.py
  1. restart Home Assistant

if you want to try it with other hardware than T50 Max Pro Omni you have replace the last 2 commands with:

  • mv [your_hw_id].py [your_hw_id].py.old
  • wget https://raw.githubusercontent.com/ClassicGOD/client.py/refs/heads/dev/deebot_client/hardware/c8rj4y.py -O [your_hw_id].py
3 Likes

Hi there,
is there any update to this? I would like to run a scenario from HA but the only action I see is “clean”. Is it possible to use action via the HA integration?

My scenario is that I want to capture the event that my litter robot detected the cat doing her business and IF my baby sound machine is not on, run the vacuums “clean litter” scenario and spot clean around her litter box. I have all pieces besides scenario clean.

1 Like

Hi all,

I am also interested in accessing the scenarios of the T50 family from HA.

I have never done this, but I am happy to contribute to try to reverse engineer the API. If anyone know where to start or a project that already implements these, please let me know!

Are there any news? Its more than a year now and undortunately the Integration ist useless without the ability to start scenarios or at least choose rooms. And obviously it IS possible via matter because it works within Apple Home…
Thank you all!

AFAIK it has been working for a long time. It’s just not intuitive how to set it up.
Read the “Mapping your vacuum areas to Home Assistant areas” and “Sending your vacuum to clean specific areas” sections.

It should be working for both Ecovacs and Matter integrations (at least it can be set up, I can’t test it now because my fresh water tank is empty and I’m lazy as f***).

They did add this to HA with the 2026.3.1 release. You can now map the Deebot room names to area names in HA and then run automations based on those areas.

Although I’ve got a DEBOOT T80S OMNI I wanted to thank you A TON!

This worked like a charm (by using my device ID of course)! :smile:

1 Like

Hi all. I got Scenario Clean working for my ECOVACS T50 Pro in Home Assistant. I was able to set-up room cleaning with the release that came up previously this year, but that did not allow me to use the scenarios I have configured in the app, which allow me to determine everything from water to clean type for every room

I worked with AI to iterate towards a solution, and I asked it to provide a guide for the community too. This method works reliably for me. Enjoy!

Step 1. Find the scenario IDs

The scenario IDs, i.e., the Quick Command IDs or QCIDs, can be pulled from Home Assistant debug logs for the ECOVACS integration.

Enable debug logging for the ECOVACS integration

In the integration page, top-right corner>enable debug logging

Open the logs (though you will also get them downloaded when you disable integration debugging)

Go to Settings > System > Logs and open the full raw log.

Trigger the scenario list from your phone app.

Open the ECOVACS app and go to the Scenario Clean page, or trigger a scenario from the app. That causes ECOVACS to send a getQuickCommand payload, which contains the scenario names and their IDs.

Search the log for:

getQuickCommand

You should see entries like this:

{"name":"Vac Only","qcid":"9999"}
{"name":"Mop Only","qcid":"8888"}
{"name":"Daily Clean","qcid":"7777"}
{"name":"Mop after Vac","qcid":"6666"}

Those qcid values are the scenario IDs you need for qcClean.

2. Create a script that runs qcClean using the clean_V2 command.

2.1 Important gotcha

A single generic script that passes the scenario ID dynamically did not work reliably, because Home Assistant kept coercing the QCID into an integer instead of leaving it as a string.

For example, this failed because the value was sent as an integer:

value: 5012

What worked was using individual scripts with the QCID hard-coded as a quoted string:

value: "5012"

If your logs show format error from ECOVACS, check whether Home Assistant is sending the QCID as an integer instead of a string.

3. Working scripts

Replace vacuum.your_vacuum with your own vacuum entity ID.

Vac Only

ecovacs_scenario_vac_only:
  alias: Ecovacs Scenario Vac Only
  mode: single
  sequence:
    - action: vacuum.send_command
      target:
        entity_id: vacuum.your_vacuum
      data:
        command: clean_V2
        params:
          act: start
          content:
            type: qcClean
            value: "9999"

4. Wrap it up into a chooser script

In order to have a single script, you can create a wrapper script that lets you choose the scenario name and then calls one of the fixed scripts above.

ecovacs_run_scenario:
  alias: Ecovacs Run Scenario
  mode: single
  fields:
    scenario_name:
      name: Scenario
      required: true
      default: Daily Clean
      selector:
        select:
          mode: dropdown
          options:
            - "Vac Only"
            - "Mop Only"
            - "Daily Clean"
            - "Mop after Vac"
  sequence:
    - choose:
        - conditions: "{{ scenario_name == 'Vac Only' }}"
          sequence:
            - action: script.ecovacs_scenario_vac_only
        - conditions: "{{ scenario_name == 'Mop Only' }}"
          sequence:
            - action: script.ecovacs_scenario_mop_only
        - conditions: "{{ scenario_name == 'Daily Clean' }}"
          sequence:
            - action: script.ecovacs_scenario_daily_clean
        - conditions: "{{ scenario_name == 'Mop after Vac' }}"
          sequence:
            - action: script.ecovacs_scenario_mop_after_vac

5. Summary

  • Get the scenario IDs from the getQuickCommand debug log.
  • Use command: clean_V2 with type: qcClean.
  • Pass the QCID as a quoted string.
  • If dynamic scripts keep converting the value to an integer, use one fixed script per scenario and optionally a wrapper script to choose between them.

Hopefully this saves someone else a lot of time.

1 Like