{ "info": { "author": "c3V6a2Vy", "author_email": "c3V6a2Vy@protonmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# pyanova\nAn Anova Precision Cooker (Sous Vide) Bluetooth API Python Wrapper\n\n[![pypi-pyanova](https://img.shields.io/pypi/v/pyanova.svg?style=flat-square)](https://pypi.org/project/pyanova/)\n\n## Descirption\n\nThis is a Python wrapper of the [Anova Precision Cooker](https://anovaculinary.com/anova-precision-cooker/) (Sous Vide) API via the Bluetooth LE connection. Under the hood, it utilizes [peplin/pygatt](https://github.com/peplin/pygatt) for the Bluetooth LE communications.\n\nThe library is tested on [C.H.I.P](https://docs.getchip.com/chip.html) with Debian + Python 2.7 and Python 3.4\n\n## Acknowledgements\n\n* This work relies heavily on the researches from [dfrankland/sous-vide](https://github.com/dfrankland/sous-vide/), a very nice API for Node JS. Commands used in _pyanova_ are based on its [research on the Android APP APK](https://github.com/dfrankland/sous-vide/blob/master/docs/ble.md).\n* Bluetooh LE communication is made easy with [pygatt](https://github.com/peplin/pygatt)\n\n## Installation\n\n### Prerequisites\n\n* [pygatt](https://github.com/peplin/pygatt) - specifically, it uses the [gatttool backend](https://github.com/peplin/pygatt/tree/master/pygatt/backends/gatttool)\n* [bluez](https://git.kernel.org/pub/scm/bluetooth/bluez.git) - specifically, the gatttool backend requires [hcitool](https://github.com/pauloborges/bluez/blob/master/tools/hcitool.c), make sure you can find `hcitool` in your system.\n\n### Install using Python pip\nOnce the prerequisite are satisfied, you can install _pyanova_ with pip: `pip install pyanova`\n\n## Usage\n\n> The GATTTool backend normally requires __root__ permission. Hence you might need to run your program with __root__ permission or [setup passwordless sudo for 'hcitool'](https://www.sudo.ws/man/sudoers.man.html).\n\n### Automode\nYou can initialize PyAnova easily with automode which will automatically discover and connect to the first available Anova device\n\n```python\nfrom pyanova import pyanova\n\npa = pyanova.PyAnova()\npa.get_status()\n```\n\n### Manual mode\nAlternatively, you can fully control the discover and connect phrases of an PyAnova object\n\n```python\nfrom pyanova import pyanova\n\npa = pyanova.PyAnova(auto_connect=False)\ndevices = pa.discover(list_all=False, timeout=3)\npa.connect_device(devices[0])\npa.get_status()\n```\n\n### TODO\n* Unit tests\n* Autogen docs\n* Probably swtich to [pygattlib](https://bitbucket.org/OscarAcena/pygattlib)?\n\n### Demo\nsee: samples/pyanova_terminal.py\n\n## Disclaimer\nThis software may harm your device. Use it at your own risk.\n\n>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \u201cAS IS\u201d WITHOUT\nWARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND\nPERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE\nDEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR\nCORRECTION.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/c3V6a2Vy/pyanova", "keywords": "", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "pyanova", "package_url": "https://pypi.org/project/pyanova/", "platform": "", "project_url": "https://pypi.org/project/pyanova/", "project_urls": { "Homepage": "https://github.com/c3V6a2Vy/pyanova" }, "release_url": "https://pypi.org/project/pyanova/0.2.0/", "requires_dist": [ "pygatt", "pexpect" ], "requires_python": "", "summary": "A Python Library for Anova Precision Cooker", "version": "0.2.0" }, "last_serial": 5833249, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "bb4d0744f4c6a6a073f5254412b66a45", "sha256": "e2f2cf1547140541556733f872cbecbfca57ca090467b1b49d4a68d235a2b851" }, "downloads": -1, "filename": "pyanova-0.1.1.tar.gz", "has_sig": false, "md5_digest": "bb4d0744f4c6a6a073f5254412b66a45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10513, "upload_time": "2018-08-27T04:04:26", "url": "https://files.pythonhosted.org/packages/64/0f/3fce67ae77cf49f5e84529854df4e62e3d73cbf368c201f184fe7c515cec/pyanova-0.1.1.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "b7424b3858a57d242e7ed5eced504ca4", "sha256": "b37708d7bb85d85719da3f032b250add4a53e4f314389d9bf530e4839bea938f" }, "downloads": -1, "filename": "pyanova-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b7424b3858a57d242e7ed5eced504ca4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10821, "upload_time": "2018-08-27T09:50:11", "url": "https://files.pythonhosted.org/packages/c1/ea/d302ea1152cf8d7c96973b8a2b9f7691809d49419fc121922fbcca86577a/pyanova-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "52caabc263817e3d4a4837975d4b7f01", "sha256": "b31f153b4fbe206bb234a7043e34f0c1d9eae8e679c197fa889e5b1a9d6744b9" }, "downloads": -1, "filename": "pyanova-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "52caabc263817e3d4a4837975d4b7f01", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11508, "upload_time": "2019-09-15T23:41:06", "url": "https://files.pythonhosted.org/packages/ff/d4/45352c491dbc047b523dbe8eff0af3fe9b16afc4e33455cce2cabb3c7fea/pyanova-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d6f29f0836d1c01bb61a6ef0dfc17f5a", "sha256": "5eb6f469a48780cd968d845e4ff401519a5d8cd801c981aed4957ee5ae937d38" }, "downloads": -1, "filename": "pyanova-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d6f29f0836d1c01bb61a6ef0dfc17f5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11114, "upload_time": "2019-09-15T23:41:08", "url": "https://files.pythonhosted.org/packages/21/32/ec3a7981e1f97299242dadfa9994419df610bad224deabad997949ed88ba/pyanova-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "52caabc263817e3d4a4837975d4b7f01", "sha256": "b31f153b4fbe206bb234a7043e34f0c1d9eae8e679c197fa889e5b1a9d6744b9" }, "downloads": -1, "filename": "pyanova-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "52caabc263817e3d4a4837975d4b7f01", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11508, "upload_time": "2019-09-15T23:41:06", "url": "https://files.pythonhosted.org/packages/ff/d4/45352c491dbc047b523dbe8eff0af3fe9b16afc4e33455cce2cabb3c7fea/pyanova-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d6f29f0836d1c01bb61a6ef0dfc17f5a", "sha256": "5eb6f469a48780cd968d845e4ff401519a5d8cd801c981aed4957ee5ae937d38" }, "downloads": -1, "filename": "pyanova-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d6f29f0836d1c01bb61a6ef0dfc17f5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11114, "upload_time": "2019-09-15T23:41:08", "url": "https://files.pythonhosted.org/packages/21/32/ec3a7981e1f97299242dadfa9994419df610bad224deabad997949ed88ba/pyanova-0.2.0.tar.gz" } ] }