openHAB integration to Spotify Web Connect API (player)

(Patrick) #1

Here’s a python script that integrates the Spotify player API (work in progress):

Thanks to this script/rules, I can set up a HabPanel like the screenshot above.

For more on setting up HabPanel with this theme, check out this thread:

Spotify on OpenHab 2?
Spotify binding vs just using http?
Idea for Binding: Spotify Connect binding
Exec Q ,CMD commands for Play ,Pause ,next song
(Patrick) #3

Sorry, there was a bug in the refresh method. I just fixed. Please get the latest version of :slight_smile:

(Olivier) #4

Thanks, its works great now :slight_smile:
Is there a way to trigger playing a specific song or playlist to a spotify connect device?

(Patrick) #5

That’s next on my list! :slight_smile:

(Jamie Jones) #6

I was looking through your instructions on your git and i’m pretty new to openhab, could you explain how i’d do this,
5. Give the client id and secret to OpenHab
Save the Client ID to spotify__client__id in OpenHab
Copy the Client Secret to spotify__client__secret in OpenHab

(Unparagoned) #7

I used the rest api interface. There are the commands anyway

curl -X PUT --header “Content-Type: text/plain” --header “Accept: application/json” -d “/[Your spotify_client_secret]” “http://openhabianpi.local:8080/rest/items/spotify_client_secret/state

curl -X PUT --header “Content-Type: text/plain” --header “Accept: application/json” -d “/[Your spotify_client_id]” “http://openhabianpi.local:8080/rest/items/spotify_client_id/state

Where [Your spotify_client_secret] is you client secret, etc.

Matrix Theme for HABPanel
(Patrick) #8


You can now add a context_uri to the play command, e.g. play spotify:user:spotify:playlist:37i9dQZF1DX5OepaGriAIm

Also, to make this easier from with HabPanel, I created a switch “spotify_action”, which is a string with the command,

e.g. set the state to “play spotify:user:spotify:playlist:37i9dQZF1DX5OepaGriAIm” and it will run the play command for that URI.

Updated files here:

(Olivier) #9

That works also :slight_smile: Now for one final request if I may… Start playing to a specific device like this api:

(Unparagoned) #10

This is how I modified to play to a device

def play_device(self,new_device):
Resume player device
print "-- Calling Service: Play Device"
device_payload=json.dumps({“device_ids”: [new_device]})
resp = “” ,“PUT”,device_payload)
if (self.debug): print resp
print " -> Play Device Failure: ", sys.exc_info()[0]
resp = “”

        return resp


(Phoenix22) #11

Nice work!! Thank you so much! :slight_smile:

(T Dods) #12

Thank you, Spotify integration is great. I did all the procedures to allow to function.

I am struggling to find how to get this into my Habpanel (I am not yet on your great theme). Do I add each item on a widget (if so which type)? Or do i import widgets somewhere?

Thank you.

(Unparagoned) #13

You might want to have a look at the HabPanel thread which has a really cool interface.

I plan on moving over when I get a chance.

(T Dods) #14

Yes, thanks. I have tried the .css stylesheet, but have a long ways to go on my panel. Just want to see if it works in the default panel as well. i suppose not to get the interactive functions?

(Unparagoned) #15

I just tried habpanel for the first time and it seems to work if you follow the instructions here

The spotify interface is on the “ground floor widget” which is “interactive”.

Before that I had made my own makeshift controls and interface in a sitemap accessed through the basic ui, which was basically just adding the spotify items. (The script is a bit nicer now so you may need to add a rule and make some virtual items to trigger them to play/pause, etc.)

(T Dods) #16

Thank you. When I get some time I will look/learn. Glad it is possible.

(Unparagoned) #17

Hey pmpkk. I forked your thing to play around with. The code is a bit messy but I’ve implemented playing to devices in a quite user friendly way. You can add the device at any point after play, using device id, index, or name (partial match as well) play 1 spotify:album:1Mrv9cxsetXUfwNtQk0Dht play 0d1841b0976bae2a3a310dd74c0f3df354899bc8 spotify:album:1Mrv9cxsetXUfwNtQk0Dht play "John's Echo" play "echo" devices /*lists all devices and saves them to spotify_devices */ devices home /* These select devices that match either name, id, or the device index spotify,py devices 3
There are also a billion ways to get the decide ids, etc. So it should be simple to implement it in any interface.

I’m not that hot on git-hub etiquette. But if my code isn’t that terrible feel free to move it back to the main branch.

(Romain ALCARAZ) #18

I have that error when testing :
/etc/openhab2/scripts $ /usr/bin/python /etc/openhab2/scripts/
Traceback (most recent call last):
File “/etc/openhab2/scripts/”, line 6, in
import requests
ImportError: No module named requests

any idea ?

(Patrick) #19

Which version of python are you using and on which platform?

(Alessandro Marongiu) #20

Hello everyone…
at point 7., when i have to test (/usr/bin/python /etc/openhab2/scripts/, i have the error on openhab console "Command not found: /usr/bin/python"
I don’t know how to check python position
Running openhab2.1 on windows 10 on “c:\openHab2” and installed Python 3.6.1.
Exec binding installed

(Patrick) #21

Thanks! That’s very cool! I’ll try to merge your changes into my latest version when I get a chance!