Takes a time via an http request, saves it to crontab, uses the Spotify API or radio with mpc
to start playing music at the given (saved) time.
Warning: WIP: the README is lacking and the setup is not smooth
- Install the OS in headless mode following Tom's Hardware Guide
- Make sure the timezone of the raspberry pi is the same as your timezone. Locale should be set in the SD flashing process, but consider double-checking. Locale can be very annoying, this article can help.
- Consider installing rpi-audio-receiver.
- This enables the Raspi to work as music receiver over Spotify Connect, AirPlay and Bluetooth. The script will let you choose which.
- You can use this repository (in internet radio mode) without any of those. If you want to use Spotify as an alarm clock, you'll need Spotify Connect
- If the installation doesn't work, consider instaling individual modules separately (Shairport Sync, Raspotify and others - see also
install.sh
in rpi-audio-receiver - After installation, Spotify and AirPlay should work immediately, bluetooth could need a restart
- If you're using a Raspi Zero W, use the https://github.com/Arcadia197/rpi-audio-receiver fork instead. You might run into problems with bluetooth anyway; consider also this guide
- Install this repo's contents (below)
# At the moment the path is ~/Developer/spotify-alarm-clock is hardcoded in `spotify-alam-clock.service`, so it's easiest to use it until that's improved
mkdir ~/Developer
cd ~/Developer
git clone https://github.com/janek/spotify-alarm-clock/
cd spotify-alarm-clock
# Install apt dependencies and then Python dependencies in a virtualenv
make dependencies
# Install the systemd service
sudo make install
# Add defalt radio stations - you can also add your own with `mpc add <stream link>`
make radio-staions
# copy sample ini file
cp config.sample.ini config.ini
# configure here:
nano config.ini
aplay /usr/share/sounds/alsa/Front_Center.wav
is a good test to see if sound worksaplay -l
to see what sound devices are visibleaplay /usr/share/sounds/alsa/Front_Center.wav -D sysdefault:CARD=1
with 1 or 0, to test specific sound outputs- for
mpc
/mpd
to work, dosudo vi /etc/mpd.conf
and uncomment lines get this result:
audio_output {
type "alsa"
name "My ALSA Device"
}
-
aplay /usr/share/sounds/alsa/Front_Center.wav -D sysdefault:CARD=1
(a.k.asnd1
if aliases are installed) should work out of the box - if it doesn't, debug that first before going to next steps -
Update configurations:
sudo vim /etc/asound.conf -> add these lines
defaults.pcm.card 1
defaults.ctl.card 1
sudo vim /usr/share/alsa/alsa.conf -> change 0s to 1s to get the same lines as a result
defaults.pcm.card 1
defaults.ctl.card 1
- Restart
ssh-copy-id -i ~/.ssh/id_ed25519.pub pi@zero-one
to copy your ssh public key and remove the need for a password. Replaceed25519
by whatever you're using (you can see what's in the folder) andpi@zero-one
with your username and hostname/ipset -o vi
to use vi shortcuts in terminalmake aliases
for useful aliases (seebash_aliases.sh
to see the contents).- (warning: some aliases use
vim
to edit files, which won't work by default. You have to install vim/neovim, or change/alias it tovi
ornano
) - you can type
alias
to see the list of available aliases (after you install them)
- (warning: some aliases use
sudo vi /etc/motd
https://patorjk.com/software/taag to make a friendly welcome message (consider checking "test all" on the website)sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
(orwifi
if you have aliases) to add additional wifi networks
This project won't run on macOS or Windows (I think). You can use Docker to run the code localy. (Tip for macOS in 2023: OrbStack is the best way to use Docker).
To build and run:
make docker-build
make docker-run
You can then connect to it using localhost from machine you're working on, or the IP of that machine when connecting from somewhere else. Verify that it's working with:
http://localhost:3141/
or e.g. http://192.168.0.38:3141/
- Create an app on Spotify and input the Spotify client id into your
config.ini
- Get the hostname of your Raspberry Pi
- Make sure
http://<your_hostname>:3141/authorize_spotify
is included in "Redirect URIs" on your Spotify dashboard- Internal note: for our Spotify app, some hostnames are pre-authorized already, for example
polywaker-music
ornice-pi
, also with the.local
postfix
- Internal note: for our Spotify app, some hostnames are pre-authorized already, for example
- Go to
http:/<your_hostname>:3141/login
- You should see a message that says the access token and refresh tokens have been saved
- Edit
/etc/raspotify/conf
and add the following: LIBRESPOT_USERNAME="<your_spotify_username>" LIBRESPOT_PASSWORD="<your_spotify_password>"- (without this the device will "disappear" from the /devices/ endpoint of the Spotify API and will not be reachable for the alarm)
- If you ran
make dependencies
, you should havempd
andmpc
installed. You can runsudo apt install mpd mpc
to be sure. - Edit
/etc/mpd.conf
and uncomment or add lines to say the following:audio_output { type "alsa" name "My ALSA Device" }
- Set repeat on to be able to switch back-and-forth between stations:
mpc repeat true
- Links that could help if you get stuck: 1, 2
The server is managed via a systemd service. Here's a quick cheatsheet:
- at the moment the service expects the repository to be located at
/home/pi/Developer/spotify-alarm-clock/
and will not work otherwise. You can change the location inspotify-alarm-clock.service
systemctl --user status spotify-alarm-clock
- Get general information about the service (like whether it is running and some latest logs).systemctl --user start spotify-alarm-clock
- Start the service manually.systemctl --user stop spotify-alarm-clock
- Stop the service manually.journalctl --user spotify-alarm-clock
./virtualenv/bin/python server.py