community italiana di domotica personale
 
Usare Raspberry Pi come ricevitore audio AirPlay compatibile, con Shairport Sync

Usare Raspberry Pi come ricevitore audio AirPlay compatibile, con Shairport Sync

5 minuti di lettura
SCOPI DELLA GUIDA:
  • Installare e configurare il software “Shairport Sync” su sistema operativo Raspbian di Raspberry Pi (o più genericamente, su Linux), per utilizzarlo come ricevitore audio compatibile Apple AirPlay (anche via Android)
  • Livello di difficoltà: basso
  • Costo: n/a
CONCETTI AFFRONTATI:
COMPONENTI SOFTWARE UTILIZZATE:
  • Sistema operativo Raspbian (Raspberry Pi OS)
  • Shairport Sync
  • Broker MQTT (opzionale)
PREREQUISITI:
DISPOSITIVI FISICI UTILIZZATI:
  • Raspberry Pi
  • Un dispositivo o un server in grado di effettuare streaming audio su standard AirPlay
Note e disclaimer
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata ed realizzata SOLO da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere garanzia, omologazioni e certificazioni di qualità.
Revisione guida: 2.1

Apple Airplay

Abstract

Shairport Sync è un software che rende il computer sul quale è in esecuzione ricevitore per qualsiasi stream audio inviato da un emettitore Apple AirPlay compatibile, vale a dire dispositivi Apple, oppure Android che utilizzino applicazioni in grado di effettuare streaming in questo senso (per esempio l’app AirMusic, o altre).

Collegare questo computer così configurato ad un amplificatore o a delle casse acustiche lo rende quindi implicitamente compatibili Apple AirPlay.

In questa guida andiamo a spiegare come installare e configurare al meglio questa componente su un Raspberry Pi che monti il sistema operativo Raspbian

N.b. Per gli utenti che volessero utilizzare Docker / Docker Compose, è disponibile quest’altra guida che illustra come installare Shairport Sync come container.

Si parte

Installazione

Innanzitutto è necessario installare il pacchetto relativo all’ultima versione disponibile di Shairport Sync.

Per far questo eseguire i seguenti comandi, necessari per l’installazione dei componenti necessari all’esecuzione di Shairport Sync:

sudo apt-get install autoconf libtool libdaemon-dev libasound2-dev libpopt-dev libconfig-dev -y
sudo apt-get install avahi-daemon libavahi-client-dev -y
sudo apt-get install libssl-dev -y

Successivamente, andiamo a clonare l’ultima versione di Shairport Sync:

cd ~
git clone https://github.com/mikebrady/shairport-sync.git

Ora eseguiamo la build:

cd shairport-sync
autoreconf -i -f
./configure --with-alsa --with-avahi --with-ssl=openssl --with-systemd --with-metadata
make
sudo make install

A questo punto, Shairport Sync sarà stato installato.

Avvio automatico

Provvediamo ora a configurare Shairport Sync come servizio avviato in automatico:

sudo systemctl enable shairport-sync

e provvediamo quindi ad eseguire il servizio per la prima volta:

sudo systemctl start shairport-sync

Perfezionamento della qualità audio

Prima di iniziare ad utilizzare Shairport Sync, provvediamo a perfezionare la configurazione in modo da ottenere la massima resa acustica possibile.

Innanzitutto andiamo a modificare il vitale file “/boot/config.txt” per inserire un’impostazione ad hoc.
Eseguiamo quindi l’editor di testo tramite il comando:

sudo nano /boot/config.txt

e, in fondo al file, aggiungiamo la seguente riga:

audio_pwm_mode=2

Usciamo salvando con control+x, Y, invio.
Ora impostiamo come uscita predefinita quella del jack 3.5mm stereo posto sul lato del Raspberry in luogo dell’uscita audio HDMI tramite il comando:

sudo raspi-config

Recarsi quindi alla voce di menu “System Options” > “Audio“, selezionare “Headphones“. Uscire poi con “Finish“.

Infine andiamo a modificare il range in db del volume del segnale in uscita. Entriamo in edit nel file “/usr/local/etc/shairport-sync.conf”:

sudo nano /usr/local/etc/shairport-sync.conf

e andiamo a cercare la voce:

// volume_range_db = 60 ;

sostituendola quindi con:

volume_range_db = 30 ;

Cerchiamo poi la voce “name” impostando in quella voce il nome che vorremo visualizzare come outpout sui dispositivi Apple, per esempio:

name = "SALA" ;

Usciamo salvando con control+x, Y, invio.
Effettuare un ultimo reboot.

Volume di output

Il volume di output del Raspberry influenza anche l’output di Shairport Sync. Si consiglia di impostarlo a 95%-100% tramite il comando:

