@svrooij/sonos-cli
Control your sonos players right from the console. This cli is started as an experiment, so it may contain bugs. If you found some bugs, please report.
Install npm i -g @svrooij/sonos-cli
and start using, see below.
This sonos cli, is just a cli wrapper around the sonos-ts library. I could use some support in both
Usage
$ npm install -g @svrooij/sonos-cli
$ sonos COMMAND
running command...
$ sonos (-v|--version|version)
@svrooij/sonos-cli/0.0.0-development darwin-arm64 node-v16.13.1
$ sonos --help [COMMAND]
USAGE
$ sonos COMMAND
...
Commands
sonos alarm:delete ID
sonos alarm:list
sonos alarm:update ID
sonos control DEVICE COMMAND
sonos execute DEVICE COMMAND [INPUT]
sonos help [COMMAND]
sonos info DEVICE KIND
sonos music:browse
sonos music:login
sonos music:services
sonos play DEVICE URL
sonos queue DEVICE COMMAND
sonos zones [FILE]
sonos alarm:delete ID
Delete an alarm by ID
USAGE
$ sonos alarm:delete ID
ARGUMENTS
ID The ID of the alarm you want to delete
OPTIONS
-h, --help Show CLI help.
See code: src/commands/alarm/delete.ts
sonos alarm:list
List your alarms
USAGE
$ sonos alarm:list
OPTIONS
-h, --help Show CLI help.
-x, --extended show extra columns
--columns=columns only show provided columns (comma-separated)
--csv output is csv format [alias: --output=csv]
--filter=filter filter property by partial string matching, ex: name=foo
--no-header hide table header from output
--no-truncate do not truncate output to fit screen
--output=csv|json|yaml output in a more machine friendly format
--sort=sort property to sort by (prepend '-' for descending)
See code: src/commands/alarm/list.ts
sonos alarm:update ID
Update a single alarm by ID
USAGE
$ sonos alarm:update ID
ARGUMENTS
ID Alarm ID you want to update
OPTIONS
-h, --help Show CLI help.
--disable Disable the alarm?
--duration=duration Duration as hh:mm:ss
--enable Enable the alarm?
--recurrence=DAILY|WEEKDAYS|ONCE What is the recurrence of this alarm
--start=start Starttime as hh:mm:ss
--volume=volume New Volume
See code: src/commands/alarm/update.ts
sonos control DEVICE COMMAND
Send a simple command to your speaker
USAGE
$ sonos control DEVICE COMMAND
ARGUMENTS
DEVICE Name or uuid of player
COMMAND (play|pause|next|previous|toggle|stop|volumeup|volumedown|mute|unmute|togglemute|repeatall|repeatone|repeatof
f|togglerepeat|shuffleon|shuffleoff|toggleshuffle) What command do you want to send
OPTIONS
-h, --help Show CLI help.
--ip=ip Load devices from IP instead of Service Discovery
--refresh-zones Refresh the discovered zones
--save-zones Save the discovered zones
See code: src/commands/control.ts
sonos execute DEVICE COMMAND [INPUT]
Execute all available commands on the sonos library. See https://svrooij.github.io/node-sonos-ts/sonos-device for available commands
USAGE
$ sonos execute DEVICE COMMAND [INPUT]
ARGUMENTS
DEVICE Name or uuid of player
COMMAND command to call, eg. AVTransportService.Next
INPUT Optional input for command
OPTIONS
-h, --help Show CLI help.
EXAMPLES
sonos execute {device} AVTransportService.Next
sonos execute {device} SwitchToLineIn
sonos execute {device} SwitchToQueue
sonos execute {device} SwitchToTV
sonos execute Bedroom AVTransportService.ConfigureSleepTimer '{"InstanceID": 0, "NewSleepTimerDuration": "00:04:00"}'
See code: src/commands/execute.ts
sonos help [COMMAND]
display help for sonos
USAGE
$ sonos help [COMMAND]
ARGUMENTS
COMMAND command to show help for
OPTIONS
--all see all commands in CLI
See code: @oclif/plugin-help
sonos info DEVICE KIND
Show device info
USAGE
$ sonos info DEVICE KIND
ARGUMENTS
DEVICE Name or uuid of player
KIND (attributes|media|settings|position|transport|queue|volume|repeat|shuffle) What do you want to load
OPTIONS
-h, --help Show CLI help.
--ip=ip Load devices from IP instead of Service Discovery
--refresh-zones Refresh the discovered zones
--save-zones Save the discovered zones
See code: src/commands/info.ts
sonos music:browse
Browse music in an external music service
USAGE
$ sonos music:browse
OPTIONS
-h, --help Show CLI help.
--count=count [default: 10]
--root=root [default: root] Start browsing at this tag.
--service=service Music Service ID
See code: src/commands/music/browse.ts
sonos music:login
Login to your favorite music service
USAGE
$ sonos music:login
OPTIONS
-h, --help Show CLI help.
--service=service Music Service ID
See code: src/commands/music/login.ts
sonos music:services
Show all music services!
USAGE
$ sonos music:services
OPTIONS
-h, --help Show CLI help.
-x, --extended show extra columns
--columns=columns only show provided columns (comma-separated)
--csv output is csv format [alias: --output=csv]
--filter=filter filter property by partial string matching, ex: name=foo
--no-header hide table header from output
--no-truncate do not truncate output to fit screen
--output=csv|json|yaml output in a more machine friendly format
--sort=sort property to sort by (prepend '-' for descending)
--subscribed Only show services where you logged-in to
See code: src/commands/music/services.ts
sonos play DEVICE URL
Add the supplied url to the queue
USAGE
$ sonos play DEVICE URL
ARGUMENTS
DEVICE Name or uuid of player
URL The url to play
OPTIONS
-h, --help Show CLI help.
--ip=ip Load devices from IP instead of Service Discovery
--refresh-zones Refresh the discovered zones
--save-zones Save the discovered zones
--skip-queue
See code: src/commands/play.ts
sonos queue DEVICE COMMAND
Manipulates the queue on your speaker
USAGE
$ sonos queue DEVICE COMMAND
ARGUMENTS
DEVICE Name or uuid of player
COMMAND (clear|next|previous) What command do you want to send
OPTIONS
-h, --help Show CLI help.
--ip=ip Load devices from IP instead of Service Discovery
--refresh-zones Refresh the discovered zones
--save-zones Save the discovered zones
See code: src/commands/queue.ts
sonos zones [FILE]
Do device discovery
USAGE
$ sonos zones [FILE]
OPTIONS
-h, --help Show CLI help.
-x, --extended show extra columns
--columns=columns only show provided columns (comma-separated)
--csv output is csv format [alias: --output=csv]
--filter=filter filter property by partial string matching, ex: name=foo
--ip=ip Use IP instead of discovery
--no-header hide table header from output
--no-truncate do not truncate output to fit screen
--output=csv|json|yaml output in a more machine friendly format
--save
--sort=sort property to sort by (prepend '-' for descending)
See code: src/commands/zones.ts
Development
This library is written in TypeScript, that means you'll need to compile it before using. This is done automatically when packaging, but you can also run npm run prepack
. Starting this library from the repository is done by ./bin/run [command] ...
.
Tests aren't implemented everywhere, if you feel like it send me a pull request.
Oclif
Oclif is a cli framework created by the guys (and girls) from heroku. When starting this library it was the want that seems to have the most featured I wanted for a cli framework. This wasn't a thourogh research, I just picked the one I liked.
✨
Contributors Thanks goes to these wonderful people (emoji key):
Stephan van Rooij |
Matthew Douglass |
This project follows the all-contributors specification. Contributions of any kind welcome!
Commit style
This repository will automatically create a new release if your commit message follow the conventional commits specification.
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Bugfix sample: fix: Play command did not work
Feature sample: feat: Added command x and y
This repository will auto release a new version if commits starting with either fix:
or feat:
are detected. Make sure this is in your commit to provide a fast release of your fix.
PR branch
Always create your pull request against the beta
branch. I will release this branch to the main branch at a regular interval or when we build some awesome new feature.