{"id":15706560,"url":"https://github.com/natekspencer/pylitterbot","last_synced_at":"2026-04-10T20:04:25.712Z","repository":{"id":42654298,"uuid":"321170233","full_name":"natekspencer/pylitterbot","owner":"natekspencer","description":"Python package for controlling a Whisker connected self-cleaning litter boxes and feeders","archived":false,"fork":false,"pushed_at":"2024-10-03T19:43:52.000Z","size":1557,"stargazers_count":87,"open_issues_count":4,"forks_count":11,"subscribers_count":11,"default_branch":"main","last_synced_at":"2024-10-24T18:16:36.145Z","etag":null,"topics":["feeder-robot","litter-robot","python","whisker"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/natekspencer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-13T22:09:22.000Z","updated_at":"2024-10-18T18:37:33.000Z","dependencies_parsed_at":"2024-02-10T20:31:59.493Z","dependency_job_id":"7a4ec415-7346-4342-a294-cc46eec847e2","html_url":"https://github.com/natekspencer/pylitterbot","commit_stats":{"total_commits":179,"total_committers":5,"mean_commits":35.8,"dds":"0.25698324022346364","last_synced_commit":"6e145dcbe82c5cdb62f1e1ae5ff3a7788bc21b06"},"previous_names":[],"tags_count":60,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natekspencer%2Fpylitterbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natekspencer%2Fpylitterbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natekspencer%2Fpylitterbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natekspencer%2Fpylitterbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/natekspencer","download_url":"https://codeload.github.com/natekspencer/pylitterbot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247584110,"owners_count":20962075,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["feeder-robot","litter-robot","python","whisker"],"created_at":"2024-10-03T20:24:20.611Z","updated_at":"2026-04-10T20:04:25.706Z","avatar_url":"https://github.com/natekspencer.png","language":"Python","funding_links":["https://ko-fi.com/natekspencer","https://github.com/sponsors/natekspencer","https://www.paypal.com/paypalme/natekspencer"],"categories":[],"sub_categories":[],"readme":"# pylitterbot\n\n[![PyPI - Version](https://img.shields.io/pypi/v/pylitterbot?style=for-the-badge)](https://pypi.org/project/pylitterbot/)\n[![Buy Me A Coffee/Beer](https://img.shields.io/badge/Buy_Me_A_☕/🍺-F16061?style=for-the-badge\u0026logo=ko-fi\u0026logoColor=white\u0026labelColor=grey)](https://ko-fi.com/natekspencer)\n[![Sponsor on GitHub](https://img.shields.io/badge/Sponsor_💜-6f42c1?style=for-the-badge\u0026logo=github\u0026logoColor=white\u0026labelColor=grey)](https://github.com/sponsors/natekspencer)\n[![Purchase Litter-Robot](https://img.shields.io/badge/Buy_a_Litter--Robot-Save_$50-lightgrey?style=for-the-badge\u0026labelColor=grey)](https://share.litter-robot.com/x/YZ325z)\n\n[![GitHub License](https://img.shields.io/github/license/natekspencer/pylitterbot?style=flat-square)](LICENSE)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pylitterbot?style=flat-square)](https://pypi.org/project/pylitterbot/)\n![Pepy Total Downloads](https://img.shields.io/pepy/dt/pylitterbot?style=flat-square)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/pylitterbot?style=flat-square)\n\nPython package for controlling Whisker connected self-cleaning litter boxes and feeders.\n\nThis is an unofficial API for controlling various Whisker automated robots. It currently supports Litter-Robot 3 (with connect), Litter-Robot 4 and Feeder-Robot.\n\n## Disclaimer\n\nThis API is experimental and was reverse-engineered by monitoring network traffic and decompiling source code from the Whisker app since no public API is currently available at this time. It may cease to work at any time. Use at your own risk.\n\n## Installation\n\nInstall using pip\n\n```bash\npip install pylitterbot\n```\n\nAlternatively, clone the repository and run\n\n```bash\nuv sync\n```\n\n## Usage\n\n```python\nimport asyncio\n\nfrom pylitterbot import Account\n\n# Set email and password for initial authentication.\nusername = \"Your username\"\npassword = \"Your password\"\n\n\nasync def main():\n    # Create an account.\n    account = Account()\n\n    try:\n        # Connect to the API and load robots.\n        await account.connect(username=username, password=password, load_robots=True)\n\n        # Print robots associated with account.\n        print(\"Robots:\")\n        for robot in account.robots:\n            print(robot)\n    finally:\n        # Disconnect from the API.\n        await account.disconnect()\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\nwhich will output something like:\n\n```\nName: Litter-Robot Name, Serial: LR3C012345, id: a0123b4567cd8e\n```\n\nIf you only want to discover specific robot families, pass the classes you want\nto query when you create the account or when you load robots:\n\n```python\nfrom pylitterbot import Account, LitterRobot4, LitterRobot5\n\n...\n\naccount = Account(robot_types=[LitterRobot4, LitterRobot5])\n\nawait account.connect(\n  username=username,\n  password=password,\n  load_robots=True,\n)\n```\n\nTo start a clean cycle\n\n```python\nawait robot.start_cleaning()\n```\n\nIf no exception occurred, your Litter-Robot should now perform a clean cycle.\n\nCurrently the following methods are available in the Robot class:\n\n- refresh()\n- start_cleaning()\n- reset_settings()\n- set_panel_lockout()\n- set_night_light()\n- set_power_status()\n- set_sleep_mode()\n- set_wait_time()\n- set_name()\n- get_activity_history()\n- get_insight()\n\n## Contributing\n\nThank you for your interest in contributing! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for how to get started.\n\n---\n\n## TODO\n\n- Add support for Litter-Robot 5 cameras\n\n---\n\n## ❤️ Support Me\n\nI maintain this python project in my spare time. If you find it useful, consider supporting development:\n\n- 💜 [Sponsor me on GitHub](https://github.com/sponsors/natekspencer)\n- ☕ [Buy me a coffee / beer](https://ko-fi.com/natekspencer)\n- 💸 [PayPal (direct support)](https://www.paypal.com/paypalme/natekspencer)\n- ⭐ [Star this project](https://github.com/natekspencer/pylitterbot)\n- 📦 If you’d like to support in other ways, such as donating hardware for testing, feel free to [reach out to me](https://github.com/natekspencer)\n\nIf you don't already own a Litter-Robot, please consider using [my referral link](https://share.litter-robot.com/x/xQ4Wnm) to purchase your own robot and save $50!\n\n## 📈 Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=natekspencer/pylitterbot)](https://www.star-history.com/#natekspencer/pylitterbot)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatekspencer%2Fpylitterbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnatekspencer%2Fpylitterbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatekspencer%2Fpylitterbot/lists"}