Support for Eufy RoboVac or Smart Bulbs?

I would be interested in a component for RoboVac 11c…
Coding this seems way over my head!

Any updates on RoboVac support on this by chance? That’s the one thing that’s sorely missing here!

I’ve done some research into the local Robovac API - it is different from the API used for bulbs and switches. I’ve added some detail on this ticket on the underlying library that supports those bulbs and switches. I’ll give writing a new library and home assistant support a shot in the next few weeks, unless someone else beats me to it. I’ve got some work on the Hue integration to tidy up first.

1 Like

Just an update on this. After many days and nights of banging my head against possible options, and several back and forths with Eufy support, I was able to get my RoboVac 30C’s working in HA. It’s highly hacked together and ugly, mkaes the Eufy mobile app dang-near worthless, and requires the HASS.io Google assistant server add-on since it’s done via the already existing GA/Eufy integration. And since I am moving shortly all I’ve done is proof of concept it with a couple commands. That being said, it does work lol which being basically the last ‘smart’ device in my household that didn’t yet work in HA made it extremely satisfying :slight_smile:

If anyone is interested I can give some short info on how I went about doing it.

1 Like

I’d definitely be interested. I’m in the same boat, my 11C is the only item I have (so far) thats not integrated into HA

As luck would have it, I just shut down all my servers as well as my NAS where I have my backups last night…so I can’t get you an exact config until sometime next week. However, the gist of it is as follows…and keep in mind I have multiple 30C’s so conceptually this should all be the same but there may be minor variances.

  • Per https://www.eufylife.com/pages/google-assistant-en, Eufy’s Google Assistant service should work with multiple vacuums if you say “OK Google, ask RoboVac (robot name) to start cleaning”
  • I found the above to not be fully accurate through back and forth incl. video evidence with their support. Long story short, you could not say “OK Google, ask RoboVac Entryway to start cleaning”, as it would simply “transfer” over to the Eufy integration which would then say “Please say the name of the device you want to use. You have Hallway, Entryway, …”
  • Eufy’s full response was the following:

"Really appreciated you provided the details and a short video. We tested again and we replicated your case. Our software team explained that we are using customer action with Google now, which means Google only allows us to use the given/last name to control the device. For example,

Common given names: John/Mary

Common last names: Smith/Adams

Please view detail here:

https://cloud.google.com/dialogflow-enterprise/docs/reference/system-entities

So, Google can not recognize “entryway” for the first time when you give the command to it. Would you please give your four RoboVac the given names to have a try? This will work for you.

And we really appreciate your feedback, we will explain clearly in our app. Thanks for your understanding. Let me know if you have any other questions.

