pynaim


Namepynaim JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryPython client and CLI for Naim Mu-so 2nd Gen (unofficial).
upload_time2025-08-17 17:00:51
maintainerNone
docs_urlNone
authorJoeri Blaauboer
requires_python>=3.9
licenseNone
keywords naim muso audio home-assistant sse asyncio
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # pynaim

`pynaim` is a Python library and CLI tool to control Naim audio devices via their HTTP API. It provides methods for power control, playback, volume adjustment, source selection, and fetching device information.

---

## Features

- Power control: turn the device on/off
- Playback control: play, pause, stop, next/previous track, play/pause toggle
- Volume control: set, increase, decrease, mute, unmute
- Source selection: choose input source
- Query device information: diagnostics, favorites, network, now playing, volume levels, power state
- Asynchronous event stream support for real-time notifications (work in progress)
- Command-line interface (CLI) for quick control from terminal

---

## Installation

Install via PyPI:

```bash
pip install pynaim
```

---

## Usage in Python

```python
import asyncio
from pynaim import NaimController

controller = NaimController(host="192.168.1.100")
controller.turn_on()
controller.media_play()
controller.volume_up()
print(controller.get_now_playing())
```

---

## CLI Usage

Once installed, you can use the `pynaim` CLI:

```bash
# Set default host
pynaim set_host --host 192.168.1.100

# Power control
pynaim power on
pynaim power off

# Playback control
pynaim play
pynaim pause
pynaim stop
pynaim playpause
pynaim next
pynaim previous

# Volume control
pynaim volume up
pynaim volume down
pynaim volume mute
pynaim volume unmute
pynaim volume level 25
```

> Use `--verbosity` flag for more detailed logging.

---

## Event Stream

```python
async def main():
    controller = NaimController(host="192.168.1.100")
    await controller.event_stream()

asyncio.run(main())
```

> ⚠️ Event stream implementation is in progress; it handles reconnects but requires improved error handling.

---

## Methods

### Power
- `turn_on()`
- `turn_off()`
- `get_power()`

### Playback
- `media_play()`
- `media_pause()`
- `media_stop()`
- `media_play_pause()`
- `media_next_track()`
- `media_previous_track()`
- `get_now_playing()`
- `get_artist()`
- `get_title()`
- `get_album()`
- `get_artwork()`

### Volume
- `volume_up()`
- `volume_down()`
- `volume_set(volume: int)`
- `volume_mute()`
- `volume_unmute()`
- `get_levels()`

### Inputs / Sources
- `select_source(source_path: str)`
- `get_inputs()`
- `get_selectable_inputs()`

### Device Info
- `get_diagnostics()`
- `get_favourites()`
- `get_network()`
- `get_update()`

---

## Logging

`pynaim` uses Python's built-in `logging` module. Default level is `INFO`, HTTPX logs are set to `WARNING`.

```python
import logging
logging.basicConfig(level=logging.INFO)
```

---

## Notes
- Some methods use synchronous HTTP requests (`httpx.request`) for simplicity.
- Event streaming is asynchronous and requires `asyncio`.
- Volume up/down fetches current volume; future updates may cache the value.
- Source selection does not currently validate against available inputs.
- CLI stores default host in `~/.config/pynaim/config.json`.

---

## License

