Eufy Robovac 35c Working with Home_Assistant - Updated 11/2020 - How To Guide - Now with Edge Cleaning!

Thanks, I’m trying that but still running into issues with getting the dreaded decode error, and the vacuum ignoring commands, did the old version of EufyHome just to get the codes out of it. Does your vacuum show up as T2117 in the logcat output too, or T2118? I’ve tried both out, after adding a duplicate set of entries in the code for T2117, and I have the IP statically-assigned at my router. Have the folder named correctly, so it’s config/custom_components/eufy_vacuum/ with robovac.py, tuya.py, etc in there.

Not sure if it’s from firmware version, mine’s 1.1.1/1.0.6 in the app.

Shoot! Looks like some firmware has locked out most of the ID’s. Seems the workaround is to download the apk version 2.3.2 for eufy home and adb bridge that app instead of the google play one. Still testing on my end to see if this works!

Alright, Looks like I can confirm an older version of the eufo home app found Here - EufyHome 2.3.2 using the same steps to adb bridge into the device, I did NOT have to connect adb, it just worked. I ran one command in adb in windows

More detailed steps on using logcat:

Close the app on your mobile device or bluestacks

Connect the device to your laptop and enable USB debugging or ADB in bluestacks

Run

adb logcat -e 'tuya.m.my.group.device.list'

or

adb shell logcat -e 'tuya.m.my.group.device.list'

(assumes you have already installed the Android debug tools)

Launch the Eufy Home app

The output lines contain JSON, you’re looking for the values of

localKey (16 character hex string)
devId (20 character hex string).

Yep, those are the exact steps I followed to get those IDs, and loaded in. Still getting Decode error in the logs like follows (ID and IP obscured):