Have a great day!"

  • So while I could not say “OK Google, ask RoboVac Entryway to start cleaning” and have the EntryWay RoboVac instantly start cleaning, I discovered that sure enough I could rename the EntryWay to “John” (or any other common first or last name) in the Eufy app, and then say “OK Google, ask RoboVac John to start cleaning”. And no, I’m not even joking on this one. I wish I was -_-
  • From there, it was just a matter of setting up this addon here: Community Hass.io Add-on: Google Assistant Webserver (broadcast messages without interrupting music)
  • Then figuring out how to tie the entity button to call the web service at the proper URL (which I want to say is http://[local_hass_ip]:5000/command?message=ask%20robovac%20john%20to%20start%20cleaning). But again the exact URL and the entity button to URL call is what I don’t have the exact config for available at the moment, but I can get you exact info sometime next week if you’d like.

It’s far, far from the most “ideal” solution as again unless you are better with names than I you’re unlikely to remember which RoboVac “John” is in the app, but it makes it pretty seemless from the HA side as you’ll never see that it’s actually calling that jankyness in the background. Hacky, kinda crappy, but it works lol. Let me know if you have any other questions :slight_smile:

Wow, thanks for the detailed write up. Its a shame Eufy dont just get their finger out and offer IFTTT support or something by now.

I’ll check out that link and give it a try tomorow, thankfully mine is called Dave anyway (Dave sorts downstairs, when I get another vac for upstairs I’ll need a name beginning with U).

Not sure if your 30C is the same as my 11C is so much as it offers a few different modes and 2 different strength settings, I’m guessing you don’t have access to them? I’m really wanting to set mine away on max mode, but at this point I’ll be grateful if its gets connected at all.

Thanks again :+1:

Yeah they’re in a box as well, lol…and yeah I’ve asked Eufy twice now about why they don’t have IFTTT support and why their integration sucks so bad but all I’ve gotten are generic BS responses. Vacuum does it’s core job (vacuuming) well and is pretty cost effective compared to other models so I can’t complain too much, but that would definitely be nice.

And as far as the strength settings I know it has that but frankly I’ve just left it on auto…I’m not sure off the top of my head if that can be changed by voice or in the app or not. I’ll try to remember to post further config info next week for ya on the exact URL and entity button/config info.

I’ve got a proof-of-concept Python library for direct integration built out over this weekend. I’m hoping to work on it more and get an initial release in the next few weeks, then follow that up with Home Assistant integration.

2 Likes

This looks great - I’ll have a play with it later tonight!
Do you think support could be built for Hassio given the Open SSL requirements? Not sure that’s built in…

Home Assistant already requires the cryptography library which is why I picked it, but there are alternative options if openssl is a problem. Not hard to switch it out now the usage is figured out.

That demo works with my robovac 30C. Thanks for your work!

1 Like

Hi, Could you tell me where you find DEVICE_ID & LOCAL_KEY for the Robovac? Thanks!

I basically followed mitchellrj’s advice and used adb logcat on an android phone while using the eufy home app.

1 Like

Following up to my previous “workaround” for those who are interested in a way to make this work until official support is implemented, here are my configs:

In configuration.yam I’ve added:

notify:    
  - name: Google Assistant Command
    platform: rest
    resource: http://[hass_server_ip]:5000/command

and:

#Vacuum Entity Placeholders
vacuum:
  - platform: mqtt
    name: "Entryway Vacuum"
  - platform: mqtt
    name: "Hallway Vacuum"
  - platform: mqtt
    name: "Master Bedroom Vacuum"
  - platform: mqtt
    name: "Basement Vacuum"

And in ui-lovelace.yaml I’ve added:

# View tab title.
  - title: Vacuums
    icon: mdi:robot-vacuum-variant
    panel: true
    cards:
      - type: vertical-stack
        cards:
          - type: horizontal-stack
            cards:
              - type: entities
                title: Entryway
                entities:
                  - entity: vacuum.entryway_vacuum
              - type: entity-button
                icon: mdi:robot-vacuum
                entity: vacuum.entryway_vacuum
                name: Start
                tap_action:
                  action: call-service
                  service: notify.google_assistant_command
                  service_data:
                    message: "ask robovac ben to start cleaning"

I think I copied all the related config entries, if I missed anything let me know. I also haven’t messed at all with anything formatting wise for multiple buttons/multiple units, controls other than starting cleaning for that one vacuum, etc. as I haven’t had time, but that’s the gist and it does work in case this helps anyone else.

I’ve pushed an update to the Python library now to allow it to be used as an extremely beta custom component in Home Assistant. There’s some brief instructions in the README. It’s all based on my Robovac 30C (T2118), so other variants may not work.

Discovery and finding the local key more easily is something I’ve been looking into, but it is not something I’m going to be able to achieve in the short term. For now, the adb logcat approach is the easiest way :frowning:

2 Likes

@mitchellrj I’m probably doing something wrong, but I’m still having trouble finding the local key…did an ADB logcat and piped it out to a text file, then searched eufy, the name of one of my robovacs, etc. after messing around in the eufy app for a few seconds, and found the device_id easily enough…but the local key is still eluding me. Is there an exact string I should be searching for? Or is there something specific I should be doing in the Eufy app while capturing the logcat? The logcat quickly becomes rather huge lol. Thanks again for this!

the strings where called the following:

  • uuid or devid for for the device id

  • localKey for the local key…

you should find these in a JSON-string. I didn’t do anything special but browsing the app and sending some commands to the vacuum.

Gotcha…first time I did it I was on a remote network, maybe you have to be local? Otherwise maybe I just missed something. I believe I found those keys you’re referring to near some text mentioning “tuya” several times. Thanks!

@Knapoc
The JSON I discovered seemed to have something different (given the different model I guess); ‘device_key’ & ‘local_code’ (both different) were present - assuming one of these is the local key. Both are 16 chars.

‘device_id’ was a hex string in 5 blocks.

@mitchellrj
I know you said it this is built for the 30C, my 11C is getting this:

ConnectionRefusedError: [Errno 111] Connection refused

Thanks all for the input and contributions so far! :smile: