Skip to main content

a library for controlling certain robot vacuums

Project description

A simple command-line python script to drive a robot vacuum. Currently known to work with the Ecovacs Deebot N79, M80 Pro, M81, M88 Pro, and R95 MKII from both North America and Europe.

Does it work for your model as well? Join the discussion on the sucks-users mailing list.

If you’re curious about the protocol, I have a rough doc started. I’ll happily accept pull requests for it.

Why the project name? Well, a) it’s ridiculous that I needed to MITM my own vacuum. This is not the future I signed up for. And b), it’s a vacuum.

Installation

If you have a recent version of Python 3, you should be able to do pip install sucks to get the most recently released version of this.

Usage

To get started, you’ll need to have already set up an EcoVacs account using your smartphone.

With that ready, step one is to log in:

% sucks login
Ecovacs app email: [your email]
Ecovacs app password: [your password]
your two-letter country code: us
your two-letter contienent code: na
Config saved.

That creates a config file in a platform-appropriate place. The password is hashed before saving, so it’s reasonably safe. (If it doesn’t appear to work for your continent, try “ww”, their world-wide catchall.)

With that set up, you could have it clean in auto mode for 10 minutes and return to its charger:

% sucks clean 10

You could have it clean for 15 minutes and then do an extra 10 minutes of edging:

% sucks clean 15 edge 10

If you wanted it to clean for 5 minutes and then stop without charging:

% sucks clean 5 stop

If it’s running amok and you’d just like it to stop where it is:

% sucks stop

To tell it to go plug in:

% sucks charge

I run mine from my crontab, but I didn’t want it to clean every day, so it also has a mode where it randomly decides to run or not based on a frequency you give it. My crontab entry looks like this:

0 10 * * * /home/william/projects/sucks/sucks.sh clean -f 4/7 15 edge -f 1/14 10

This means that every day at 10 am, it might do something. 4 days out of 7, it will do 15 minutes of automatic cleaning. 1 day out of 14, it will do 10 minutes of edging. And afterward it will always go back to charge.

Library use

You are welcome to try using this as a python library for other efforts. The API is still experimental, so expect changes. Please join the mailing list to participate in shaping the API.

A simple usage might go something like this:

import sucks

config = ...

api = EcoVacsAPI(config['device_id'], config['email'], config['password_hash'],
                         config['country'], config['continent'])
my_vac = api.devices()[0]
vacbot = VacBot(api.uid, api.REALM, api.resource, api.user_access_token, my_vac, config['continent'])
vacbot.connect_and_wait_until_ready()

vacbot.run(Clean())  # start cleaning
time.sleep(900)      # clean for 15 minutes
vacbot.run(Charge()) # return to the charger

Developing

If you’d like to join in on developing, I recommend checking out the code, setting up a virtual environment, and doing pip install -e .. You can run the existing tests using nosetests. Please add tests for any new functionality.

For more information see the development documentation

Thanks

My heartfelt thanks to:

  • xmpppeek, a great library for examining XMPP traffic flows (yes, your vacuum speaks Jabbber!),

  • mitmproxy, a fantastic tool for analyzing HTTPS,

  • click, a wonderfully complete and thoughtful library for making Python command-line interfaces,

  • requests, a polished Python library for HTTP requests,

  • Decompilers online, which was very helpful in figuring out what the Android app was up to,

  • Albert Louw, who was kind enough to post code from his own experiments with his device, and

  • All the users who have given useful feedback and contributed code!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

sucks-0.9.3-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

sucks-0.9.3-py2-none-any.whl (15.9 kB view details)

Uploaded Python 2

File details

Details for the file sucks-0.9.3-py3-none-any.whl.

File metadata

  • Download URL: sucks-0.9.3-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/20.7.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.5.2

File hashes

Hashes for sucks-0.9.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2b6de076eff94003a3efb85a9e7c9e281faef57bb9c643fbddda30855993ae8f
MD5 75ecdf33a446f7c915e0828319b0ec84
BLAKE2b-256 c65de6f34241045088ab90f4dce1eb0af3e9a0a1eb044c4743bb61b505434799

See more details on using hashes here.

Provenance

File details

Details for the file sucks-0.9.3-py2-none-any.whl.

File metadata

  • Download URL: sucks-0.9.3-py2-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.9.1 pkginfo/1.4.1 requests/2.18.4 setuptools/36.6.0 requests-toolbelt/0.8.0 tqdm/4.19.4 CPython/3.5.2

File hashes

Hashes for sucks-0.9.3-py2-none-any.whl
Algorithm Hash digest
SHA256 a30ff284692afe3bd18d38e6fdee541f569f0f0c0f615c101b1e9ba5930254df
MD5 62f8fc77bd949dcf699550f76c1e5d15
BLAKE2b-256 acc9f8f3781d1d19a43bcce5c8d549ad8ae277a138b119b235a001cea38a83c8

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page