Automating a Chinese robot vacuum

A Roomba--or equivalent robot vacuum--is something I never felt I needed to purchase for myself. I have an old broom from colleg and a decent, budget upright vacuum. But, what happens when you're gifted with a robot vacuum...?

Behold, the holiday-gifted Ecovacs Deebot N79:

A good boy

Once rated Wirecutter's Best Budget Robot Vacuum, the Deebot N79 fills me with both pride and guilt as it conquers the 2D world of my apartment. Whether it's effortlessly chewing up cat litter, or getting irreparably tangled in lamp cords.

Deebot has been a great addition to our home, but brings with it a few unavoidable facts:

-The iOS app is garbage and provides no HomeKit support
-The included handheld remote works, but speaks IR to Deebot (and can't control him around corners)

Trying to set a schedule on the handheld remote itself only works with near line-of-sight. And the schedule settings in the iOS app provide almost zero granularity. It provides no fine-tuned control of how long Deebot runs, whether it does full-room or edge cleaning, etc.

Make Deebot do the WiFi

In order to control Deebot over the network, we need to connect Deebot to the network. The instructions here speak for themselves.

Once you've created your Ecovacs account on a server instance somewhere in China, try using the app to do the Deebot basics--cleaning, returning to the charge station, and directional control.

Now Deebot is yet another WiFi device in your home.

Install sucks

William Pietri on GitHub created a set of python scripts that allow you to control your Ecovacs robot vacuum from the command-line.

Install them with pip:

$ pip install sucks

Let's log in to the Ecovacs servers with the credentials you just created:

$ sucks login
Ecovacs app email: <your email>
Ecovacs app password: <your password>
your two-letter country code: us
your two-letter continent code: na
Config saved.

With that all set-up, let's try to make Deebot do stuff from the CLI:

$ sucks clean 5
$ sucks clean 20 edge 15
$ sucks stop
$ sucks charge

Cron your vacuum

Lastly, let's make a cron entry to run Deebot every day at 4PM local time:

$ crontab -e
0 16 * * * /<wherever_you_put_the_executable>/sucks clean 15 edge 10

The above entry will--everyday at 16:00--command Deebot to perform a normal clean operation for 15 minutes, followed by an edge operation for 10 minutes, then instruct Deebot to return to its charging home.

What next?

Pietri's project also includes a python library, so you can further add programatic logic to your vacuum.

Maybe you could:

-Have Deebot wake you up in the morning
-Have Deebot keep your cats company
-Have Deebot run a cleaning operation whenever Mom calls