2020-04-21 12:39:39 ERROR (MainThread) [custom_components.eufy_vacuum.tuya] Expecting value: line 1 column 1 (char 0)
2020-04-21 12:39:39 ERROR (MainThread)[custom_components.eufy_vacuum.tuya] Failed to decrypt message from 12345678901234567890 (192.168.1.##:6668)

I even tried renaming the vacuum back to just ‘Robovac’ from the silly nickname I set, updating such in HA, but still get that. Is your vacuum running wi-fi 1.1.1 and MCU 1.0.6 for the firmware, or an older version? I doubt I can flash an older version unless there’s means to do so on the controller board and it’s easily accessed :<

Mines running up to date firmware…got to be something.

I found this helpful tip in the issue list on the github page. I have a Eufy vacuum 15c and was seeing the same errors as you. I followed this and it now works 100%:

Update:
For some reason, if you change the TuyaDevice default version to (3, 1) in line 438 of tuya.py it magically works 100%.

1 Like

What a WEIRD fix but it fixed it! Thank you!

I was able to get the key and the id… but I’m seeing this error. I’ve modified tuya.py also to have 3,1; Any Ideas? I’m on firmware wifi 1.1.3 MCU 1.1.1

2020-04-23 18:17:08 INFO (MainThread) [homeassistant.components.vacuum] Setting up vacuum.eufy_vacuum

2020-04-23 18:17:08 ERROR (MainThread) [homeassistant.components.vacuum] eufy_vacuum: Error on device update!

  File "/config/custom_components/eufy_vacuum/vacuum.py", line 75, in async_update
  File "/config/custom_components/eufy_vacuum/tuya.py", line 506, in async_get
  File "/config/custom_components/eufy_vacuum/tuya.py", line 352, in async_send
  File "/config/custom_components/eufy_vacuum/tuya.py", line 571, in _async_send
  File "/config/custom_components/eufy_vacuum/tuya.py", line 482, in async_connect

First issue looked to be a router issue. No I’m getting the following.

DEBUG:asyncio:Using selector: EpollSelector
DEBUG:eufy_robovac.tuya:Connecting to 00267738cc50e37fa5f5 (10.0.0.133:6668)
DEBUG:eufy_robovac.tuya:Sending to 00267738cc50e37fa5f5 (10.0.0.133:6668): Message(0x9, b'', 0, <Device 00267738cc50e37fa5f5 (10.0.0.133:6668)>)
DEBUG:eufy_robovac.tuya:Sending to 00267738cc50e37fa5f5 (10.0.0.133:6668): Message(0xa, {'gwId': '00267738cc50e37fa5f5', 'devId': '00267738cc50e37fa5f5'}, 3387076243, <Device 00267738cc50e37fa5f5 (10.0.0.133:6668)>)
ERROR:eufy_robovac.tuya:Connection to 00267738cc50e37fa5f5 (10.0.0.133:6668) failed: [Errno 104] Connection reset by peer
DEBUG:eufy_robovac.tuya:Disconnected from 00267738cc50e37fa5f5 (10.0.0.133:6668)
Starting cleaning...
DEBUG:eufy_robovac.tuya:Connecting to 00267738cc50e37fa5f5 (10.0.0.133:6668)
DEBUG:eufy_robovac.tuya:Sending to 00267738cc50e37fa5f5 (10.0.0.133:6668): Message(0x7, {'devId': '00267738cc50e37fa5f5', 'uid': '', 't': 1587685988, 'dps': {'5': 'auto'}}, 3387077245, <Device 00267738cc50e37fa5f5 (10.0.0.133:6668)>)
DEBUG:eufy_robovac.tuya:Sending to 00267738cc50e37fa5f5 (10.0.0.133:6668): Message(0x9, b'', 0, <Device 00267738cc50e37fa5f5 (10.0.0.133:6668)>)
DEBUG:eufy_robovac.tuya:Sending to 00267738cc50e37fa5f5 (10.0.0.133:6668): Message(0xa, {'gwId': '00267738cc50e37fa5f5', 'devId': '00267738cc50e37fa5f5'}, 3387077254, <Device 00267738cc50e37fa5f5 (10.0.0.133:6668)>)
ERROR:eufy_robovac.tuya:Connection to 00267738cc50e37fa5f5 (10.0.0.133:6668) failed: [Errno 104] Connection reset by peer
DEBUG:eufy_robovac.tuya:Disconnected from 00267738cc50e37fa5f5 (10.0.0.133:6668)
Pausing...
DEBUG:eufy_robovac.tuya:Connecting to 00267738cc50e37fa5f5 (10.0.0.133:6668)
DEBUG:eufy_robovac.tuya:Sending to 00267738cc50e37fa5f5 (10.0.0.133:6668): Message(0x7, {'devId': '00267738cc50e37fa5f5', 'uid': '', 't': 1587685993, 'dps': {'2': False}}, 3387082258, <Device 00267738cc50e37fa5f5 (10.0.0.133:6668)>)
DEBUG:eufy_robovac.tuya:Sending to 00267738cc50e37fa5f5 (10.0.0.133:6668): Message(0x9, b'', 0, <Device 00267738cc50e37fa5f5 (10.0.0.133:6668)>)
DEBUG:eufy_robovac.tuya:Sending to 00267738cc50e37fa5f5 (10.0.0.133:6668): Message(0xa, {'gwId': '00267738cc50e37fa5f5', 'devId': '00267738cc50e37fa5f5'}, 3387082304, <Device 00267738cc50e37fa5f5 (10.0.0.133:6668)>)
DEBUG:eufy_robovac.tuya:Received message from 00267738cc50e37fa5f5 (10.0.0.133:6668): Message(0x9, b'', 0, None)
DEBUG:eufy_robovac.tuya:7033a63297d2faa3e0c0c4c5f307f8111e261305e10b8ff2aa31ebccecd4ce12
ERROR:eufy_robovac.tuya:'utf-8' codec can't decode byte 0xa6 in position 2: invalid start byte
ERROR:eufy_robovac.tuya:Failed to decrypt message from 00267738cc50e37fa5f5 (10.0.0.133:6668)
Disconnecting...
DEBUG:eufy_robovac.tuya:Disconnected from 00267738cc50e37fa5f5 (10.0.0.133:6668)

Seeing a few different things in the logs


2020-04-23 19:05:33 ERROR (MainThread) [custom_components.eufy_vacuum.tuya] 'utf-8' codec can't decode byte 0xa6 in position 2: invalid start byte

2020-04-23 19:05:33 ERROR (MainThread) [custom_components.eufy_vacuum.tuya] Failed to decrypt message from 00267738cc50e37fa5f5 (10.0.0.133:6668)

Some functions should be working for you, but maybe not all functions. See issue #8 on the main github project. It’s the same issue you are having. I’m on wifi 1.1.1 and mcu 1.1.0 which is probably why I don’t see any errors. I believe mcu version 1.1.1 is where these errors start appearing.

I read issue #8. I’m getting the same behavior as the other guy that has the 15C max. I see the error in the logs but no status updates or functions work. Anytime I hit any button I just see decrypt errors in the logs. I’ve tried change the version in tuya.py from 3.3 -> 3.1 but nothing. Bummer… Was really hoping this integration would work. Still a pretty nice bot though. If you have any other suggestions I’m open to trying them. Also thank you for your input.

I just got a Eufy 30c yesterday and I’m trying to get it into HA, but I seem to be failing early!

Steps so far:

  1. enabled USB debugging on android phone
  2. connected it to my mac
  3. opened terminal from the ‘Platform-tools’ folder
  4. entered adb logcat -e 'tuya.m.my.group.device.list'
  5. opened eufy app
    6 terminal just says:
    --------- beginning of system
    --------- beginning of main

I don’t get any info about the device at all. Any idea where I’m going wrong?

As stated in the comments in the thread, you need to install an older version of EufyHome. If you find an APK mirror, go for one from around September or October of 2019. They patched showing those in newer versions.

You may also need to do as another suggested and edit a particular line of a file.

Thanks for the tip!

I managed to download eufyhome 2.3.1 which worked for me.

Managed to now get it integrated!

Let the robot automation commence!!

Great info on this page. I was able to pull the localkey and deviceid using the old APK.

I’m having trouble just getting the component installed.
I moved the files into custom_components/eufy_vaccum.
But the HA logs just say Couldn’t be setup, check config.
What I have typed wrong in the config?

2020-05-11 16:47:45 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: domain=persistent_notification, service=create, service_data=title=Invalid config, message=The following integrations and platforms could not be set up:

 - eufy_vacuum

Please check your config., notification_id=invalid_config>
eufy_vacuum:
  devices:
  - name: Robovac
    address: x.x.x.x
    access_token: eufylocalkey
    id: eufydeviceid
    type: T2118

Did you try changing the tuya.py file as detailed in this post above?:

I’m having a little trouble using this with node-red. I’m trying to get it to send me a message when the vacuum state changes. It’s mainly working, except for when it docks. It just doesn’t send me a notification when it has docked. Any help would be appreciated!

[{"id":"ca3d4154.bba61","type":"api-call-service","z":"30a3db46.b89244","name":"Vacuum On message","server":"cfa79f02.db9d4","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_hasskit_pixel_4","entityId":"","data":"{\"title\":\"Eufy is on the move\",\"message\":\"The house is being cleaned\"}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":1040,"y":440,"wires":[[]]},{"id":"563e2ef6.951a7","type":"api-call-service","z":"30a3db46.b89244","name":"Vacuum Returning message","server":"cfa79f02.db9d4","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_hasskit_pixel_4","entityId":"","data":"{\"title\":\"Eufy is hopefully going home\",\"message\":\"Lets see if the plucky little fella makes it home.\"}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":1060,"y":500,"wires":[[]]},{"id":"40b7aaeb.6f1434","type":"api-call-service","z":"30a3db46.b89244","name":"Vacuum Home message","server":"cfa79f02.db9d4","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_hasskit_pixel_4","entityId":"","data":"{\"title\":\"Eufy got home\",\"message\":\"Yay - he made it back!\"}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":1050,"y":380,"wires":[[]]},{"id":"3e41b986.6c6b06","type":"server-state-changed","z":"30a3db46.b89244","name":"Vacuum Status","server":"cfa79f02.db9d4","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"vacuum.robovac","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":480,"y":460,"wires":[["ce07163c.00af28"]]},{"id":"ce07163c.00af28","type":"switch","z":"30a3db46.b89244","name":"","property":"data.new_state.attributes.status","propertyType":"msg","rules":[{"t":"eq","v":"docked","vt":"str"},{"t":"eq","v":"cleaning","vt":"str"},{"t":"eq","v":"returning","vt":"str"},{"t":"eq","v":"idle","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":710,"y":460,"wires":[["aecdfa80.a54df8"],["832147a1.7439a8"],["bc191086.617f7"],["1a6336ab.d6dd09"]]},{"id":"aecdfa80.a54df8","type":"change","z":"30a3db46.b89244","name":"Delete","rules":[{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":870,"y":380,"wires":[["40b7aaeb.6f1434"]]},{"id":"832147a1.7439a8","type":"change","z":"30a3db46.b89244","name":"Delete","rules":[{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":870,"y":440,"wires":[["ca3d4154.bba61"]]},{"id":"bc191086.617f7","type":"change","z":"30a3db46.b89244","name":"Delete","rules":[{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":870,"y":480,"wires":[["563e2ef6.951a7"]]},{"id":"1a6336ab.d6dd09","type":"change","z":"30a3db46.b89244","name":"Delete","rules":[{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":870,"y":560,"wires":[["a9a36b14.ece448"]]},{"id":"a9a36b14.ece448","type":"api-call-service","z":"30a3db46.b89244","name":"Vacuum Idle message","server":"cfa79f02.db9d4","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_hasskit_pixel_4","entityId":"","data":"{\"title\":\"Eufy is idle\",\"message\":\"He idle.\"}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":1040,"y":560,"wires":[[]]},{"id":"cfa79f02.db9d4","type":"server","z":"","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false}]

@Martin_Granger yeah The integration doesn’t seem to start. Not sure what else to try.

Obvious one, but have you rebooted ha?