Devialet Phantom integration

After many requests to Devialet, to help me with an API connection to the Devialet Phantom speakers, I decided to try something else. Unfortunately, my Devialet speakers do not support any IOT platform, so I could need some help reverse-engineering the Android app.
Please check out my repository here!

Here is what I got so far:

  • The original Protobuf files from the Devialet android app.
  • Python protobuf files, generated from the protobuf files.
  • Network discovery working, so I can see the IP addresses and the port number the speaker use to advertise.
  • Websocket connection to the speakers.
  • Transform JSON to protobuf works.

What I need:

  • Transform and use the protobuf files the right way
  • Decode messages, intercepted with Wireshark.
  • Perhaps a way extract the information from the app?


Have you made any progress on this? I also own a pair of phantom golds and I miss to be able to control volume/playback from home assistant.

Not yet unfortunately. Also I wrote different people at Devialet, they just don’t respond to the question. Only tell me it’s not a prio right now. Really disappointing to see a great company has no interest in getting smart. Still strange the Phantom Reactor has an open API!!

Okay. It’s to bad that Devialet are not more interessted in this. Seems kinda strange that speakers in this price range doesn’t have any option to be remote controlled by an API.

I was not aware that reactor has an open API, and I can’t find any information online about it?

ah sorry, was the first search on google, must have been a sleep when i googled it the first time :slight_smile:

You mean this one?

Yes, that one.

Are you trying to connect the 1st or 2nd generation speakers? There’s a big difference between DOS1 and DOS2.
I’m also very interested in a way to add my speakers to Home Assistant.

PS. Just read the Reactor API doc. Really bizare the budget solution has better features than the premium product.
But hey, I’ve already decided never to buy Devialet in the future again. Their support is absolute crap.

I’m using DOS2, after what I know now I perhaps shouldn’t have upgraded at all (and stay on DOS1). Recently I did not find the time to work on this again. But so far, I did not receive any help unfortunately.

It’s not what you ask but maybe one of this can make a work arround :slight_smile:

Here I use Roon to handle my music and via HA i can drive my Phantoms to play / pause choose music through Tidal / Quobuz / personal files etc etc.

Hope it can help

Thanks a lot for your response. Unfortunately the solution offered by Devialet almost makes me cry. They still don’t offer something like an API, but expect to connect a Chromecast or Google Home by optical! I mean, this is no cheap speaker we are talking about. And the Roon communicates over UPNP as I remember it right, this makes is able to control the volume of the Phantom. But as soon as you switch to Optical or Bluetooth, you can’t control the volume am I right? Again, thanks for your response. It’s just that I’m disappointed Devialet is not answering to my emails and suggestions.

With Roon -> the Phantom are seen like media_player
All info bellow is with Phantom linked to Roon through Airplay (i haven’t try with rj45)

  • On Phantom with sound through Airplay: you can set music, play pause, stop, shuffle, set volume etc.etc (any media_player action is available).

  • On Phantom with a random device sending music through optical: you can stop / play / set volume etc. (obviously you can’t change track because the sound input is drived by the Optical input)

I never test bluetooth stuff.

So you actually can control the optical volume with Roon? And your Phantoms are on DOS 2?

Yes !
if you want send me private message for more info :slight_smile:

Finally Devialet released an API. So this topic became obsolete. :grinning:

As a starting point, I created a Github library and add a Postman project with working examples here.

Very interested in this. I cant code myself unfortunately… But looking forward to the progress

At this moment, I just created a volume slider with the helper function in Home Assistant:

And in Node Red, I fetch the current state every 30s:

The GET command is: http://<<Devialet IP>>/ipcontrol/v1/systems/current/sources/current/soundControl/volume

And when the slider is changed, I first check if the change is done by a user. You can find the value for the system user by using a debug node temporary here.

Then add the correct payload from the slider with JSONAta:

Change the volume, the URL is the same as the GET command:

It can happen when you set the volume and the GET is just running, your slider will display the wrong value for 30s. So after setting volume, the GET is also performed afterwards.

The result (I’m using the custom slider-entity-row):

Notice I limited the volume to 70 with the volume slider in the helper. :grimacing:


I’m just setting up my Devialets but I’m stuck in Node Red, would it be possible for you to post your flow so I can import it and figure out the missing part of the puzzle?

Many thanks J

Did you already fix your flow? Where are you stuck, please share something if you need help. I think all info needed is in my post above.