robovac icon indicating copy to clipboard operation
robovac copied to clipboard

Support for L60 SE

Open meanandpinchy opened this issue 1 year ago • 67 comments

The unit is detected, but has no entities except for battery, which is "unavailable". Please add support for the L60 SE.

meanandpinchy avatar Jun 01 '24 19:06 meanandpinchy

I second the support for the L60 SES!

mumpers68 avatar Jun 15 '24 21:06 mumpers68

yes, please!

stoozak avatar Jun 19 '24 14:06 stoozak

I was looking into this, seems the TUYA_CODES are incorrect for this robovac. Yet to firgure out any of the codes, except for battery life, which is 163. Is there any documentation about these codes available?

For reference, this is a response when the device is doing nothing: {'151': True, '156': True, '158': 'Turbo', '159': aTrue, '160': False, '161': 41, '163': 99}

Harm-Veraa avatar Jun 25 '24 19:06 Harm-Veraa

,

Where do we plug these in? Happy to test and feedback.

stoozak avatar Jun 25 '24 19:06 stoozak

Depends if you have main branch or better-dps branch. For main branch they are at the top of the 'vacuum' file, if I am not mistaken (currently on the other branch). On better-dps branch they are at the specific file for your vacuum. In our case this is T2278 (or at least for me, I have the hybrid, not sure if it's different but otherwise I expect T2277).

In both cases, before it will even load, you need to add your vacuum. In the better-dps branch you copy the specific model file and add it to the list of vacs in init. In the main you can check the robovac file and add it to the list of 'L' models.

If you are on better-dps branch, also make sure to make a comment for extra features (as they crash currently, possible because code is incorrect, not sure).

robovac_features = 0; # RoboVacEntityFeature.CLEANING_TIME | RoboVacEntityFeature.CLEANING_AREA | RoboVacEntityFeature.DO_NOT_DISTURB | RoboVacEntityFeature.AUTO_RETURN | RoboVacEntityFeature.ROOM | RoboVacEntityFeature.ZONE | RoboVacEntityFeature.BOOST_IQ | RoboVacEntityFeature.MAP | RoboVacEntityFeature.CONSUMABLES

After all of this, a logger can be added to log everything. If you change the code of the battery to 161, you'll see that one works in the home panel.

Harm-Veraa avatar Jun 25 '24 19:06 Harm-Veraa

It's curious, if I start the robot or do something with it, the status does not change according to the Logger. Perhaps another api call is required?

Harm-Veraa avatar Jun 25 '24 19:06 Harm-Veraa

Should the developer read this, and willing to look into it. Some more messages from the device, when I start it via the Eufy app. It looks like it's encrypted. I noticed that '179' has 4 values which would match potential states the device is in. (positioning, cleaning, heading home, charging). These only reported after a first run tho.

{'151': True, '156': True, '158': 'Turbo', '159': True, '160': False, '161': 41, '163': 99, '177': 'DAjZhNCLlIztzgFSAA==', '153': 'BBADGgA=', '178': 'DQiuzqvylIztzgESAR8=', '152': 'AggG', '179': 'FhIUEhIIEBABIGMozsPsswYwgcTsswY=', '173': 'GAoSMgoKAggBEgQIARgPOgQKAggBEgIIAQ==', '176': 'JgoAGgBSCBoAIgIIASoAWDBiFAoSCghOcjE4X0lvVBoGEKnC7LMG', '169': 'xxx'}

Harm-Veraa avatar Jun 25 '24 20:06 Harm-Veraa

Righto, so using the DPS branch I copied the 2273 config and renamed it to 2277 and added the reference to the model number in init.

Using 161 the battery shows as 0%, and log shows the following:


2024-06-25 21:10:21.757 ERROR (MainThread) [homeassistant.components.vacuum] Error adding entity vacuum.fred for domain vacuum with platform robovac
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/asyncio/tasks.py", line 520, in wait_for
    return await fut
           ^^^^^^^^^
  File "/usr/local/lib/python3.12/asyncio/locks.py", line 386, 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.12/asyncio/tasks.py", line 519, in wait_for
    async with timeouts.timeout(timeout):
  File "/usr/local/lib/python3.12/asyncio/timeouts.py", line 115, 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 600, in _async_add_entities
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 914, in _async_add_entity
    await entity.add_to_platform_finish()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1354, in add_to_platform_finish
    await self.async_added_to_hass()
  File "/config/custom_components/robovac/vacuum.py", line 297, in async_added_to_hass
    await self.async_forced_update()
  File "/config/custom_components/robovac/vacuum.py", line 326, in async_forced_update
    await self.async_update_vacuum()
  File "/config/custom_components/robovac/vacuum.py", line 322, 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(
custom_components.robovac.tuyalocalapi.ResponseTimeoutException: Timed out waiting for response to sequence number 818946
2024-06-25 21:10:26.827 DEBUG (MainThread) [custom_components.robovac.tuyalocalapi.bfb2df8ed89ef1ee85zulu] Processing queue. Current length: 1
2024-06-25 21:10:26.827 DEBUG (MainThread) [custom_components.robovac.tuyalocalapi.bfb2df8ed89ef1ee85zulu] Sending to bfb2df8ed89ef1ee85zulu (192.168.10.18:6668): Message(0x9, b'', 0, <Device bfb2df8ed89ef1ee85zulu (192.168.10.18:6668)>)
2024-06-25 21:10:26.828 DEBUG (MainThread) [custom_components.robovac.tuyalocalapi.bfb2df8ed89ef1ee85zulu] Connecting to bfb2df8ed89ef1ee85zulu (192.168.10.18:6668)
2024-06-25 21:10:26.836 DEBUG (MainThread) [custom_components.robovac.tuyalocalapi.bfb2df8ed89ef1ee85zulu] Received message from bfb2df8ed89ef1ee85zulu (192.168.10.18:6668): Message(0x9, b'', 0, None)

stoozak avatar Jun 25 '24 20:06 stoozak

I also get this error sometimes, seems to be when I clicked a button and then the sequence number goes haywire.. Not sure tho. In any case, the last 3 messages show it is working. At least the communication part is.. Can you try 163 for battery? That is what I have currently.

Harm-Veraa avatar Jun 25 '24 20:06 Harm-Veraa

One thing to add. Battery wont show in a default card (when the device is so-called offline). Go to the device info itself under settings -> devices. Should show there.

Harm-Veraa avatar Jun 25 '24 20:06 Harm-Veraa

Hmmm, no luck. It still shows 0%. I also don't seem to get the log state with the encrypted numbers that you got.

stoozak avatar Jun 25 '24 21:06 stoozak

Did you enable debug logging?

Harm-Veraa avatar Jun 26 '24 05:06 Harm-Veraa

Afraid so :(

stoozak avatar Jun 26 '24 12:06 stoozak

Mhh okay odd. I don't know why it won't work for you.. when I have more time I might look into it further. Should I find a proper solution I'll see if I can create a PR

Harm-Veraa avatar Jun 26 '24 12:06 Harm-Veraa

Some of these codes may be helpful: https://github.com/CodeFoodPixels/robovac/issues/42#issuecomment-1873242870

stoozak avatar Jun 26 '24 14:06 stoozak

  • 1 for the LS60 SES integration please.

JohnD76 avatar Jul 08 '24 14:07 JohnD76

I am having similar issues, my L60SES replaces a 15C MAX. I have removed the Eufy integration from HACS and rebooted. Amended the robots file to include the T2277 model number and when adding a device for some reason it identifies the L60SES and the name of the robot, burt gives it the MAC address of the old robot (15C MAX), even though this is removed from the Eufy app.....

I can't control the robot or see the battery status sadly via HA.

JohnD76 avatar Jul 11 '24 11:07 JohnD76

Hi all! Good news: I've been able to get my L60 SES to work in Home assistant!

Ugly-but-working code is here https://github.com/maximoei/robovac/tree/L60-support This version very much breaks supports for all other Robovacs, so quite some work is still needed to get it integrated back into the repo - any help is appreciated! I added config files for T2267 (L60), T2277 (L60 SES), T2278 (L60 SES Hybrid). I own the T2277 (L60 SES), so other are fully untested.

So:

  • L60 (and probably many others) have a new control mechanism, which is based on encrypted/protobuf values. These have been reverse engineered before by people from IObroker.net - git @TA2k
  • Some further values I found here @terabyte128
  • Lots of values still not unencrypted, you can help! Potentially approach is to move to real protobuf support, but for now a few hard coded messages are sufficient

What is the integration able to do:

  • Start auto clean, pause and return to dock (UI/card)
  • Change fan speed (UI/card)
  • See battery status (UI/card)
  • Locate the robot (UI/card)
  • Change volume (service)
  • Change boost IQ (service)

Very much not supported:

  • Room / Zone clean
  • Mopping related features
  • See map

I'll try to work this back into the better-dps branch, but any help here is appreciated. Happy to hear your feedback as well! image image

maximoei avatar Jul 25 '24 09:07 maximoei

Nice! How did you find out the codes?

Harm-Veraa avatar Jul 25 '24 10:07 Harm-Veraa

This is great to see, I have cleaned out the old integration and installed this but I still only see just the battery entity. I just have the L60

IainPHay avatar Jul 25 '24 11:07 IainPHay

Nice! How did you find out the codes?

Via the other work I referenced. Some of the error codes by seeing what is being logged in the integration

This is great to see, I have cleaned out the old integration and installed this but I still only see just the battery entity. I just have the L60

Sometimes it only starts reporting detailed state after I start (and stop) a cleaning cycle from the app. After that, session seems to 'stick'. Also, if you have errors in your log, please share

maximoei avatar Jul 25 '24 11:07 maximoei

Thanks for the feedback, must admit I'd not thought of triggering it via the app. I'll give that a try and see if it grabs the info

IainPHay avatar Jul 25 '24 11:07 IainPHay

Nice! How did you find out the codes?

Via the other work I referenced. Some of the error codes by seeing what is being logged in the integration

This is great to see, I have cleaned out the old integration and installed this but I still only see just the battery entity. I just have the L60

Sometimes it only starts reporting detailed state after I start (and stop) a cleaning cycle from the app. After that, session seems to 'stick'. Also, if you have errors in your log, please share

Interesting! I also tried this but for me every response seemed encrypted or something.. glad you figured it out !

Harm-Veraa avatar Jul 25 '24 12:07 Harm-Veraa

Was able to get my L60 SES (T2277) working on your fork. Nice work! Will test a full run later tonight.

Had to make 2 minor changes to get it running:

  • Add the model to vacuums/__init__.py, was previously missing
  • vaccuums/T2267.py had the wrong class name causing an import error - updated it to match the file name

[!IMPORTANT] The fork was updated to fix these issues in this commit. These changes are no longer necessary.

asportnoy avatar Jul 25 '24 13:07 asportnoy

Was able to get my L60 SES (T2277) working on your fork. Nice work! Will test a full run later tonight.

Had to make 2 minor changes to get it running:

  • Add the model to vacuums/__init__.py, was previously missing
  • vaccuums/T2267.py had the wrong class name causing an import error - updated it to match the file name

That second bit helped me out, thanks! I have it running now but it always shows error despite being controllable but it's a massive improvement on just having the battery status :)

IainPHay avatar Jul 25 '24 14:07 IainPHay

Was able to get my L60 SES (T2277) working on your fork. Nice work! Will test a full run later tonight.

Had to make 2 minor changes to get it running:

  • Add the model to vacuums/__init__.py, was previously missing
  • vaccuums/T2267.py had the wrong class name causing an import error - updated it to match the file name

That second bit helped me out, thanks! I have it running now but it always shows error despite being controllable but it's a massive improvement on just having the battery status :)

I'm having the L60 remaining unavailable, what exactly did you change in the file?

jb123567 avatar Jul 25 '24 19:07 jb123567

The latest commit on that fork includes fixes for the issues I mentioned, so you shouldn't have to manually change anything anymore. Make sure that you have the correct fork/branch checked out and you pulled the latest commit. If so, check the logs in home assistant.

asportnoy avatar Jul 25 '24 19:07 asportnoy

The latest commit on that fork includes fixes for the issues I mentioned, so you shouldn't have to manually change anything anymore. Make sure that you have the correct fork/branch checked out and you pulled the latest commit. If so, check the logs in home assistant.

Yep, realised just after posting, HA had done something weird with the files. Started again completely and now working happily. Did have to start the device in the app to get it to register.

jb123567 avatar Jul 25 '24 19:07 jb123567

Full test run was mostly successful! I did notice one issue though: when I checked the logs afterwords, it looks like it was intermittently unavailable while it was running. Based on the timings, my guess is that this was when it returned to the base to empty at cut hair, but I was not actually there so I can't confirm. Nothing in the logs. Not a huge deal but definitely worth making a note of at least.

image

asportnoy avatar Jul 26 '24 01:07 asportnoy

Hi all, a few updates from my continued testing (on my L60 SES) over the last week or so:

  • A new software update was available on the vacuum (1.3.27). As far as I can tell, it works just as it did before, so should be safe to update your vacuums.
  • The unknown status issue mentioned in my last comment was in fact when the vacuum returns home to empty itself as I suspected.
  • I noticed in HA that I can pause the vacuum just fine, but resuming it does not do anything.
  • "Do not disturb" in the attributes section is showing as "DgoAEgoKABICCBYaAggI", which I think is another message that needs handling. It is currently disabled for me.

Besides those issues, it seems to work fine! Might be good to clean up a bit as needed and create a PR now, and then come back for whatever other issues there are since this is definitely a huge improvement over what's currently available.

* This was all done on commit fc1d0f5. I just noticed there are some new commits, so I will pull and test those later.

asportnoy avatar Aug 01 '24 16:08 asportnoy