• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Eversolo DMP - DIY web control panel v1.0

neoheresy

Member
Joined
Mar 10, 2023
Messages
15
Likes
29
Location
Warsaw [PL]
I have recently bought a DMP-A6. I have a separate audio system hooked up to a computer I work on every day, and the DMP-A6 is plugged into my second stereo system, which is located underneath my TV.

The DMP-A6 is all great, however, one thing was quite irritating - the inability to control the basic functions of the DMP-A6 (volume up/down, mute, previous, play/pause, next track and and changing the selected audio input and output via some sort of web interface.

The web interface is such a convenience! There is no need to look for the remote controller (if you bought one) or for your cell phone, no need to launch the application first, on the cell phone, etc.

Eversolo do not publicly boast about the presence of an API mechanism in their DMP series devices, but such an API exists and was built on the foundations of the solution from previous models of network devices from Eversolo's mother company - Zidoo.

The list of available API calls may not be huge, but you can control the basic functions of the DMP-A6 from a web-based panel.

I am in no way a software developer or a web developer and this panel is a total "just a total amateur at work, trying his best" product. :)

My HTML skills and programming knowledge are at a level of an absolute beginner. I struggled a lot yeterday but I finally managed to finished writing (I finished it shortly before 4am today) my own "control panel", using the basics of HTML and JavaScript, with which I currently control my DMP-A6.

Here's how it looks like:

eversolo_sample.png

The 4 top icons (left to right), are:
  • Device shutdown
  • Device reboot
  • Changing LCD display mode
  • Turn the LCD display off and on again
I think there are more people who would benefit from having such a solution at hand, than just me, so I am sharing the goodness with fellow ASR forum members.

I also have a request, if I may!

Could I ask a DMP-A6 Master Edition and DMP-A8 owners to test the panel with their device, and let me know if everything works as it should with the Master Edition and DMP-A8?

Also, if any of you guys use Macs, give it a try, too. Though, I think the OS/platform here would not have any impact on usability/connectivity.

Many thanks in advance!

-----

Instructions and additional information

1. You need any web browser (I checked it in Chrome/Edge/Firefox/Opera on a PC) and a computer within the same local network as your Eversolo DMP device.

2. Download the attached eversolo.zip archive and extract it on your computer.

3. Enter the "eversolo" folder and open the "eversolo.js" file in your favorite text editor.

In the second line of the file you will find the following text string:

DMPA6IP = '192.168.0.1'; //Enter the IP address of the Eversolo DMP-A6 in your local network here

Replace the default IP address of 192.168.0.1 with the IP address of your Eversolo DMP device in your local network.

You can read the IP address of the device in the Settings->About menu, as seen in the following screenshot.

eversolo_ip.png


4. Save the updated file, close the file editor and click the "eversolo.html" file [It is worth adding it to your browser bookmarks, so that you do not have to look for it on your disk every time]

And it's done.

Let me know if it works for you and enjoy!
 

Attachments

  • eversolo.zip
    131.1 KB · Views: 726
Thanks for the effort. Where do you download the eversolo.zip? Maybe I am blind and just don't see where to download....
 
Thanks for the effort. Where do you download the eversolo.zip? Maybe I am blind and just don't see where to download....
For some reason (probably my mistake), it was not attached to my original post. I've just edited the post, adding the ZIP file in question.
 
Thanks for your work.
Works perfectly with my DMP-A6 and my Windows 10 PC.


Is it possible to cast the streamer screen to the PC screen ?
 
Thanks for your work.
Works perfectly with my DMP-A6 and my Windows 10 PC.


Is it possible to cast the streamer screen to the PC screen ?
It is not possible "directly". The one idea that I'd explore is having an Android emulator installed and running on your PC. You could install the Eversolo app within the emulator and use it the same way you are using it on your mobile/tablet. But that's still an extra app to install on your computer, so extra hassle I am trying to avoid.
 
I didn't have an API documentation per se. I went through the code of this Eversolo control implementation for Home Assistant, I found on GitHub, scrapping the API calls that I needed for my panel. If you download my ZIP file, you can see all the calls that I used in eversolo.html.

That Home Assistant implementation I mentioned can be found here - https://github.com/hchris1/Eversolo
 
thank you sir! I don't have a DMP-A6/8 yet but I will gladly begin testing on a Mac as soon as the unit arrives. Nice work!
 
thank you sir! I don't have a DMP-A6/8 yet but I will gladly begin testing on a Mac as soon as the unit arrives. Nice work!
Always a pleasure helping the community.
I am currently (literally, as I am watching a video tutorial in another window) educating myself in JavaScript as I have an idea to make this little panel even more enjoyable.
 
Always a pleasure helping the community.
I am currently (literally, as I am watching a video tutorial in another window) educating myself in JavaScript as I have an idea to make this little panel even more enjoyable.
Shall you need any help with JavaScript, feel free to contact me even by PM.
Keep the great job going.

Cheers, Al.
 
Shall you need any help with JavaScript, feel free to contact me even by PM.
Keep the great job going.

Cheers, Al.
Hey Al,

Thanks for your offer!

Over the last week I was trying to expand my little control panel by adding currently played track name, artist name and album cover - also scraping those details from another API call response generated by the DMP-A6, while still doing it all in HTML and JS (to keep usability at a high level for everybody).

I hit the proverbial wall when it turned out that the DMP server has CORS enabled, and when I fetch the deta in JS with 'no-cors' parameter, I can't get access to the api response text. Not via Fetch() and not by loading the API response into an IFRAME and accessing it that way :(

