# Client Library for Deebot devices (Vacuums)
[![PyPI - Downloads](https://img.shields.io/pypi/dw/deebot-client?style=for-the-badge)](https://pypi.org/project/deebot-client)
<a href="https://www.buymeacoffee.com/edenhaus" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-black.png" width="150px" height="35px" alt="Buy Me A Coffee" style="height: 35px !important;width: 150px !important;" ></a>
## Installation
If you have a recent version of Python 3, you should be able to
do `pip install deebot-client` 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.
You are welcome to try using this as a python library for other efforts.
A simple usage might go something like this:
```python
import aiohttp
import asyncio
import logging
import time
from deebot_client.api_client import ApiClient
from deebot_client.authentication import Authenticator, create_rest_config
from deebot_client.commands.json.clean import CleanAction
from deebot_client.events import BatteryEvent
from deebot_client.mqtt_client import MqttClient, create_mqtt_config
from deebot_client.util import md5
from deebot_client.device import Device
device_id = md5(str(time.time()))
account_id = "your email or phonenumber (cn)"
password_hash = md5("yourPassword")
country = "DE"
async def main():
async with aiohttp.ClientSession() as session:
logging.basicConfig(level=logging.DEBUG)
rest_config = create_rest_config(session, device_id=device_id, alpha_2_country=country)
authenticator = Authenticator(rest_config, account_id, password_hash)
api_client = ApiClient(authenticator)
devices_ = await api_client.get_devices()
bot = Device(devices_.mqtt[0], authenticator)
mqtt_config = create_mqtt_config(device_id=device_id, country=country)
mqtt = MqttClient(mqtt_config, authenticator)
await bot.initialize(mqtt)
async def on_battery(event: BatteryEvent):
# Do stuff on battery event
if event.value == 100:
# Battery full
pass
# Subscribe for events (more events available)
bot.events.subscribe(BatteryEvent, on_battery)
# Execute commands
await bot.execute_command(Clean(CleanAction.START))
await asyncio.sleep(900) # Wait for...
await bot.execute_command(Charge())
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()
```
A more advanced example can be found [here](https://github.com/And3rsL/Deebot-for-Home-Assistant).
### Note for Windows users
This library cannot be used out of the box with Windows due a limitation in the requirement `aiomqtt`.
More information and a workaround can be found [here](https://github.com/sbtinstruments/aiomqtt#note-for-windows-users)
## Thanks
My heartfelt thanks to:
- [deebotozmo](https://github.com/And3rsL/Deebotozmo), After all, this is a debotozmo fork :)
- [sucks](https://github.com/wpietri/sucks), deebotozmo was forked from it :)
- [xmpppeek](https://www.beneaththewaves.net/Software/XMPPPeek.html), a great library for examining XMPP traffic flows (
yes, your vacuum speaks Jabber!),
- [mitmproxy](https://mitmproxy.org/), a fantastic tool for analyzing HTTPS,
- [click](http://click.pocoo.org/), a wonderfully complete and thoughtful library for making Python command-line
interfaces,
- [requests](http://docs.python-requests.org/en/master/), a polished Python library for HTTP requests,
- [Decompilers online](http://www.javadecompilers.com/apk), 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](https://community.smartthings.com/t/ecovacs-deebot-n79/93410/33)
with his device, and
- All the users who have given useful feedback and contributed code!
Raw data
{
"_id": null,
"home_page": null,
"name": "deebot-client",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12.0",
"maintainer_email": null,
"keywords": "home, automation, homeassistant, vacuum, robot, deebot, ecovacs",
"author": "Robert Resch <robert@resch.dev>",
"author_email": "Robert Resch <robert@resch.dev>",
"download_url": "https://files.pythonhosted.org/packages/33/df/822ff79e2c022c15d79e54f7ac8526d47f4213c82e7999ef86390fbf596f/deebot_client-11.0.0.tar.gz",
"platform": null,
"description": "# Client Library for Deebot devices (Vacuums)\n\n[![PyPI - Downloads](https://img.shields.io/pypi/dw/deebot-client?style=for-the-badge)](https://pypi.org/project/deebot-client)\n<a href=\"https://www.buymeacoffee.com/edenhaus\" target=\"_blank\"><img src=\"https://cdn.buymeacoffee.com/buttons/default-black.png\" width=\"150px\" height=\"35px\" alt=\"Buy Me A Coffee\" style=\"height: 35px !important;width: 150px !important;\" ></a>\n\n## Installation\n\nIf you have a recent version of Python 3, you should be able to\ndo `pip install deebot-client` to get the most recently released version of\nthis.\n\n## Usage\n\nTo get started, you'll need to have already set up an EcoVacs account\nusing your smartphone.\n\nYou are welcome to try using this as a python library for other efforts.\nA simple usage might go something like this:\n\n```python\nimport aiohttp\nimport asyncio\nimport logging\nimport time\n\nfrom deebot_client.api_client import ApiClient\nfrom deebot_client.authentication import Authenticator, create_rest_config\nfrom deebot_client.commands.json.clean import CleanAction\nfrom deebot_client.events import BatteryEvent\nfrom deebot_client.mqtt_client import MqttClient, create_mqtt_config\nfrom deebot_client.util import md5\nfrom deebot_client.device import Device\n\ndevice_id = md5(str(time.time()))\naccount_id = \"your email or phonenumber (cn)\"\npassword_hash = md5(\"yourPassword\")\ncountry = \"DE\"\n\n\nasync def main():\n async with aiohttp.ClientSession() as session:\n logging.basicConfig(level=logging.DEBUG)\n rest_config = create_rest_config(session, device_id=device_id, alpha_2_country=country)\n\n authenticator = Authenticator(rest_config, account_id, password_hash)\n api_client = ApiClient(authenticator)\n\n devices_ = await api_client.get_devices()\n\n bot = Device(devices_.mqtt[0], authenticator)\n\n mqtt_config = create_mqtt_config(device_id=device_id, country=country)\n mqtt = MqttClient(mqtt_config, authenticator)\n await bot.initialize(mqtt)\n\n async def on_battery(event: BatteryEvent):\n # Do stuff on battery event\n if event.value == 100:\n # Battery full\n pass\n\n # Subscribe for events (more events available)\n bot.events.subscribe(BatteryEvent, on_battery)\n\n # Execute commands\n await bot.execute_command(Clean(CleanAction.START))\n await asyncio.sleep(900) # Wait for...\n await bot.execute_command(Charge())\n\n\nif __name__ == '__main__':\n loop = asyncio.get_event_loop()\n loop.create_task(main())\n loop.run_forever()\n```\n\nA more advanced example can be found [here](https://github.com/And3rsL/Deebot-for-Home-Assistant).\n\n### Note for Windows users\n\nThis library cannot be used out of the box with Windows due a limitation in the requirement `aiomqtt`.\nMore information and a workaround can be found [here](https://github.com/sbtinstruments/aiomqtt#note-for-windows-users)\n\n## Thanks\n\nMy heartfelt thanks to:\n\n- [deebotozmo](https://github.com/And3rsL/Deebotozmo), After all, this is a debotozmo fork :)\n- [sucks](https://github.com/wpietri/sucks), deebotozmo was forked from it :)\n- [xmpppeek](https://www.beneaththewaves.net/Software/XMPPPeek.html), a great library for examining XMPP traffic flows (\n yes, your vacuum speaks Jabber!),\n- [mitmproxy](https://mitmproxy.org/), a fantastic tool for analyzing HTTPS,\n- [click](http://click.pocoo.org/), a wonderfully complete and thoughtful library for making Python command-line\n interfaces,\n- [requests](http://docs.python-requests.org/en/master/), a polished Python library for HTTP requests,\n- [Decompilers online](http://www.javadecompilers.com/apk), which was very helpful in figuring out what the Android app\n was up to,\n- Albert Louw, who was kind enough to post code\n from [his own experiments](https://community.smartthings.com/t/ecovacs-deebot-n79/93410/33)\n with his device, and\n- All the users who have given useful feedback and contributed code!\n\n",
"bugtrack_url": null,
"license": "GPL-3.0-or-later",
"summary": "Deebot client library in python 3",
"version": "11.0.0",
"project_urls": {
"Bug Reports": "https://github.com/DeebotUniverse/client.py/issues",
"Homepage": "https://deebot.readthedocs.io/",
"Source Code": "https://github.com/DeebotUniverse/client.py"
},
"split_keywords": [
"home",
" automation",
" homeassistant",
" vacuum",
" robot",
" deebot",
" ecovacs"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "79ec949f805bfa2e93f0ac2bfe3817842f84a9949eb478d57e49df68a0848158",
"md5": "9b1ed3699f610d975612251228d20785",
"sha256": "e4e4339425880b7ddcaad1c95009326f2f3a5ab9cdbf454afaccac8e6d3abc53"
},
"downloads": -1,
"filename": "deebot_client-11.0.0-cp312-cp312-manylinux_2_34_x86_64.whl",
"has_sig": false,
"md5_digest": "9b1ed3699f610d975612251228d20785",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.12.0",
"size": 610996,
"upload_time": "2025-01-20T11:05:23",
"upload_time_iso_8601": "2025-01-20T11:05:23.398347Z",
"url": "https://files.pythonhosted.org/packages/79/ec/949f805bfa2e93f0ac2bfe3817842f84a9949eb478d57e49df68a0848158/deebot_client-11.0.0-cp312-cp312-manylinux_2_34_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c953dbd5354c27f985be2b4c10b82a927ab311a3622939b681cdfa2f2f54e578",
"md5": "22b87ef4ae2e280483465975f0fd61fd",
"sha256": "118c2b327cdd5032f3a37c2e0aa06933ef1de775e6ede55939685bffa525c736"
},
"downloads": -1,
"filename": "deebot_client-11.0.0-cp313-cp313-manylinux_2_34_x86_64.whl",
"has_sig": false,
"md5_digest": "22b87ef4ae2e280483465975f0fd61fd",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.12.0",
"size": 611018,
"upload_time": "2025-01-20T11:05:25",
"upload_time_iso_8601": "2025-01-20T11:05:25.037147Z",
"url": "https://files.pythonhosted.org/packages/c9/53/dbd5354c27f985be2b4c10b82a927ab311a3622939b681cdfa2f2f54e578/deebot_client-11.0.0-cp313-cp313-manylinux_2_34_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "33df822ff79e2c022c15d79e54f7ac8526d47f4213c82e7999ef86390fbf596f",
"md5": "ca409b33ac8bb60a6d2261c855185b88",
"sha256": "6f952570632a414977a0005aaf2c57116b52895a3c5050fe529f42f1cb39925a"
},
"downloads": -1,
"filename": "deebot_client-11.0.0.tar.gz",
"has_sig": false,
"md5_digest": "ca409b33ac8bb60a6d2261c855185b88",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12.0",
"size": 137101,
"upload_time": "2025-01-20T11:05:26",
"upload_time_iso_8601": "2025-01-20T11:05:26.623053Z",
"url": "https://files.pythonhosted.org/packages/33/df/822ff79e2c022c15d79e54f7ac8526d47f4213c82e7999ef86390fbf596f/deebot_client-11.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-20 11:05:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "DeebotUniverse",
"github_project": "client.py",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"lcname": "deebot-client"
}