Multi-room Spotify via Raspberry Pi

Home automation, ook wel domotica genoemd, draait om het automatiseren van apparaten in woonhuizen. Whirlwind volgt deze ontwikkelingen met interesse en schrijft uit eigen ervaring zo nu en dan een artikel over dit onderwerp. In dit artikel maken we een multi-room-audiosysteem voor Spotify dat vergelijkbaar is met Sonos. Hierbij gebruiken we Raspotify (Librespot) en Snapcast. Een Spotify Premium-account is noodzakelijk.

Stap 1: Raspotify (Librespot) installeren

Raspotify is een Spotify Connect-client voor Raspberry Pi die gebruikmaakt van Librespot. Librespot kan Spotify-audio op onder andere een Raspberry Pi afspelen.

Installeer Raspotify op een Raspberry Pi met het volgende commando:

curl -sL https://dtcooper.github.io/raspotify/install.sh | sh

Het installatiescript van Raspotify installeert curl en apt-transport-https. Daarna wordt Raspotify van GitHub gedownload en geïnstalleerd. Na de installatie wordt Raspotify gestart, wat overigens ook automatisch gebeurt bij het opstarten van de Raspberry Pi.

Test eventueel Raspotify door een speaker aan te sluiten op de 3,5 mm jack-aansluiting van de Raspberry Pi of sluit de Raspberry Pi met een HDMI-kabel aan op een TV of versterker. Overigens geeft de 3,5 mm jack van de Raspberry Pi veel ruis. Dit kan opgelost worden met een geluidskaart. Aansluiten via HDMI kan uiteraard ook; dat levert een veel beter geluid op dan de 3,5 mm jack.

Open Spotify op een telefoon, tablet, PC of Mac die zich in hetzelfde netwerk als de Raspberry Pi bevindt, ga naar Apparaten beschikbaar, kies Raspotify en start de muziek. Mocht geen muziek afgespeeld worden, verhoog dan op de Raspberry Pi het volume met alsamixer en/of controleer de status van Raspotify:

sudo service raspotify status

Op een later moment kun je Raspotify als volgt bijwerken, bijvoorbeeld als geen verbinding gemaakt kan worden via de Spotify-app.

sudo apt-get update
sudo apt-get upgrade
sudo reboot

Stap 2: Snapcast installeren

De Snapcast-server is een extensie voor audio players zoals Raspotify/Librespot die de audio doorgeeft aan Snapcast-clients. De clients spelen de audio gesynchroniseerd af zodat in iedere ruimte dezelfde muziek klinkt. Zowel de Snapcast-server als de clients draaien op Raspberry Pi’s.

Overigens is het mogelijk om op één Raspberry Pi zowel de Snapcast-server als client te installeren. De Snapcast-server geeft de audio door aan de andere Raspberry Pi’s én speelt via de eigen Snapcast-client ook zelf de audio af.

Voordat we de Snapcast-server installeren en koppelen aan Raspotify/Librespot, schakelen we Raspotify uit zodat deze niet automatisch wordt gestart bij het opstarten van de Raspberry Pi. Dit is van belang omdat Librespot door de Snapcast-server gestart moet worden.

sudo service raspotify stop
sudo systemctl disable raspotify

Vervolgens installeren we de Snapcast-server en client op de Raspberry Pi. Voor de installatie is git vereist.

sudo apt-get update
sudo apt-get install git

Download Snapcast in bijvoorbeeld de map /home/pi. Bij het uitvoeren van het onderstaande commando git clone wordt een map genaamd snapcast aangemaakt.

cd /home/pi
git clone https://github.com/badaix/snapcast.git

Download ook de externe submodules:

cd snapcast/externals
git submodule update --init --recursive

Download de benodigde software:

sudo apt-get install build-essential
sudo apt-get install libasound2-dev libvorbisidec-dev libvorbis-dev libflac-dev alsa-utils libavahi-client-dev avahi-daemon

Bouw de Snapcast-server en client:

cd /home/pi/snapcast
make

Als je alleen de Snapcast-client wilt bouwen (omdat op een andere Raspberry Pi reeds de Snapcast-server draait), open dan de map /home/pi/snapcast/client en geef het commando make.

Installeer de Snapcast-server en client:

sudo make installserver
sudo make installclient

Als je alleen de Snapcast-client wilt installeren, open dan de map /home/pi/snapcast/client en geef het commando sudo make install.

De Snapcast-server en client starten automatisch na de installatie en ook bij het opstarten van de Raspberry Pi.

Nu kunnen we Raspotify/Librespot koppelen aan de Snapcast-server. Schakel eerst de Snapcast-client en server uit:

sudo service snapclient stop
sudo service snapserver stop

Open het Snapserver-configuratiebestand:

sudo nano /etc/default/snapserver

Wijzig de waarde van SNAPSERVER_OPTS als volgt:

SNAPSERVER_OPTS="-s spotify:///librespot?name=Spotify&bitrate=320&enable-volume-normalisation"

Start de Snapcast-server en client:

sudo service snapserver start
sudo service snapclient start

Kies in Spotify het apparaat Snapcast en start de muziek. Controleer of de muziek wordt afgespeeld op de Raspberry Pi waarop de Snapcast-server en client geïnstalleerd zijn. Installeer vervolgens de Snapcast-client op een andere Raspberry Pi en controleer of de audio synchroon wordt afgespeeld.

Stap 3: Snapcast-component in Home Assistant inschakelen

Als je de Snapcast-clients wilt beheren in Home Assistant, schakel je als volgt de Snapcast-component in. Open het configuratiebestand van Home Assistant en plaats daarin het volgende:

media_player:
  - platform: snapcast
    host: 192.168.178.22

Vul het IP-adres van de Raspberry Pi in waarop de Snapcast-server draait. Na de herstart van Home Assistant verschijnt een media player waarmee het volume van de Snapcast-client ingesteld kan worden. Ook is er een Spotify Snapcast-groep waarmee het volume van alle Spotify Snapcast-clients ingesteld kan worden.

Tip: installeer in Home Assistant ook de Spotify-component. Hiermee kan de Spotify-audio gepauzeerd worden en naar het vorige en volgende nummer gesprongen worden. Verder is het volume instelbaar en wordt de cover getoond.