STep by Step installation Eufy L60

I’m at a loss… I’ve created all the folders through file-browser, uploaded all files to the corresponding folders and restarted HA, yet somehow the battery % remains unavailable and controls in the Vacuum Card do not work.

In my system logs I see the following three errors reported.
Anyone have any ideas how to further troubleshoot?

Logger: homeassistant.components.vacuum
Source: helpers/entity_platform.py:657
integration: Vacuum (documentation, issues)
First occurred: 21:18:41 (1 occurrence)
Last logged: 21:18:41

Error adding entity vacuum.wall_e for domain vacuum with platform robovac
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
    return await fut
           ^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/locks.py", line 407, in acquire
    await fut
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/config/custom_components/robovac/tuyalocalapi.py", line 911, in async_recieve
    await self._recieve_task
  File "/usr/local/lib/python3.13/asyncio/tasks.py", line 506, in wait_for
    async with timeouts.timeout(timeout):
               ~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
    raise TimeoutError from exc_val
TimeoutError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 657, in _async_add_entities
    await self._async_add_entity(
        entity, False, entity_registry, config_subentry_id
    )
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 979, in _async_add_entity
    await entity.add_to_platform_finish()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1368, in add_to_platform_finish
    await self.async_added_to_hass()
  File "/config/custom_components/robovac/vacuum.py", line 366, in async_added_to_hass
    await self.async_forced_update()
  File "/config/custom_components/robovac/vacuum.py", line 395, in async_forced_update
    await self.async_update_vacuum()
  File "/config/custom_components/robovac/vacuum.py", line 391, in async_update_vacuum
    await self.vacuum.async_get()
  File "/config/custom_components/robovac/tuyalocalapi.py", line 763, in async_get
    response = await self.async_recieve(message)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/robovac/tuyalocalapi.py", line 923, in async_recieve
    raise ResponseTimeoutException(
    ...<3 lines>...
    )
custom_components.robovac.tuyalocalapi.ResponseTimeoutException: Timed out waiting for response to sequence number 4627386
This error originated from a custom integration.

Logger: homeassistant
Source: custom_components/robovac/tuyalocalapi.py:919
integration: Eufy Robovac (documentation, issues)
First occurred: 21:39:06 (2 occurrences)
Last logged: 21:39:12

Error doing job: Task exception was never retrieved (None)
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
    return await fut
           ^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/locks.py", line 407, in acquire
    await fut
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/config/custom_components/robovac/tuyalocalapi.py", line 911, in async_recieve
    await self._recieve_task
  File "/usr/local/lib/python3.13/asyncio/tasks.py", line 506, in wait_for
    async with timeouts.timeout(timeout):
               ~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
    raise TimeoutError from exc_val
TimeoutError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/config/custom_components/robovac/vacuum.py", line 395, in async_forced_update
    await self.async_update_vacuum()
  File "/config/custom_components/robovac/vacuum.py", line 391, in async_update_vacuum
    await self.vacuum.async_get()
  File "/config/custom_components/robovac/tuyalocalapi.py", line 763, in async_get
    response = await self.async_recieve(message)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/robovac/tuyalocalapi.py", line 919, in async_recieve
    del self._listeners[message.sequence]
        ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
KeyError: 5852437
This error originated from a custom integration.

Logger: custom_components.robovac.tuyalocalapi.bf82bbd536988e0d97o7dg
Source: custom_components/robovac/tuyalocalapi.py:591
integration: Eufy Robovac (documentation, issues)
First occurred: 21:18:36 (50 occurrences)
Last logged: 21:43:41

'utf-8' codec can't decode byte 0xed in position 0: invalid continuation byte
'utf-8' codec can't decode byte 0xdd in position 9: invalid continuation byte

I have the same. tried for hours now and can’t get it right.

Be shure to use the right files and be sure you copied ALL FILES.
If you forget 1 file, even from another eufy model, it will not work.

Here is the link again :

Okay, I think I’ve figured it out. What worked for me was deleting everything first. I started by removing the eufy robovac integration and vacuum card from HACS. Then, I deleted all the robovac files in my custom_components folder.

