Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How I fixed Cache, env variables and got everything running #41

Open
nato2k opened this issue May 25, 2021 · 11 comments
Open

How I fixed Cache, env variables and got everything running #41

nato2k opened this issue May 25, 2021 · 11 comments

Comments

@nato2k
Copy link

nato2k commented May 25, 2021

Just a few notes on how I got things working, mostly based on what I have read in various issue threads. Credit to #22 #30

/boot/config.txt if you bought the screen from the tutorial
comment out hdmi_force_hotplug=1
#hdmi_force_hotplug=1

uncomment sdtv_mode
sdtv_mode=0

uncomment disable overscan
disable_overscan=1

also want to put in your wpa_supplicant.conf in the boot directory as well at this time

Install git:
Step 2.
Add sudo apt install git

Clone repo
Step 3
add git clone https://github.com/dupontgu/retro-ipod-spotify-client before installing requirements

add env variables to bash profile
Step 8
sudo nano ~/.bash_profile

#!/bin/bash

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx -- -nocursor

# Disable any form of screen saver / screen blanking / power management

xset s off

xset s noblank

export SPOTIPY_CLIENT_ID='your_SPOTIPY_CLIENT_ID'

export SPOTIPY_CLIENT_SECRET='your_SPOTIPY_CLIENT_SECRET'

export SPOTIPY_REDIRECT_URI='http://localhost:8080'

export DISPLAY=:0.0

pass env variables to spotify ipod script
Step 10
replace sudo -H -u pi python3 spotifypod.py & with sudo -H -u pi --preserve-env=SPOTIPY_REDIRECT_URI,SPOTIPY_CLIENT_ID,SPOTIPY_CLIENT_SECRET python3 spotifypod.py &

Also need to compile click.c

cd /home/pi/retro-spotify-client/clickwheel
gcc -Wall -pthread -o click click.c -lpigpio -lrt

Post install
We need to generate a .cache file for the spotify token. I suggest doing this on a pi 3 or 4 and using VNC.

sudo apt install midori
git clone https://github.com/perelin/spotipy_oauth_demo
sudo apt install python python-pip
cd ~/spotipy_oauth_demo
pip install -r requirements.txt

modify spotipy_oauth_demo.py and add your client id and secret
run the oauth demo with python spotipy_oauth_demo.py

using Midori, navigate to http://localhost:8080, you should see a hyperlink that says login to spotify, click it, you will be redirected to spotify login, just login and accept the terms

cp ~/.spotipyautocache ~/retro-ipod-spotify/frontend/.cache
chmod 777 ~/retro-ipod-spotify/frontend/.cache

Run raspi-config one more time to disable VNC from the interface menu, reboot and now you should be good.

As a side note, be careful with the ipod case being metal it is really easy to short the various solder points you have made. I lined mine with electrical tape to avoid it, in the future I plan on 3d printing something to hold the various components in place and keep them from shorting.

tomaculum added a commit to tomaculum/retro-ipod-spotify-client that referenced this issue May 26, 2021
@paulomurray
Copy link

spotify refresh devices found results: {'devices': []}

when i launch the spotifypod - the devices are either NULL value - meaning that i can navigate the playlists and such but i cannot click on a song - as the DEVICE is EMPTY and simply displays 0 minutes of the song

is there a way to hard code the device ID into the code?
if yes, where?

@tomaculum
Copy link
Contributor

After a quick search in the code, I would guess this is the section, where you could do something like this:

device = UserDevice(item['id'], item['name'], item['is_active'])

def refresh_devices():
    # results = sp.devices()  
    DATASTORE.clearDevices()
    device = UserDevice("your-device-id", "your-device-name", True)            
    DATASTORE.setUserDevice(device)

I’m not sure if you pass a boolean value as is_active parameter and if it really matters.

@paulomurray
Copy link

After a quick search in the code, I would guess this is the section, where you could do something like this:

device = UserDevice(item['id'], item['name'], item['is_active'])

def refresh_devices():
    # results = sp.devices()  
    DATASTORE.clearDevices()
    device = UserDevice("your-device-id", "your-device-name", True)            
    DATASTORE.setUserDevice(device)

I’m not sure if you pass a boolean value as is_active parameter and if it really matters.

this totally works
and resolves that issue of having first use my iphone or desktop to SELECT the Spotify Connect iPod device
with this hardcoding - it goes to the ipod device straight away

thanks

@theswz
Copy link

theswz commented Jun 2, 2021

Hi! I'm definitely getting closer here! After running "python spotipy_oauth_demo.py", the hyperlink appears and when I click it, it says "INVALID_CLIENT: Invalid redirect URI." Would that be in the OAuth Demo file? Or in my source code? Or in the Spotify Developer tab? Thank you so much for your time!

@tomaculum
Copy link
Contributor

My first guess would be the Spotify Developer dashboard. Did you enter a callback URI in the application settings?

image

I guess you can enter whatever you want as long as it fits the requirements of an URI. I did use spotify-iPod://callback since this is the same scheme I used for my iOS apps.

The link in the readme indicates that http://127.0.0.1 could work as well.

https://accounts.spotify.com/authorize?client_id=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX&response_type=code&redirect_uri=http%3A%2F%2F127.0.0.1&scope=user-read-playback-state%20user-modify-playback-state%20user-read-currently-playing%20app-remote-control%20streaming%20playlist-modify-public%20playlist-modify-private%20playlist-read-private%20playlist-read-collaborative

@NullRunner
Copy link

I am so close! I am stuck on the authentication step. when I click the authenticate button in Midori after signing in, I get lead to a page saying "Midori can't find the page you're looking for". I tried 127.0.0.1, spotify-iPod://callback, and localhost:8080 as URIs, along with changing them to the same thing in the demo.py, and they have all had the same issue. Is this a trial/error sort of thing?

@tomaculum
Copy link
Contributor

I guess you are even closer as you think (: If I remember correctly, you need to copy the link of this page into your terminal to complete the authentication. There should be a matching promt, which asks you to paste the url

@NullRunner
Copy link

That's what I'm stuck on now I think. There is no prompt in the terminal, and if I paste it in, it doesn't do anything.

@nato2k
Copy link
Author

nato2k commented Jun 7, 2021

You need to do it from X AFIAK. Just right click, open browser and do it that way.

@NullRunner
Copy link

I guess I'm a bit of a novice at Linux, because I don't really know what that means. Here is what I see in VNC Viewer after allowing the program to have access to my spotify
image

@henschelm
Copy link

Hi Gents,
I figured out what the problem was, because I also had the same issue as NullRunner. In the Browser I always got "INVALID_CLIENT: Invalid redirect URI".
In the spotipy_oauth_demo.py file it says: SPOTIPY_REDIRECT_URI = 'http://localhost:8080'. You have to use exactly this http://localhost:8080 in your Redirect URIs in the Spotify App.

Then you need to remove the folder /home/pie/.config/midori (rm -rf /home/pie/.config/midori ). This was at least for me important, because the midori browser always showed "INVALID_CLIENT: Invalid redirect URI" due to the fact it was cached.

Other then tomaculum suggested I did not use VNC. I connected the PI zero directly to HDMI and started the midori browser through these two lines in /etc/xdg/openbox/autostart.

sudo vi /etc/xdg/openbox/autostart

python /home/pi/spotipy_oauth_demo/spotipy_oauth_demo.py &
midori -e Fullscreen -a http://127.0.0.1:8080

Hope that helps!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants