This post is just to give other people ideas for projects – I’ve created a proof-of-concept, but it’s far from elegant, and will probably never be user-friendly.
I now have the ability to tell Siri to do certain operations in Roon. How? It’s pretty gross, but it works:
- I created a scene in the Home app for each voice command (e.g., “Play Jazz Favorites in the Living Room,” “Move the music to the bedroom,” “Pause everything”).
- I created a fake lightbulb in HomeKit using Homebridge and the homebridge-mqtt plugin
- I made each scene set the fake lightbulb to a particular brightness (e.g., “Play Jazz Favorites in the Living Room” is 1% brightness, “Pause everything” is 2% brightness, and so on).
- I wrote a Python script using the python-roon library which subscribes (via paho-mqtt) to the MQTT messages indicating when the brightness of the fake lightbulb changes, and send the appropriate command to Roon (e.g., "when the lightbulb is set to 1% brightness, play the playlist called ‘Jazz Favorites’ in the zone called ‘Living Room’).
It is janky! But it works. Next step will be reducing the number of moving parts by having the Python script talk directly to HomeKit via the HAP-Python library, to avoid having to use Homebridge, homebridge-mqtt, and a mqtt server (all of which I happened to already have set up for other projects, so this was the fastest way to do a proof-of-concept).
The thing it is most useful for is the commands “Hey Siri, surf” and “Hey Siri, rain” which turn on those sounds in the bedroom at low volume, and for moving the music from zone to zone. It just takes the currently playing zone and moves it where you say. Since I only have three zones, it’s tractable. “Hey Siri, move the music to the Living Room” is easier than “open Roon app / click to open zone list / click on volume icon / click transfer button / click Living Room”
Obviously, it would be even cooler if the Roon iOS app added SiriKit Media Intents. But until that day comes, this gets me a slice of that functionality.