
Hacking Sonos - smacktoward
https://medium.com/p/48edd2b40cc
======
jwr
I am so glad this is happening — for the hack value itself, but also because a
genuinely useful application might result.

I love Sonos, their devices are way ahead of the competition. But their app
just plain sucks. What is the most important function of a remote control app?
Adjusting volume — and yet the useful range for the volume control occupies
less than a percent of the entire touchscreen. It is very difficult to adjust
the volume. And Sonos gives you no way to set the useful range, so you often
end up blasting your ears with monstrously loud music, because you didn't tap
the control just right.

This has been reported to Sonos numerous times and yet we still have to suffer
with the crippled volume control.

Here is hoping that there will be an alternative.

~~~
rsync
The volume control is pretty bad, but the insult added to that injury is that
it actually used to be better. You used to be able to click anywhere in the
range and jump right to that spot on the range.

Further, it is not very granular at all. If you have a playbar, you may have
noticed that the difference between mute and the very next volume up from mute
is pretty high.

Sonos is not going to fix any of this. They do not care about your complaints
about the app. People have been complaining and filing bug reports and
pointing out simple UI improvements for years and it _does nothing_. They have
made it clear that they do not care.

I am an early adopter (2005) and own about 12 of these devices and I have been
disappointed and dismayed by the UI and the capability of their apps since day
one.

Good luck with your project!

~~~
jwr
> The volume control is pretty bad, but the insult added to that injury is
> that it actually used to be better. You used to be able to click anywhere in
> the range and jump right to that spot on the range.

Actually, that solution was horrible for people like myself. I have a player
connected to an external amp with no volume control. The amp is big. Which
means that the useful volume range on the sonos is up to about 20% (perhaps),
at which point the music becomes _really_ loud.

Accidentally tapping the volume slider (and setting the volume to 85%) is a
recipe for disaster in that case.