MIT License


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pynaim",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "naim, muso, audio, home-assistant, sse, asyncio",
    "author": "Joeri Blaauboer",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/a1/ad/2af44734d78a0775b17e5a107aede80b90948d4ffd8f4cc6c3050fc3260a/pynaim-0.1.0.tar.gz",
    "platform": null,
    "description": "# pynaim\n\n`pynaim` is a Python library and CLI tool to control Naim audio devices via their HTTP API. It provides methods for power control, playback, volume adjustment, source selection, and fetching device information.\n\n---\n\n## Features\n\n- Power control: turn the device on/off\n- Playback control: play, pause, stop, next/previous track, play/pause toggle\n- Volume control: set, increase, decrease, mute, unmute\n- Source selection: choose input source\n- Query device information: diagnostics, favorites, network, now playing, volume levels, power state\n- Asynchronous event stream support for real-time notifications (work in progress)\n- Command-line interface (CLI) for quick control from terminal\n\n---\n\n## Installation\n\nInstall via PyPI:\n\n```bash\npip install pynaim\n```\n\n---\n\n## Usage in Python\n\n```python\nimport asyncio\nfrom pynaim import NaimController\n\ncontroller = NaimController(host=\"192.168.1.100\")\ncontroller.turn_on()\ncontroller.media_play()\ncontroller.volume_up()\nprint(controller.get_now_playing())\n```\n\n---\n\n## CLI Usage\n\nOnce installed, you can use the `pynaim` CLI:\n\n```bash\n# Set default host\npynaim set_host --host 192.168.1.100\n\n# Power control\npynaim power on\npynaim power off\n\n# Playback control\npynaim play\npynaim pause\npynaim stop\npynaim playpause\npynaim next\npynaim previous\n\n# Volume control\npynaim volume up\npynaim volume down\npynaim volume mute\npynaim volume unmute\npynaim volume level 25\n```\n\n> Use `--verbosity` flag for more detailed logging.\n\n---\n\n## Event Stream\n\n```python\nasync def main():\n    controller = NaimController(host=\"192.168.1.100\")\n    await controller.event_stream()\n\nasyncio.run(main())\n```\n\n> \u26a0\ufe0f Event stream implementation is in progress; it handles reconnects but requires improved error handling.\n\n---\n\n## Methods\n\n### Power\n- `turn_on()`\n- `turn_off()`\n- `get_power()`\n\n### Playback\n- `media_play()`\n- `media_pause()`\n- `media_stop()`\n- `media_play_pause()`\n- `media_next_track()`\n- `media_previous_track()`\n- `get_now_playing()`\n- `get_artist()`\n- `get_title()`\n- `get_album()`\n- `get_artwork()`\n\n### Volume\n- `volume_up()`\n- `volume_down()`\n- `volume_set(volume: int)`\n- `volume_mute()`\n- `volume_unmute()`\n- `get_levels()`\n\n### Inputs / Sources\n- `select_source(source_path: str)`\n- `get_inputs()`\n- `get_selectable_inputs()`\n\n### Device Info\n- `get_diagnostics()`\n- `get_favourites()`\n- `get_network()`\n- `get_update()`\n\n---\n\n## Logging\n\n`pynaim` uses Python's built-in `logging` module. Default level is `INFO`, HTTPX logs are set to `WARNING`.\n\n```python\nimport logging\nlogging.basicConfig(level=logging.INFO)\n```\n\n---\n\n## Notes\n- Some methods use synchronous HTTP requests (`httpx.request`) for simplicity.\n- Event streaming is asynchronous and requires `asyncio`.\n- Volume up/down fetches current volume; future updates may cache the value.\n- Source selection does not currently validate against available inputs.\n- CLI stores default host in `~/.config/pynaim/config.json`.\n\n---\n\n## License\n\nMIT License\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python client and CLI for Naim Mu-so 2nd Gen (unofficial).",
    "version": "0.1.0",
    "project_urls": {
        "Homepage": "https://github.com/blaauboer/pynaim",
        "Issues": "https://github.com/blaauboer/pynaim/issues"
    },
    "split_keywords": [
        "naim",
        " muso",
        " audio",
        " home-assistant",
        " sse",
        " asyncio"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c9b5c15802e3a725866acad5a70c9e4744ee5545f33802511b33f8228297fe31",
                "md5": "15a108c7c5e4f40f7011346bc91b5c2f",
                "sha256": "bd9f5422ab7e2bee637f97cb401364afd7a7bdc70b4f2673fbab5451e120119e"
            },
            "downloads": -1,
            "filename": "pynaim-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "15a108c7c5e4f40f7011346bc91b5c2f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 7543,
            "upload_time": "2025-08-17T17:00:49",
            "upload_time_iso_8601": "2025-08-17T17:00:49.594147Z",
            "url": "https://files.pythonhosted.org/packages/c9/b5/c15802e3a725866acad5a70c9e4744ee5545f33802511b33f8228297fe31/pynaim-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a1ad2af44734d78a0775b17e5a107aede80b90948d4ffd8f4cc6c3050fc3260a",
                "md5": "114eaed7cf07b751f6f6d4acf5af81b6",
                "sha256": "a008cf883a28ec852ece2bb22e45ee2e76fa082d845bf6331f525ec2c7f7966a"
            },
            "downloads": -1,
            "filename": "pynaim-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "114eaed7cf07b751f6f6d4acf5af81b6",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 7709,
            "upload_time": "2025-08-17T17:00:51",
            "upload_time_iso_8601": "2025-08-17T17:00:51.103738Z",
            "url": "https://files.pythonhosted.org/packages/a1/ad/2af44734d78a0775b17e5a107aede80b90948d4ffd8f4cc6c3050fc3260a/pynaim-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-17 17:00:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "blaauboer",
    "github_project": "pynaim",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pynaim"
}
        
Elapsed time: 1.98108s