After that, I put everything back in this order:

  1. First, I reinstalled the eufy robovac integration from HACS and added my vacuum. At this point, I only saw the battery status, which was showing as “unavailable.”
  2. Then, I downloaded and added the vacuum card again.
  3. Lastly, I copied the following folders back to Home Assistant via Samba share:
  • custom_components/robovac
  • custom_components/robovac/translations
  • custom_components/robovac/vacuums

By following this order, I finally got it working. It didn’t work for me to put the files in mannualy via file editor, Shamba share is the way to go.

Thanks so much! This indeed did the trick

Tried this @Bromeister-jpg , but it’s not working for me… I cannot even select the cleaner In the vacuum card. Also tried the other , manual option (without hacs) , same result.

It seems to discover the robot more or less, as it does show the IP address matching it, however, end result is just battery showing as “not available”

If have the L60 Hybrid and using a Mac top copy the files over via the samba add-on

This may be a stupid question, but how do you add the separate rooms to the integration?

You cant yet. I spent 12+ hours, with the help of Gemini, to figure it out. I even used abd and an android device to log the interactions to see if i could figure it out that way. So as of now, we have basic functionality.

1 Like

Ah, thank you for that. I thought that may be the case.

I noticed that the Python file for model T2268 seems to be missing in the “vacuum” folder.
I believe this could be the reason why some users are having configuration issues — for example, the battery status showing as unavailable.

Could you please check if you have the missing file and, if possible, share it?
It would also be great if you could provide a short guide or list of what needs to be updated or changed so the model works properly once the file is added.

Thanks a lot for your help!
Best,

Getting a weird issue - The MAC address returned by Eufy is completely different to the one shown in DHCP discovery. Any way to edit this?

1 Like

I followed instructions and this worked :partying_face:, however with one downside I already had a 30C but since the L60 SES showed up after reboot the 30C is no longer available (I’ve tried reboot and reboot while running and starting after reboot etc but with no sucess) has anyone come across this issue or is it not posible to have two showing in HA? Thanks

I also followed the instructions, with no success with that model.
Maybe the “Hybrid” variant has a different parameter set as the “Basic” one…

I have created a working prototype for L60 Hybrid by copying the configuration of T2277 (which is the L60 SES).

You can try it at your own risk using this repository via HACS: GitHub - Ascendor/robovac-l60-hybrid: Add a Eufy L60 and similar RoboVac easily to Home Assistant
(No need to manually copy files, just add the repository with HACS)

It is VERY early, really only copied, not adjusted at all. Only Tests that have been made: Battery status, starting cleaning, and sending back to charger.

There is one big issue for all of us though: The whole integration will stop working with HA 2026.1, because a deprecation kicks in then:

From the logs:

  • Detected that custom integration ‘robovac’ is setting state directly. Entity None (<class ‘custom_components.robovac.vacuum.RoboVacEntity’>) should implement the ‘activity’ property and return its state using the VacuumActivity enum. This will stop working in Home Assistant 2026.1, please create a bug report at GitHub · Where software is built
  • Detected that custom integration ‘robovac’ is setting the battery supported feature which has been deprecated. Integration robovac should remove this as part of migrating the battery level and icon to a sensor. This will stop working in Home Assistant 2026.8, please create a bug report at…
  • Detected that custom integration ‘robovac’ is setting the battery_level which has been deprecated. Integration robovac should implement a sensor instead with a correct device class and link it to the same device. This will stop working in Home Assistant 2026.8, please create a bug report at…

So someone ™ will need to rewrite these parts of the integration. I don’t know whether codefoodpixels still works on it or anybody else, and I will not have much time either.
So as long as that’s not cleared, anybody who needs the integration should postpone the upcoming HA-Upgrades…

I’ve created a version that has the deprecation of version 2026.1 removed. It works, I haven’t updated to 2026.1 yet though. If anything is not working, give me a hint.

You can get it at the same URL:

hi Ascendor, i sent you a pull request for 2026.1