------
geuis
The author didn't look very hard. Their API is documented (more or less) at
[http://musicpartners.sonos.com/](http://musicpartners.sonos.com/). It's more
descriptive via language than laying out all end points. Registration is
required.

After initial UPnP search, you get a URL for a descriptive xml file. Sonos
operates over the SOAP protocol.

If you want your client to be notified of changes, you have to subscribe to
each event type with a max of 3600 second timeout, then resubscribe. It's not
necessary but the system supports unsubscribing too.

One specific thing you have to hack is this. If you want to switch to a
different music service, you have to include the user id used to sign into
that service (Pandora, Rdio, etc). This data is returned in a base64 encoded,
encrypted blob. There's no way to decrypt it unless you can figure out how to
crack the key out of the device.

Fortunately you only need the user id. There's another undocumented endpoint
that returns some info that includes all the usernames, just no passwords. But
it doesn't match the them to their services. You then have to send requests
with all combinations of usernames and services and get the responses. Once
these are returned, just store the relationships.

I'm writing this from memory, sorry for the specific details. If anyone is
interested, contact me through my email in my profile and I'll get the info
from some code I wrote recently.

------
chrissnell
This is awesome. Submissions like this harken back to the early days of
Slashdot and things like the CueCat and Linksys router reverse engineering.
I'd love to see more of these hardware+software hacks show up on HN.

~~~
provost
Indubitably! These kinds of submissions are the only reason why I return to HN
daily and wade through the endless submissions that break the off-topic
guidelines [1], and yet get upvoted anyways.

[1]
[http://ycombinator.com/newsguidelines.html](http://ycombinator.com/newsguidelines.html)

~~~
dang
Our long term plan is to make for less wading and more pleasant strolling.

If you (or anyone) notice an excellent-for-HN post that has fallen through the
cracks, please let us know at hn@ycombinator.com. We're thinking of starting a
search-and-rescue program for the tragically overlooked.

------
theswan
Very cool!

I bought a Play:3 a few months back and was also dissatisfied with the given
OS X/iOS apps - I'm currently working on enabling AirPlay support for Sonos
devices.
([http://stephen.github.io/airsonos/](http://stephen.github.io/airsonos/))

Would love feedback from any Sonos users!

~~~
owenwil
Holy crap, this is exactly what I've been looking for! Amazing! I hope you
plan to continue with this project for some time - I've always wondered why
Sonos doesn't do this themselves!

~~~
theswan
Thank you! Would love further feedback (stephen at stephenwan.net) if you find
yourself having any problems using it. The code is very-much early stage, so
there are some issues to squash.

------
pedrocr
I was hoping someone was hacking the sonos itself and replacing the software.
The hardware looks awesome but the fact that it can't connect to an existing
wireless network and that you can't stream live audio to it makes it very
limited. I bought one and ended up returning it when I realized I couldn't use
it for something basic as sound for a movie on my laptop.

------
klochner
API docs or it didn't happen.

Looks like a cool project, I just find it hard to believe he used wireshark to
figure out the API on his own, given that he acknowledges:

    
    
        I took a few bits from @n1mda's project: https://github.com/n1mda/sonos-objc
    

Sorry to be cynical, my BS meter just went through the roof.

~~~
thejosh
[https://github.com/rahims/SoCo](https://github.com/rahims/SoCo) ?

~~~
cushychicken
This has migrated into its own project (I don't think Rahim is officially
affiliated any more):
[https://github.com/SoCo/SoCo](https://github.com/SoCo/SoCo)

Also, the author used his own Sonos library written in ObjectiveC rather than
Python:
[https://github.com/nathanborror/SonosKit](https://github.com/nathanborror/SonosKit)

~~~
rahim
Yup, that's correct, though the old library in my repo still works and is used
by some folks, maintenance of SoCo is handled by a group of very talented and
friendly developers under
[https://github.com/SoCo/SoCo](https://github.com/SoCo/SoCo)

It looks like the author used SoCo for the Raspberry Pi project mentioned at
the bottom of the article.

~~~
cushychicken
Hey Rahim - you did great work on that project. I've used it a few times with
an RPi to control my household. Works like a charm!

------
drewying
Very cool!

I created an app using some of nathanborrors work that let's you browse
through all of the Sonos Music services (Like Rdio, Spotify, Pandora,
iHearRadio, etc). Setup your account, browse through your collections and play
them on your system. I should submit a pull request to see if I can get this
integrated into this project!

You can see the project here: [https://github.com/drewying/Sonos-Music-
Services-Browser](https://github.com/drewying/Sonos-Music-Services-Browser)

I also have an app on the App Store that turns your Sonos System into a
wireless PA system. The current version is a little buggy but an update is
coming shortly that makes it much more stable. You can check it out here:

[https://itunes.apple.com/us/app/sonos-
voice/id689673100?mt=8](https://itunes.apple.com/us/app/sonos-
voice/id689673100?mt=8)

------
japers
Coincidentally, I just released a Sonos CLI NPM package over easter [1] that
builds on some work done by others [2]. It is targeted primarily at
circumventing the Spotify search functionality in the Sonos app, that more
often than not times out and fails to give results. I just started using it at
the office for quick playback control, and it takes away a lot of the
frustration I have with the app.

[1]
[https://www.npmjs.org/package/sonos_cli](https://www.npmjs.org/package/sonos_cli)
[2] [https://www.npmjs.org/package/sonos](https://www.npmjs.org/package/sonos)

------
jimmcslim
There are rumours that Sonos are considering opening up their platform to 3rd-
party developers. Given they have recently dropped the bridge requirement, and
the abundance of AirPlay-compatible speakers (plus WiFi-direct based
alternative to Sonos, Panasonic have released one) I think they are perhaps
starting to feel the competitive heat. I for one can't wait until Instacast or
Downcast can send audio to a Sonos without having to go via an Airport Express
as an AirPlay bridge.

------
Myrmornis
In case it's useful to anyone, if you want something that costs $25 instead of
a few hundred, Airfoil by RogueAmoeba[1] is great. It's just software: you
basically need to leave an iOS/Android device next to your amplifier, and you
can stream to it from other devices. I use it for music; AFAIK there would be
a lag between image and sound for a video source.

[1]
[https://www.rogueamoeba.com/airfoil/speakers.php](https://www.rogueamoeba.com/airfoil/speakers.php)

------
splitbrain
A bit unrelated, but can anyone enlighten me what he means by "geofence" to
detect his phone leaving the apartment?

~~~
fit2rule
Geo Fencing is where you use the GPS coordinates of a 'virtual area' to
determine whether you are 'inside the fence' or outside of it. Think of it as
virtual lines in the sand, and whenever your phone determines you've crossed a
line, it does something ..

------
zrgiu_
Please, please, bundle the Mac OSX volume controls in an app and put it
somewhere for download. I'd totally pay for that!
[https://d262ilb51hltx0.cloudfront.net/max/800/1*AzZdjG36qm90...](https://d262ilb51hltx0.cloudfront.net/max/800/1*AzZdjG36qm90y476o4zTHg.png)

------
patrickk
Amazing. Perhaps combine with Jasper[1] (RPi voice control, like Siri) for
even more cool functionality and an extra way of interacting with it.

[1][http://www.raspberrypi.org/meet-jasper-open-source-voice-
com...](http://www.raspberrypi.org/meet-jasper-open-source-voice-computing/)

------
digitalboss
FYI - Unofficial SoundCloud Sonos application using Heroku app endpoint
[http://www.hirahim.com/projects/sonos-
soundcloud/](http://www.hirahim.com/projects/sonos-soundcloud/)

Works great - cool to see the Sonos web interface for the zones.

------
berberous
This is awesome and looks great. Do you plan to release the menubar app soon?

~~~
nthnb
I'm still working on it — I'll hopefully have something out soon.

~~~
awhitty
This article is the reason I think you're the most badass designer out there.
Wireshark + wireframes + Raspberry Pi and thoughtful redesigns? Who else
blends all four into such a cool project? You're a real inspiration, so keep
it up!

------
gadders
I wish someone would hack Sonos to make its network communication more
reliable. Every time you turn it off you have to press the two buttons on top
to make it find the bridge again. Several times.

~~~
rsync
Use wired connections or you will lose.

I've been using their equipment since 2005 and they have never reliably
interconnected over the wireless.

Just spare yourself the trouble and wire them physically - they will be
flawless.

~~~
Antiquarian
What router do you like for wired SONOS connections? I have had ill luck with
mixed generation Airports Extreme (1st and 5th).

~~~
rsync
I have a dedicated ethernet switch (rackmount cisco) that all of my ethernet
devices plug into.

My router is a hop up the chain and does not interact with the sonos system at
all ...

------
elyrly
Creative idea to compile an API literally out of thin air. This might be my
future replacement.

