matonb-anovable


Namematonb-anovable JSON
Version 1.3.1 PyPI version JSON
download
home_pageNone
SummaryPython library for controlling Anova Precision Cookers via Bluetooth LE
upload_time2025-08-03 19:27:57
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords anova ble bluetooth precision-cooker sous-vide
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Anovable

Python library for controlling Anova Precision Cookers via Bluetooth LE.

## Installation

```bash
pip install anovable
```

## Configuration

Create an `anovable.yaml` configuration file (Home Assistant compatible format):

```yaml
# Anovable Configuration File
anova:
  mac_address: "01:02:03:04:05:06"  # Your Anova device MAC address

  connection:
    timeout: 5.0
    retry_attempts: 3

  temperature:
    default_unit: "celsius"

  logging:
    level: "INFO"
```

## Python Usage

```python
import asyncio
from anovable import AnovaBLE

async def main():
    # Auto-discovers device or uses config file
    anova = AnovaBLE()

    if await anova.connect():
        # Get status
        status = await anova.get_status()
        print(f"Status: {status}")

        # Set temperature
        await anova.set_temperature(60.0)

        # Start cooking
        await anova.start_cooking()

        # Set timer (auto-starts by default, but only if cooker is running)
        await anova.set_timer(120)  # 120 minutes, auto-starts if cooker running

        # Or set timer without auto-starting
        await anova.set_timer(120, auto_start=False)

    await anova.disconnect()

asyncio.run(main())
```

## CLI Usage

The CLI automatically uses your MAC address from `anovable.yaml`:

### Status Commands
```bash
# Get comprehensive device status
anova-cli status
# or
anova-cli state

# Get current temperature
anova-cli temp

# Get target temperature
anova-cli target

# Get timer status
anova-cli timer

# Get temperature unit
anova-cli unit
```

### Control Commands
```bash
# Typical workflow
anova-cli set-temp 60.0    # Set target temperature
anova-cli start            # Start cooking
anova-cli set-timer 120    # Set timer (auto-starts since cooker is running)

# Individual commands
anova-cli start            # Start cooking
anova-cli stop             # Stop cooking

# Set target temperature (Celsius) - uses positional argument
anova-cli set-temp 60.0

# Set timer (minutes) - automatically starts timer if cooker is running
anova-cli set-timer 120

# Set timer without auto-starting
anova-cli set-timer 120 --no-auto-start

# Manual timer control (requires cooker to be running)
anova-cli start-timer
anova-cli stop-timer
```

### Options
```bash
# Override MAC address (short flag available)
anova-cli --mac-address aa:bb:cc:dd:ee:ff status
anova-cli -m aa:bb:cc:dd:ee:ff status

# Use custom config file (short flag available)
anova-cli --config /path/to/config.yaml status
anova-cli -c /path/to/config.yaml status

# Enable debug logging (short flag available)
anova-cli --debug status
anova-cli -d status

# Show version
anova-cli --version

# Get help for any command
anova-cli --help
anova-cli status --help

# Enable shell completion (bash, zsh, fish, PowerShell)
anova-cli --install-completion
anova-cli --show-completion  # Show completion script to copy manually
```

## Device Discovery

If you don't know your Anova's MAC address:

```python
import asyncio
from anovable import AnovaBLE

async def find_device():
    anova = AnovaBLE()
    mac_address = await anova.discover_device()
    if mac_address:
        print(f"Found Anova at: {mac_address}")
    else:
        print("No Anova device found")

asyncio.run(find_device())
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "matonb-anovable",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "anova, ble, bluetooth, precision-cooker, sous-vide",
    "author": null,
    "author_email": "matonb <matonb@users.noreply.github.com>",
    "download_url": "https://files.pythonhosted.org/packages/48/7e/1f29ca3d766600644cfe109f7e5ce796fbdb46208e329caded080b7748fb/matonb_anovable-1.3.1.tar.gz",
    "platform": null,
    "description": "# Anovable\n\nPython library for controlling Anova Precision Cookers via Bluetooth LE.\n\n## Installation\n\n```bash\npip install anovable\n```\n\n## Configuration\n\nCreate an `anovable.yaml` configuration file (Home Assistant compatible format):\n\n```yaml\n# Anovable Configuration File\nanova:\n  mac_address: \"01:02:03:04:05:06\"  # Your Anova device MAC address\n\n  connection:\n    timeout: 5.0\n    retry_attempts: 3\n\n  temperature:\n    default_unit: \"celsius\"\n\n  logging:\n    level: \"INFO\"\n```\n\n## Python Usage\n\n```python\nimport asyncio\nfrom anovable import AnovaBLE\n\nasync def main():\n    # Auto-discovers device or uses config file\n    anova = AnovaBLE()\n\n    if await anova.connect():\n        # Get status\n        status = await anova.get_status()\n        print(f\"Status: {status}\")\n\n        # Set temperature\n        await anova.set_temperature(60.0)\n\n        # Start cooking\n        await anova.start_cooking()\n\n        # Set timer (auto-starts by default, but only if cooker is running)\n        await anova.set_timer(120)  # 120 minutes, auto-starts if cooker running\n\n        # Or set timer without auto-starting\n        await anova.set_timer(120, auto_start=False)\n\n    await anova.disconnect()\n\nasyncio.run(main())\n```\n\n## CLI Usage\n\nThe CLI automatically uses your MAC address from `anovable.yaml`:\n\n### Status Commands\n```bash\n# Get comprehensive device status\nanova-cli status\n# or\nanova-cli state\n\n# Get current temperature\nanova-cli temp\n\n# Get target temperature\nanova-cli target\n\n# Get timer status\nanova-cli timer\n\n# Get temperature unit\nanova-cli unit\n```\n\n### Control Commands\n```bash\n# Typical workflow\nanova-cli set-temp 60.0    # Set target temperature\nanova-cli start            # Start cooking\nanova-cli set-timer 120    # Set timer (auto-starts since cooker is running)\n\n# Individual commands\nanova-cli start            # Start cooking\nanova-cli stop             # Stop cooking\n\n# Set target temperature (Celsius) - uses positional argument\nanova-cli set-temp 60.0\n\n# Set timer (minutes) - automatically starts timer if cooker is running\nanova-cli set-timer 120\n\n# Set timer without auto-starting\nanova-cli set-timer 120 --no-auto-start\n\n# Manual timer control (requires cooker to be running)\nanova-cli start-timer\nanova-cli stop-timer\n```\n\n### Options\n```bash\n# Override MAC address (short flag available)\nanova-cli --mac-address aa:bb:cc:dd:ee:ff status\nanova-cli -m aa:bb:cc:dd:ee:ff status\n\n# Use custom config file (short flag available)\nanova-cli --config /path/to/config.yaml status\nanova-cli -c /path/to/config.yaml status\n\n# Enable debug logging (short flag available)\nanova-cli --debug status\nanova-cli -d status\n\n# Show version\nanova-cli --version\n\n# Get help for any command\nanova-cli --help\nanova-cli status --help\n\n# Enable shell completion (bash, zsh, fish, PowerShell)\nanova-cli --install-completion\nanova-cli --show-completion  # Show completion script to copy manually\n```\n\n## Device Discovery\n\nIf you don't know your Anova's MAC address:\n\n```python\nimport asyncio\nfrom anovable import AnovaBLE\n\nasync def find_device():\n    anova = AnovaBLE()\n    mac_address = await anova.discover_device()\n    if mac_address:\n        print(f\"Found Anova at: {mac_address}\")\n    else:\n        print(\"No Anova device found\")\n\nasyncio.run(find_device())\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python library for controlling Anova Precision Cookers via Bluetooth LE",
    "version": "1.3.1",
    "project_urls": {
        "Homepage": "https://github.com/matonb/anovable",
        "Issues": "https://github.com/matonb/anovable/issues",
        "Repository": "https://github.com/matonb/anovable"
    },
    "split_keywords": [
        "anova",
        " ble",
        " bluetooth",
        " precision-cooker",
        " sous-vide"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "71577ef3f46b85d2025966b8f8fca1f7ac5b5a55237aeb11ed855f4b3fefdac6",
                "md5": "806d6521f51802fd06eb2946397eff96",
                "sha256": "55bde7da8001beecbe2c88f4550356986401221e8710e86e0c144bbaaec1551f"
            },
            "downloads": -1,
            "filename": "matonb_anovable-1.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "806d6521f51802fd06eb2946397eff96",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 12759,
            "upload_time": "2025-08-03T19:27:55",
            "upload_time_iso_8601": "2025-08-03T19:27:55.768108Z",
            "url": "https://files.pythonhosted.org/packages/71/57/7ef3f46b85d2025966b8f8fca1f7ac5b5a55237aeb11ed855f4b3fefdac6/matonb_anovable-1.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "487e1f29ca3d766600644cfe109f7e5ce796fbdb46208e329caded080b7748fb",
                "md5": "d4d2d5b6d0849e1c62be0f919c085fc3",
                "sha256": "3711deb981e6c27cea39b3725666e8bfebd6e88c47fb311ddb263450d8d9184c"
            },
            "downloads": -1,
            "filename": "matonb_anovable-1.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "d4d2d5b6d0849e1c62be0f919c085fc3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 13597,
            "upload_time": "2025-08-03T19:27:57",
            "upload_time_iso_8601": "2025-08-03T19:27:57.315905Z",
            "url": "https://files.pythonhosted.org/packages/48/7e/1f29ca3d766600644cfe109f7e5ce796fbdb46208e329caded080b7748fb/matonb_anovable-1.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-03 19:27:57",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "matonb",
    "github_project": "anovable",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "matonb-anovable"
}
        
Elapsed time: 1.43348s