Almost "Roon Ready" 1st generation Devialet Phantom w/ knob

Don’t have an Ortho, there seem to be no docs (GATT Profile), no relationship with the company. Because I’m doing this on a weekend while the rest of my family is out of town, it’s going to be limited to what I have here.

That’s why this is in #tinkering

Thanks for this, @danny ! Controlling the Phantoms volume in Roon works great with the extension! Ordered a Griffin Powermate BT volume control nob on Amazon. Will be even more happy when this works!

This will not work with my extension. I only had USB.

That said, send me a link to what you bought, i might pick one up too… I am working with the Nuimo right now via Bluetooth, but I accidentally broke it.

Good stuff @danny, thanks for sharing!

Just to check i’ve got the gist of this correctly:

  • you are connecting the rPi to the Phantom how? Toslink?
  • if not UPnP this solution presumably doesn’t support 24/192?
  • this solution wouldn’t support stereo without a dialog?

I realise your use case may not require these features, just want to understand if this might provide a solution to supporting mine.

I’ve been using Danny’s extension

The RPi is connected to the Phantom using the toslink optical input - either directly on the Phantom or, if you have one, the Dialog.

You do need the Dialog to run 2 Phantoms in stereo, but the optical cable can still go into either of the Phantoms or into the Dialog - just need to configure it in Spark. I have it going into one of the Phantoms because of noise issues with the optical input on the Dialog that Devialet have not resolved yet.

The optical output is provided by the Hifiberry or IQAudio HAT on the RPi (running Roon Bridge) with the toslink optical output. It supports 24/192 and it works fine at that with the Phantoms - I’m using it now. Neither the HAT nor the Phantoms support anything higher.

The UPnP only comes into play to control the volume - the audio is not transported via UPnP.

Note - I only know this about the 1st gen Phantoms - which is what I have a pair of along with a Dialog. The later ones may support stereo with a Dialog.

1 Like

Based on Danny’s cue, I put together a system with:
Raspberry Pi 3 B+
HifiBerry Digi+ Pro HAT
RoPieee RoonBridge
It works great wired to the Devialet Phantom (ethernet>RoonBridge> SPDIF>Phantom). I have the Devialet remote control and it works perfectly. In fact, Roon volume control is set to Device and the remote is now very responsive. Before I had AirPlay driving the Phantoms. Roon volume was also set to Device, but there was a lot of lag with the remote control. It works much better now.
Thank you Danny!

Is there a guide for manually installing extensions in Win 10? The extension can’t be installed through the extension manager.

1 Like

I would love the same assistance as @ragwo is looking for, either for Mac, or directly on a Pi. I haven’t dabbled in extensions yet. I got the Extension Manager installed through the DietPi software configuration tool, but I can’t seem to find instructions on how to manually install extensions that aren’t listed, or how to get extensions added to the Extension Manager list.

Ok. I got this working now (it’s great).

Here’s the process I followed on Mac, which should be the same on Windows I assume as long as you have something similar to Terminal on your machine.

This was on DietPi on a RPi 3+, with Roon Endpoint and Roon Extension Manager installed (I didn’t install node.js because that got installed already when the Roon Extension Manager was installed, but you can double check in the Dietpi software config package manager).

This is all based on the instructions I found on which ended up pointing the way.

Access your DietPi via console by putting in this command

ssh root@[IP Address of your Pi]

This assumes you have not changed the admin username on your DietPi install from root, edit accordingly. You should now be prompted for a password to access the Pi.

Now paste this at the command prompt once you are accessing the Pi:

git clone

You should see the files getting extracted into roon-extension-devialet-phantom-volume

Change the directory you are accessing into the directory where the software was extracted using this command: cd roon-extension-devialet-phantom-volume

Install the Node.js modules by typing the command npm install

Run the application by typing nohup node app.js &

The extension should be running now. In order to exit Terminal or Putty, or whatever command line interface you are using, make sure to type exit, rather than just closing the window, to ensure the process stays active.

On an existing Roon client, go to “Settings” then “Extensions”. You should now see the Devialet Phantom Volume Control listed and it will either be searching for the device, or you’ll see Status: Found # device.

Now you can follow @danny’s instructions on the github repo ensuring you enable UPnP in Spark, and changing the device volume control in Roon in Settings/Audio/

The extension seemed to disappear when I power-cycled the Pi. There may be an additional instruction on how to ensure that the app is started up on boot. I had to go back in, cd into the directory again, and run node app.js to get the extension running again.

Hope this helps.

1 Like

Are you seeing the volume changes from the Devialet Remote Control reflected back in Roon?

