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?
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?
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.
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)
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.
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):
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?