alsamixer

regolare quindi il volume con le freccette della tastiera e poi uscire tramite ESC.

MQTT

Opzionalmente, dalla versione 3.3 Shairport Sync prevede l’utilizzo di MQTT come veicolo per produrre telemetrie e ricevere comandi specifici.

N.b. Per chiarimenti sul tema MQTT si consiglia di leggere la guida dedicata alla configurazione del protocollo MQTT per la propria domotica. Ovviamente, per procedere nelle configurazioni proposte in questo paragrafo si assume che sulla rete locale sia già stato presente un broker MQTT (eg. Eclipse Mosquitto).

Per attivare tale supporto è necessario modificare ulteriormente il file di configurazione del software:

sudo nano /usr/local/etc/shairport-sync.conf

recandosi sul fondo del file, si troveranno delle voci raggruppate sotto il blocco “mqtt“:

mqtt =
{
//  enabled = "no"; // set this to yes to enable the mqtt-metadata-service
//  hostname = "iot.eclipse.org"; // Hostname of the MQTT Broker
//  port = 1883; // Port on the MQTT Broker to connect to
//  username = NULL; //set this to a string to your username in order to enable username authentication
//  password = NULL; //set this to a string you your password in order to enable username & password authentication
//  capath = NULL; //set this to the folder with the CA-Certificates to be accepted for the server certificate. If not set, TLS is not used
//  cafile = NULL; //this may be used as an (exclusive) alternative to capath with a single file for all ca-certificates
//  certfile = NULL; //set this to a string to a user certificate to enable MQTT Client certificates. keyfile must also be set!
//  keyfile = NULL; //private key for MQTT Client authentication
//  topic = NULL; //MQTT topic where this instance of shairport-sync should publish. If not set, the general.name value is used.
//  publish_raw = "no"; //whether to publish all available metadata under the codes given in the 'metadata' docs.
//  publish_parsed = "no"; //whether to publish a small (but useful) subset of metadata under human-understandable topics
//  Currently published topics:artist,album,title,genre,format,songalbum,volume,client_ip,
//  Additionally, empty messages at the topics play_start,play_end,play_flush,play_resume are published
//  publish_cover = "no"; //whether to publish the cover over mqtt in binary form. This may lead to a bit of load on the broker
//  enable_remote = "no"; //whether to remote control via MQTT. RC is available under `topic`/remote.
//  Available commands are "command", "beginff", "beginrew", "mutetoggle", "nextitem", "previtem", "pause", "playpause", "play", "stop", "playresume", "shuffle_songs", "volumedown", "volumeup"
}; 

le voci da attivare e configurare (come minimo) sono le seguenti:

enabled Impostare a yes per attivare il supporto MQTT
hostname Indicare l’hostname o l’IP del proprio broker (eg. 192.168.1.100)
port Indicare la porta del servizio MQTT (solitamente 1883)
username / password Indicare le eventuali credenziali d’accesso al broker MQTT
topic Il topic MQTT presso il quale telemetrie e comandi faranno capo (lasciare shariport in caso ci sia una sola istaza del software sulla rete domestica, altrimenti personalizzarlo con un distintivo (eg. shaiport-sala)
publish_parsed Impostare a yes. Necessario affinché i payload delle telemetrie siano intelleggibili
enable_remote
Impostare a yes. Necessario affinché Shairport-Sync possa ricevere comandi via MQTT.

Per farlo ovviamente è necessario modificare il file rimuovendo i due caratteri di commento in testa ad ogni riga “//“, oltre a modificare il testo come da proprie esigenze.

Al termine della configurazione, riavviare il servizio con:

sudo systemctl start shairport-sync

Da qui in poi, telemetrie e comandi verranno rispettivamente inviate ed eseguite da Shairport-Sync. 

HOME ASSISTANT

Dopo l’avvenuta configurazione di MQTT, volendo è pensabile di integrare le funzioni AirPlay sull’HUB per domotica personale Home Assistant (o altri dotati di supporto MQTT).

Uso

Ora sarà possibile, collegandosi alla Wi-Fi e durante l’esecuzione di flussi audio (Spotify, messaggi vocali, qualsiasi cosa all’infuori dei suoni di sistema) cliccare sull’icona così fatta (sui dispositivi Apple) 

Apple Airplay Icon

per elencare tutti i dispositivi AirPlay presenti nella rete locale, incluso il nostro Raspberry Pi reso ricevitore AirPlay:

Sui dispositivi Android tramite specifiche app oppure sui server streaming in grado di erogare flussi AirpPlay, basterà “puntare” al nome assegnato all’istanza Shairport Sync e la riproduzione si avvierà automaticamente.

Apple AirPlay widget

   
Telegram News Channel