Roon IR Remote bridge using FLIRC

Hi everybody,

The Project at

I’ve started a project in Github that provides the code for a Roon IR bridge that turns received IR events from a FLIRC USB device into commands that are sent to the Roon Core using Roon API The solution can for instance be deployed to a RaspberryPI running Roon Bridge. Using a configuration file one will be able to map key codes to Roon transport commands (play, pause, stop, fwd, prev).
The solution can be easily deployed using Ansible to any node running a Linux system providing a systemd interface and supports Python3. The project isn’t in its final state yet but survives restarts and several days uptime without any notice of instability.

Use Case

What I’m using it for? For me the use case was to integrate a Raspberry PI wearing a DAC hat from Hifiberry into my Harmony setup. Volume buttons are ignored by the IR bridge and received by the amplifier while the transport commands from the harmony remote are translated into Roon transport commands right away.

Extended Use Case

Using the same solution we could map different IR-based remote controls mapped using a programmable FLIRC and python code that maps those commands to different Roon zones.


I need some early adopters in order to test such a solution. We could even make it run on a Raspberry PI zero with display and knobs and IR receiver so that we end up with a cheap remote control for each zone we’re sitting in.
I have always thought about that because of the fact that taking the mobile out of the pocket and waiting for the Roon App to wake up while looking for the core takes ages. A cheap remote solution could be available instantly instead when someone would like to just skip the track.

Link to Github Project


Please share a link to your repo

I’ve updated the page above. Thanks for your interest. Please respond if something isn’t crystal clear or behave differently from what you expect.

I’m confused. Is this different from the RoPieee remote control extension?

My exact thoughts. Ropieee allready works perfectly with flirc, how is this any different?

I’m not using Roopie and like to be independent from any distro for the PI or any other device running Roon Bridge. So this solution can be deployed to any device running Linux. So I was interesting to have something more independent solution. And that gives me the chance to implement some desired features like Audio response based on text-to-speech for those systems where no display is attached. So once I mark a file as “favorite” I will get a response through the same ALSA channel based on Amazon Polly speech engine. See it both as an experiment that is not bound to any distribution.


Any chance this is still viable? I would love to be able to add this to GentooPlayer distro running on an Allo Usbridge. The easy configurability of GP via different kernels & cpu management is allowing me to support higher rates via NAA without dropouts vs Ropieee. Of course Ropieee offers the Remote functionality which I was using via a USB receiver.

fyi, there was no way the ansible playbook was going to work with either my GentooPlayer on Allo USBridge. Also lots of issues with my debian server install.

However, with a whole bunch of tweaks, I was able to manually install your python app on both and have got it working successfully in both cases! So thank you very @SMANGELS. I don’t think I would have had the motivation to code this from scratch.

Hi @nquery ,
good to hear that you made it work. If there is a way to handle the 2 different cases using Ansible features I would highly appreciate if you could provide the code as Github PullRequest.


I didn’t use ansible in the end for either. I just basically just copied over your python source to the servers, manually ‘built’ the setup based on your site.yml, configured it, and then installed any needed python modules as i kept trying to run it. and then created a tweaked system service once it was manually running. flirc_util is technically necessary and i didn’t use your flic cfg files as I already configured my Flirc previously. so i had to get key mappings lined up of course.

Not sure what to add to your project. I did notice some small universal errors, eg “roon-bridge.service” should be “roonbridge.service”. I will try and create a PullRequest from them.

Hi @nquery,
haven’t touched the code for quite some while. Time to clean it up.

good point to rename the service.