Hardware remote with Raspberry PI. DIY

Hi Everybody !
I don’t know if I post at the right place …I am looking to create a hardware remote that uses buttons for play, forward, and backward functions to interact with my Roon audio software server. My goal is to utilize a Raspberry Pi 4 / GPIO for this project.(I own it already ) . I installed node.js and a couple of other modules.and the OS of course.

While I have managed to get the unit recognized by Roon, I am struggling with the rest of the setup because I am not a programmer.

My initial attempts involved using a few bits of code, but unfortunately, they didn’t work as expected.

I am wondering if there is any user-friendly software or “solution”available that could help me achieve this functionality without requiring extensive programming skills. Ideally, I would like to set up a couple of buttons on a remote I am building, which can control the play, forward, and backward commands seamlessly with Roon (and eventually volume)

Using the Roon API would be an excellent solution for this,

Is there any guidance or software tools that could simplify this process for someone with my level of expertise? Any assistance or recommendations would be greatly appreciated ,:-)))
thanks a lot for your help !

Hi @Phil_88 ,
I think you can look at rooExtend of @DrCWO

You can then use several possible remote devices like Microsoft Dial, …
Just have a look at it, perhaps this will give you all you desire and much more.
Kind regards, Frank

1 Like

HI Frank , thanks for your answer :slight_smile:
I own already the numio … great software … but here I am looking to have access to the Roon transport with some physical button … with new equipment I am building DIY. would like to have physical button on the faceplate …I am not sure rooExtend can do it …
thanks a lot :slight_smile:

PS : maybe it should be moved to the ROON API DIY section ?

I’ve added a rotary encoder (equivalent of 3 buttons) and an IR remote to a Raspberry Pi for remote control of Roon through the API.

You can use this a a good starting point for your project.

I have a slightly modified version of the code that works on the easiest Zone name:


## Finds the zone of a Roon output_id and issues various commands
## Needs curl and jq on the machine running the script
## Needs the following Roon extension: HTTP Calls for Roon API
## https://github.com/st0g1e/roon-extension-http-api

# Setup variables

# Checking for needed tools
command -v curl >/dev/null 2>&1 || { echo "I require curl but it's not installed.  Aborting." >&2; exit 1; }
command -v jq >/dev/null 2>&1 || { echo "I require jq but it's not installed.  Aborting." >&2; exit 1; }

# Finding zone_id based on display_name
BEDROOMZONE=$(curl -s -H "X-Requested-With: XMLHttpRequest" http://$SERVER:$SERVERPORT/roonAPI/listZones | jq --raw-output '.zones | .[] | select(.display_name =="'$DISPLAYNAME'") | .zone_id')

echo roon_ir: $DISPLAYNAME zone is: $BEDROOMZONE

# Sending the command via the HTTP API
case "$1" in
		curl -s -o /dev/null http://$SERVER:$SERVERPORT/roonAPI/play_pause?zoneId=$BEDROOMZONE
		echo roon_ir: Play-Pause using http://$SERVER:$SERVERPORT/roonAPI/play_pause?zoneId=$BEDROOMZONE
		curl -s -o /dev/null http://$SERVER:$SERVERPORT/roonAPI/next?zoneId=$BEDROOMZONE
		echo roon_ir: Next using http://$SERVER:$SERVERPORT/roonAPI/next?zoneId=$BEDROOMZONE
		curl -s -o /dev/null http://$SERVER:$SERVERPORT/roonAPI/previous?zoneId=$BEDROOMZONE
		echo roon_ir: Previous using http://$SERVER:$SERVERPORT/roonAPI/previous?zoneId=$BEDROOMZONE
		echo "Usage: $0 {playpause|next|previous}"
		exit 1


@Nicolas_Will thanks a lot ! will check that :slight_smile:

@CrystalGipsy interesting !

1 Like