Skip to main content

Sonos Control with the Amazon Echo - Part 2: Raspberry Pi

So, a little while ago I posted how I set up my Amazon Echo to control my Sonos speakers (the article is here).  However, there was a major drawback:  If the computer ever went to sleep, got rebooted or if my user got logged out everything would stop working.  Compound this with the fact that my PC is shared by my kids and you can see that I had a lot of service interruptions.  The obvious solution is to have a permanent computer just to run this service.  I needed something I could leave on 24x7 and that was really inexpensive.  Enter the Raspberry Pi.

The Raspberry Pi computer is cheap, low power consumption, and small.  It seemed like the perfect fit.  So I found a kit (on Amazon of course) and ordered it.  Now to find out if it's as good as it seems.

First, I had to put it together.  That was really easy - I just had to stick the heat sinks on, put the Raspberry Pi board into the case, and put in the SD card.  Then I plugged in a keyboard, mouse, and monitor and I was on my way.

I chose to install the Raspbian OS (Linux for the Raspberry Pi) and in a few minutes it was up and running.  OK - now all I have to do is install node.js, the node-sonos-http-api program and I'm all set.  So I run an internet search on my new Raspberry Pi for instructions (by the way, the computer was set to use as the default search engine instead of google or bing or whatever - it worked fine), found some directions and I was off!

NOTE: This is not the full instructions on how to install the Echo control of Sonos, just how to move it from a Windows PC to a Raspberry Pi PC.  The full install instructions are here.

Install Node.js

Based on the instructions I found, I was first directed to update the OS.  That sounded like a good
My Little Raspberry Pi PC
idea so that's what I did:
  • Open up a command line terminal and run the following commands:
    • sudo apt-get update
    • sudo apt-get upgrade
Next it had me install the correct repository to get node.js.  I'm not including the instructions because, after doing this I found that it only got me node.js version 0.10 and I needed version 4.4.x - not even close!  OK, back to the internet.  After a bit more searching I found some better instructions so I did the following:
  • Open up a command line terminal and run the following commands:
    • curl -sL | sudo -E bash - 
    • sudo apt-get install -y nodejs 
    • npm -version
Success!  I now have node.js (the correct version) on my Raspberry Pi PC.  

Install node-sonos-http-api

Fortunately, the Raspberry Pi comes with git installed so I didn't have to figure out how to install that in order to install the node-sonos-http-api.  Here's all I had to do:
  • Open up a command line terminal and type:
    • npm install 
  • Test it by going to the web browser and using the test url:
    • http://localhost:5005/zones 
It worked!  OK - now I have the server set up.  I also copied my presets.json file from my Windows PC to my Raspberry Pi PC so that I would have all of custom presets I've been setting up over the last couple of weeks.

Allow for Remote Connections

At this point, I decided I'd rather be running the whole thing remotely because my kids wanted the keyboard, mouse, and monitor back so they could use the Windows PC.  Fair enough.  Here's how I enabled it:
  • Menu -> Preferences -> Raspberry Pi Configuration 
  • Change password to one I actually know
  • Note that the local user is pi 
  • Find the IP address - this was a challenge since I couldn't remember how to echo your IP address on linux so I looked it up in my router.
  • Go back to my Windows PC
    • Download putty
    • log in to Raspberry Pi PC using the IP address for host, pi for the user and my password for the password
Now I don't need my Raspberry Pi hooked up to anything but power.

Redirect Incoming Connections

So, in order to really test it, I need to redirect the incoming connections from my Alexa Skill from my Windows PC to my Raspberry Pi PC.  To do this I went into my router settings and simply changed my redirect from the IP address of my Windows PC to the IP address of my Raspberry Pi PC.

Oh, and I also made sure my Raspberry Pi PC had a static IP address.  It would be a real pain if it ever got assigned a different IP address.

Test It Out

Now it was time to test it out:
  • "Alexa, tell Sonos to play country"
    • It worked!
  • "Alexa, tell Sonos to pause all"
    • Success!
  • "Alexa, tell Sonos to resume all"
    • Yay!
OK - so now my new little PC is running the show.  Awesome!  However, I wasn't quite done for the day...

Run node-sonos-http-api as a Service

Running node-sonos-http-api from a putty terminal worked great until the computer went to sleep or I was timed out or logged out, etc.  OK - kind of the same problem I was trying to avoid.  So how to I make it run in the background?

After some internet searches and some experimenting, I found something that worked:
  • cd to the node-sonos-http-api home
  • Run the following command:
    • nohup npm start &
This starts it as a service (meaning it runs in the background as long as the PC is running).

I tested it by closing my putty session and logging out of my Windows PC.  Everything still worked.

So now I have a Raspberry Pi PC controlling my Sonos speakers via a custom Alexa Skill routed through an Amazon Lambda service.

Whew!  No wonder I put off doing this!

However, having Alexa controlling my Sonos speakers is REALLY cool!

Alexa, tell Sonos to play celebration music!


Olivia Princess said…
I read this article. I think You put a lot of effort to create this article. I appreciate your work.
see this

Popular posts from this blog

Insteon: Controller vs Responder

This entry is going to be more of a technical article.  If you're not planning on setting up scenes in an Insteon environment, this isn't for you.  If you are or like me, have been running into some confusion about what should be set up as a controller, what should be a responder, and what should be both.  Here's what I learned.

I've been using Insteon switches for a couple of years now and had set up a few scenes.  When adding a switch to a scene, you have the option of adding it as a controller, a responder, or both.  Not knowing the difference and wanting to cover my bases, I set all of my scenes to both.  Since my scenes were all timing type scenes (e.g. turn on night lights at sunset) it worked fine.  Then I added an 8 button keypad and started programming the buttons to control other lights.  The program for this, of course, is a scene.  Once again, I set every switch and button as both a controller and a responder.  Then I created a scene, specifically for my E…


I just finished reading The Agony and the Ecstasy by Irving Stone. It's a biographical novel of Michelangelo (you know, the famous sculptor/artist whose statue of David and the paintings in the Cistine Chapel are super famous) that gives a very interesting view of his life. It seems that while Michelangelo had a very productive life, it wasn't a very happy one.

One of the first things that I noticed about Stone's portrayel of Michelangelo is that he was obsessed with creating sculptures and a true perfectionist. For a large portion of his life (into his 60s it seems) his every action was calculated toward a goal of sculpting marble - either getting a commission or improving his talent (or both). Not only did he want to sculpt, he wanted his pieces to be as real as possible.

His obsession with carving perfect sculptures drove him to do endless studies of the human form. He even spent months sneaking into a morgue to dissect bodies so he could figure out how the body real…

Sonos Control with the Amazon Echo - How I did it

I've had my Amazon Echo for a year or so and one thing that I've wanted ever since I purchased it, is to be able to use voice commands to control my Sonos speakers.  I waited patiently (OK  not patiently) for Sonos skill to appear on the Echo but it still hasn't come.  I was encouraged when Sonos announced it was going to focus more on voice but still nothing.  Isn't there any way to control my Sonos with my Echo?

Yes - sort of.

WARNING: This post is not for the faint of heart because the solution is not trivial.

So, I found a project on github that uses another project on github combined with a custom skill on
the Echo via a web service hosted by AWS Lambda.  OK, that was the easy part.  I knew that going in.  That's why, initially, I waited.  There must be an elegant solution out there.  I searched and waited and searched again and waited again.  Finally I decided to give it a try.  If it worked it would be really cool.  If it didn't, well I'm no worse o…