Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/volschin/roon-extension-mqtt
Roon Extension to integrate Roon into home automation systems by using the MQTT protocol.
https://github.com/volschin/roon-extension-mqtt
mqtt roon roon-extension
Last synced: 29 days ago
JSON representation
Roon Extension to integrate Roon into home automation systems by using the MQTT protocol.
- Host: GitHub
- URL: https://github.com/volschin/roon-extension-mqtt
- Owner: volschin
- License: apache-2.0
- Created: 2024-08-28T16:17:07.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2024-09-29T15:52:35.000Z (about 1 month ago)
- Last Synced: 2024-09-29T18:52:32.717Z (about 1 month ago)
- Topics: mqtt, roon, roon-extension
- Language: JavaScript
- Homepage:
- Size: 31.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# roon-extension-mqtt
Roon Extension to integrate Roon into home automation systems by using the MQTT protocol## Installation
clone the repository and change to extension directory
run
```
npm install
node .
```To run as a systemd service, change the provided .service file as necessary and put the service configuration file in /etc/systemd/system.
You can set the hostname or IP address of the MQTT broker in the settings with the Roon application.
### Docker
You can also run this extension as a docker container. You'll have to use host networking for the extenstion to work properly with Roon.Example commands:
for the master (stable) branch:
`docker run -v [volume or host-folder]:/usr/src/app/config/ --network host fjgalesloot/roon-extension-mqtt:latest`
or if you want to for the development (beta) branch:
`docker run -v [volume or host-folder]:/usr/src/app/config/ --network host fjgalesloot/roon-extension-mqtt:beta`
## Topics
The extension subscribes to all zone updates and pushes all info it gets from the Zone object found on https://roonlabs.github.io/node-roon-api-transport/Zone.html defined by the node-roon-api-transport service. It prepends the data with "roon/[zone-name]/...".
The MQTT topci for the 1 Line Now Playing information for a zone called Zone1 is: `roon/Zone1/now_playing/one_line/line1`.
As the characters +, / and # are illegal MQTT topic characters, those will be replaced by -. So if the name of a zone is `Kitchen / Living Room` you should use the topic `Kitchen - Living-Room` when subscribing and/or publishing. The same logic applies to the `[output-name]` descibed below.
The extension will ignore `+ 1` and similar when zones are grouped. So a grouped zone named `Kitchen + 2` will need to be addressed as `Kitchen` when you want to publish or subscribe to topics.
### Control
To control a zone or an output, push a MQTT message to a zone/output like the following examples:
Send 'play' command to zone: publish to `roon/[zone-name]/command/` with message `play`
Send 'play' command to output: publish to `roon/[zone-name]/[output-name]/command` with message `play`
Available commands to use as message are defined by the RoonApiTransport: `play | pause | playpause | stop | previous | next`
### Settings
Settings apply to a zone, to change one push a MQTT message to a zone like the following examples:
Set 'shuffle' for a zone: publish to `roon/[zone-name]/settings/set/shuffle` with message `true` to activate and `false` to deactivate
Allowed messages for shuffle are: `true | false`
Set 'repeat' or 'loop' mode for a zone: publish to `roon/[zone-name]/[output-name]/settings/set/repeat` with message `all`
Allowed messages for repeat are: `disabled | one | all`
### Volume
To set the volume for a zone use the syntax:
Set volume to 65 for output: publish to `roon/[zone-name]/outputs/[output-name]/volume/set` with message `65`
Mute or Unmute are also supported. Simpy publish the message `mute` or `unmute` to the same topic. When setting the volume the unmute command will also be sent to the output._Currently no check for valid volume levels is in place._
### Seek
To change the seek position of the currently playing media in a zone use the syntax:
Set seek position to 80 seconds for zone: publish to `roon/[zone-name]/seek/set` with message `80`
_Currently no check for valid seek positions is in place._
### Power / Standby
So change the power mode of an output: publish to `roon/[zone-name]/outputs/[output-name]/power` with message `standby` to put the output into standby and `on` to power it on
Allowed messages for power are: `on | standby`
### Browsing
See for possible hierarchies: https://roonlabs.github.io/node-roon-api/RoonApiBrowse.html#~loadresultcallback
To play a specific browse item you can publish the Title of the item to play to a hierarchy topic or publish a JSON object if more control is desired.
Examples (message is case insensitive):
- publish to `roon/[zone-name]/browse/internet_radio` the message containing `radio title` starts playing the internet radion station
- publish to `roon/[zone-name]/browse/playlists` the message containing `playlist title` starts the play list (Play Now)
- publish to `roon/[zone-name]/browse/playlists` the message containing `{"title":"playlist title", "action":"Shuffle"}` starts the playlist shuffled
- publish to `roon/[zone-name]/browse/artists` the message containing `{"title":"artist name", "action":"Start Radio"}` starts Artist Radio
- publish to `roon/[zone-name]/browse/artists` the message containing `{"title":"artist name", "album":"album title", "action":"Shuffled"}` starts the album shuffled
- publish to `roon/[zone-name]/browse/artists` the message containing `{"title":"artist name", "album":"album title", "action":"Queue"}` queues the album
- publish to `roon/[zone-name]/browse/albums` the message containing `album title` starts the first album with the album title (Play Now)