# napalm-sonos NAPALM driver for **Sonos** speakers, built on [napalm-device-types](https://git.netork.io/NAPALM/napalm-device-types) (`MediaDriver`). It talks to the speaker through [SoCo](https://github.com/SoCo/SoCo). ## Tested against | Model | Firmware | |---|---| | not recorded yet | | ## Connection UPnP/SOAP over HTTP on port 1400, through SoCo. A Sonos speaker takes no login: `username` and `password` are accepted for NAPALM's constructor and ignored. `open()` reads the speaker info once; `is_alive()` checks that TCP port 1400 accepts a connection. ```python from napalm import get_network_driver driver = get_network_driver("sonos") with driver("192.0.2.20") as speaker: print(speaker.get_facts()) print(speaker.get_playback_state()) ``` ## Supported | Getter / action | | |---|---| | `get_facts` | from the speaker info read at `open()` | | `get_interfaces`, `get_interfaces_ip` | `eth0` when the speaker is wired, always `wlan0` | | `get_playback_state`, `get_current_track` | yes | | `get_volume`, `set_volume`, `get_mute`, `set_mute` | yes | | `play`, `pause`, `stop`, `next_track`, `previous_track` | yes | | `get_group_info`, `get_zone_info` | yes | ## Not supported Configuration management (`load_replace_candidate` and `load_merge_candidate` raise `NotImplementedError`), the CLI, and every routing, LLDP, ARP, NTP, SNMP, BGP, user and environment getter: they return empty results. ## Installation ```bash pip install napalm-sonos ``` ## Development The rules are in [STANDARDS.md](https://git.netork.io/NAPALM/driver-standard/src/branch/main/STANDARDS.md). ```bash python -m venv .venv && .venv/bin/pip install -e ".[dev]" .venv/bin/pytest --cov ``` ## License Apache-2.0