I can change the volume of the Phantoms using the volume control in Roon now (which is great), but I have noted that if I change the volume using the Devialet Remote Control, the volume level changes in Spark, but doesn’t feedback to Roon, so the Volume level in Roon doesn’t change, even though the volume has been changed via the Remote. This means that as soon as I click on the Roon software volume controls, the volume jumps back to the volume set in Roon, regardless of how it was attenuated via the Remote Control.

I assume this would require the extension to listen to Spark for volume changes on the Phantom that take place outside of Roon.

No, the volume changes I make with the Devialet Remote are not reflected back in Roon. Presumably this is because the volume is controlled at the level of the device (Phantom), which is after the pi Roonbridge.
I haven’t tried to control the volume in Roon since I put this change in the system.

You can start the extension at boot with systemd:

systemd is the init system used by modern Linux systems. Here is a sample systemd unit file which can be used to automatically start this application at Linux system boot time.


Description=NodeJS app - Roon Extension Devialet Phantom Volume
ExecStart=/usr/local/bin/node app.js


To use this unit file:

• Save this template to a file called roon-extension-devialet-phantom-volume.service
Edit the user field to be the user running the application

• Edit the WorkingDirectory field to be the location where the application is installed ( NOTE : the user must have read and write access to this location!)

• Create system folder in /usr/lib/systemd, if not exists

• Using either sudo or as root, copy the edited roon-extension-devialet-phantom-volume.service file to /usr/lib/systemd/system

• Reload systemd: sudo systemctl daemon-reload

• Start the application: sudo systemctl start roon-extension-devialet-phantom-volume.service

• Enable the application at boot up: sudo systemctl enable roon-extension-devialet-phantom-volume.service

1 Like

Perhaps you weren’t commenting on the extension Danny is referring to here.

The function of this extension is to allow you to control the volume in Roon while still using a Roon Endpoint. Prior to this extension, the only way to control volume on a Phantom was to stream to it via Airplay or Bluetooth; but if you wanted to use a Roon Endpoint and an Optical cable instead (like what you’ve done) you needed to use the Devialet Remote Control (setting the volume in Roon to “fixed”); or control volume via the iOS Phantom app/Spark (again with Roon set to fixed volume).

I’m using this extension, which lets me finally switch from Fixed to being able to control the volume from Roon; but I also own the Devialet Remote Control (RC), which lets me attenuate the volume quickly when it get too loud and someone is yelling at me to turn it down. The remote still works, and I can turn the volume down using the RC, but the software volume level doesn’t change (the slider doesn’t move) meaning when I click the software volume control again, the audio jumps back to the volume level the system was at prior to manipulating it via the RC.

Awesome. Thanks for the detailed instructions @streamy68 . Much appreciated.

I made note of this up above:

This is because UPnP on the Phantom is not responding with subscribe events.

I didn’t investigate this more because I had a weekend, I don’t use Spark, and my knob controls Roon (which then controls the Phantom via this extension).

There is a comment in the code that shows this. If anyone wants to dig further, feel free:

A well deserved one. My comments weren’t intended as a judgement against the extension, just a comment to investigate how it was working perfectly for @grossmsj who also seemed to be using a Devialet Volume Control.

Thanks for sharing this.

Thank you very much! I’ll try it out as soon as possible.

You’re right. I’m just glad to be free of the constraints of Airplay, Dialog, and Spark. I’ve been in music systems for over 45 years and the Devialet Phantom system is the most twitchy, frustrating piece of equipment I’ve ever used. Roon is probably the most satisfying part of my audiophile journey. Getting them to play nice together has been a seemingly endless sequence of hope and disappointment.
Finally, I can just connect this endpoint up and get everything I need out of Roon. True, I don’t see the volume numeric feedback from Roon, but when I’m using this system the Devialet remote is right beside me in my shop and the volume control works fine now.

Definitely agree. The physical remote within arms reach is an essential accessory. I couldn’t imagine my system without it.

@ragwo I don’t think I have this quite sorted out yet, despite best intentions beyond my skill set. I didn’t realize that when I close the ssh session for the root user, the extension goes away. Clearly I don’t have it installed correctly so that it will run continually.

I put in a pull request on the Extension Manager Repository on Github to see about getting this extension added to the Manager, which would automate the systemd hurdles as well. Hopefully that gets merged, or someone with stronger tinkering chops can point us both to a step-by-step on manual extension installation. The Extension Manager has overtaken every Google search making locating a manual guide elusive. I thought I might find something in the KB, but I’m striking out there too. :frowning_face:

1 Like