Just for testing purposes, I was able to do that in PHP on a local XAMPP installation I started in my home network. But my goal for the panel has always been to keep it simple - HTML + JS.

Moreover, the design of the API response for "current status" is flawed in my opinion. Its bad in a way that the parameters I want to read and then parse (artist, track name, album cover URL) are returned as different variables in the API response based on if you are using the embedded app (like Tidal) or if you are using TidalConnect started from another device. These values are also returned under different variable names for Tidal, Skype, and so on.

Moreover, there is no extra parameter published in the API response, which I could use to make an IF or CASE function and read the exact set of variables in case of Skype, Tidal or whatever_other_service is currently being used to play music.

I guess, I will stick to using the v1.0 version of my panel as I can't get past these limitations (an extra one would be my HTML/JS knowledge which is still very rudimentary).
 
If the responses contain differently named members according to different apps / services playing, AND they are consistent, checking those names COULD be of help determining WHO is playing (Tidal connect, Tidal app, Skype, etc. etc.)
Only thing, they need to differ, even slightly, to avoid mismatches.
You get JSON responses, right?
 
Yep, JSON.
Typical one (playing using embedded DMP-A6 Tidal app):

{"state":3,"position":409414,"duration":430138,"trackIndex":-1,"loopModel":0,"mqaMode":1,"currentOutput":44100,"isSeeAlbumAndArtist":true,"functionFlag":1,"playQueueChangedTime":1702717455812,"neteaseLoginState":false,"hasPlayMode":true,"hasPlayQueue":true,"playingMusic":{"id":-1443670734,"type":3,"title":"Cliche","artist":"Fish","album":"Vigil In A Wilderness Of Mirrors","extension":"MQA","sourceType":9,"isMix":false,"streamId":"tidal","streamQuality":"highres","streamUrl":"https:\/\/9972691742.airable.io\/tidal\/play\/hins6xck1iVaVkVP9kJP9_DrBOnVqo7qpovrBcdIFb","trackUrl":"https:\/\/9972691742.airable.io\/tidal\/track\/2068046","audioQuality":"highres","albumArt":"https:\/\/resources.tidal.com\/images\/2e815b37\/8442\/427d\/8847\/3645a536a965\/320x320.jpg","formIcon":"\/SystemSettings\/[email protected]","channels":2,"sampleRate":"44.1 kHz","sampleRateNumber":"44100","bitrate":"915,77 Kbps","bits":"16"},"playType":5,"vuDisplayMode":0,"spDisplayMode":0,"hasDspSetting":false,"everSoloPlayInfo":{"currentPosition":409414,"duration":430138,"everSoloPlayAudioInfo":{"audioBitsPerSample":0,"audioChannels":0,"audioSampleRate":0},"everSoloPlayOutputInfo":{"outPutBits":0,"outPutChannels":0,"outPutDecodec":"MQA","outPutMqaType":1,"outPutSampleRate":44100},"iShowAlbumIcon":true,"iShowCurrentPosition":true,"iShowDuration":true,"iShowVu":true,"isCanChangePlayStatus":true,"isCanLastPlay":true,"isCanNextPlay":true,"isCanSeek":true,"isCanShowSeekBar":true,"isHasDSP":false,"isHasSpectrum":false,"isOpenApp":false,"isOutInfoEnabel":true,"isVuMode":false,"outType":0,"playStatus":1,"playType":5,"playTypeSub":0,"playTypeSubtitle":"LOCAL","souceType":-1},"volumeData":{"maxVolume":200,"currenttVolume":172,"minVolume":0,"mMargin":4,"isMute":false,"type":1,"volumeTag":"RCA","volumeType":1,"sacdArea":1,"display":"-14.0 dB","version":"v1.2.30","language":"pl","isDsdOut":false,"isLock":false,"isVolumeEnable":true}}
 
Quickly, I can spot this:

Data.playingMusic.streamId:"tidal"

Data.everSoloPlayInfo.playTypeSubtitle:"LOCAL"

of course it is early to say, so now you should need to compare at least these 2 fields, to see IF and HOW they vary accordingly to what is the app playing.
I'd try first with the other way of playing Tidal, and see if eventually Data.everSoloPlayInfo.playTypeSubtitle gets a different value.

Then just play around.
 
If you want, you can just prepare some text files containing such responses; just be sure you write as the first line in the file WHAT IS THAT'S HAPPENING, say what app, where from, etc. etc.
Fot Tidal, Qobuz, Skype, Apple Music, etc etc whatever it is.
Then .zip them up, and if the forum allows, attach the zip here, if not, send it to me via PM.
I have some spare time today, it will be a pleasure to tinker with these kind of tasks... ;-)
 
Very interesting project :).
Hope it will proceed.
 
Nice work! I have completely detached my computers from my hi-fi setup ever since I got the Eversolo, but this will be very useful to others. Thank you for sharing.
 
I am testing with the following setup and getting good results on initial usage:
OS: Mac 14.2.1
Browser: Chrome (latest)
Streamer: DMP-A6
Streamer Version: 1.2.30

I will continue testing but great work so far.
 
Nice work! I have completely detached my computers from my hi-fi setup ever since I got the Eversolo, but this will be very useful to others. Thank you for sharing.
This project is to control the A6, not to send music to it through the computer; so it could be useful to you as well.
 
This project is to control the A6, not to send music to it through the computer; so it could be useful to you as well.

I know that, I just don’t want any computers to have anything to with my setup even for control. It’s just my thing.
 
Back
Top Bottom