Configurando Raspberry Pi como servidor de música [Spotify]

Actualizado el 26 de Septiembre de 2022

Para configurar una Raspberry Pi y que funcione como servidor de música usando una cuenta de Spotify usaremos el paquete mopidy. Existen distribuciones ya preparadas con el servidor de música configurado pero en este caso estas instrucciones son para hacerlo sobre una distribución ya existente.

Primero hay que agregar el repositorio de mopidy y para ello primero agregamos las claves:
wget -q -O – https://apt.mopidy.com/mopidy.gpg | sudo apt-key add –

Ahora el repositorio (en este caso para una distribución jessie, habría que cambiar por la que corresponda):
sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/jessie.list

A continuación actualizar e instalar:

sudo apt-get update
sudo apt-get install python-spotify

Ahora instalamos el paquete de Spotify, según la página solo funciona para cuentas premium aunque hay gente que comenta que lo ha usado también para cuentas gratuitas:
sudo python3 -m pip install Mopidy-Spotify

Existen varias formas de arrancarlo, vamos a optar por hacerlo como servicio. Con este comando lo arrancaremos al inicio como servicio:
sudo systemctl enable mopidy

Otra opción para sistemas Debian es:
sudo dpkg-reconfigure mopidy

Estos son los clásicos comandos para arrancar, parar y reiniciar:

sudo service mopidy start
sudo service mopidy stop
sudo service mopidy restart

Ahora solo queda configurar el servidor web, viene instalado por defecto y lo configuramos en la siguiente ruta:
sudo nano /etc/mopidy/mopidy.conf

Creamos una sección [http]

[http]
enabled = true
hostname = ::
port = 6680

Lo único destacable aquí es que el nombre de host es «::» esto indica que escuchará en todas las direcciones IP, no hay validación de usuario así que cualquiera podrá acceder.

Y una sección para el usuario y contraseña de Spotify , los datos de client_id y client_secret se pueden obtener aquí.


username = hola
password = caracola
client_id = XXX
client_secret = YYY

Ahora si intentamos acceder al servidor y al puerto nos dirá que no hay cliente web instalado, existen varias alternativas.

Para poder instalar estos paquetes primero hay que instalar pip, un instalador de paquetes en Python:
sudo apt-get install python-pip

En este caso opto por Mopify y se instala con:
sudo pip install Mopidy-Mopify

Y en el fichero de configuración añadimos

[mopify]
enabled = true
debug = false

Si lo queremos actualizar:
sudo pip install –upgrade Mopidy-Mopify

También existe este otro cliente, más parecido a la interfaz de Spotify y más sencillo:
sudo pip install Mopidy-Iris

Para actualizar
sudo pip install –upgrade Mopidy-Iris

Y como configuración

[iris] 
enabled = true 
country = ES 
locale = es_ES

Es necesario reiniciar el servicio para ver los cambios, al acceder al servidor (http://servidor:6680) veremos el cliente.

Si queremos comprobar primero que el sonido está bien configurado podemos usar este comando:
aplay /usr/share/sounds/alsa/Front_Center.wav

Se pueden cambiar la salida de audio usando raspi-config (System->Audio)  o de forma manual junto con algunas otras opciones con alguno de estos dos métodos dependiendo de la versión:

Versión antigua

Usar HDMI si está conectado, sino jack de 3.5» (si este comando da un error probar con la versión nueva):
sudo amixer cset numid=3 0

Forzar usar solo jack de 3.5:
sudo amixer cset numid=3 1

Forzar usar solo HDMI:
sudo amixer cset numid=3 2

Para controlar el volumen se puede poner estos alias en ~/.bashrc
# Increase volume by 5%
alias volu=’amixer set PCM — $[$(amixer get PCM|grep -o [0-9]*%|sed ‘s/%//’)+5]%’
# Decrease volume by 5%
alias vold=’amixer set PCM — $[$(amixer get PCM|grep -o [0-9]*%|sed ‘s/%//’)-5]%’

O establecer directamente el valor con (donde 90% es el volumen deseado):
amixer sset PCM,0 90%

Version nueva

Para cambiar las opciones de audio hay que editar el fichero .asoundrc que tendremos en el directorio home del usuario, también podemos guardarlo en la ruta /etc/asound.conf en cuyo caso será para todos los usuarios, sino lo tenemos lo creamos:

pcm.!default {
  type asym
  playback.pcm {
    type plug
    slave.pcm "output"
  }
  capture.pcm {
    type plug
    slave.pcm "input"
  }
}

pcm.output {
  type hw
  card 0
}

ctl.!default {
  type hw
  card 0
}

Donde indica card 0 si ponemos card 1 usaremos la salida Headphones sino card 0 usará HDMI después de crear este fichero hay que reiniciar la sesión usando su pi si no lo hemos hemos en /etc/asound.conf

Para controlar el volumen se puede poner estos alias en ~/.bashrc, este ejemplo es para el jack de 3.5» sino se ha establecido la salida de jack usando el fichero anterior este comando dará error (igual para HDMI).
# Increase volume by 5%
alias volu=’amixer set Headphone — $[$(amixer get Headphone|grep -o [0-9]*%|sed ‘s/%//’)+5]%’
# Decrease volume by 5%
alias vold=’amixer set Headphone — $[$(amixer get Headphone|grep -o [0-9]*%|sed ‘s/%//’)-5]%’

Para HDMI haríamos:
# Increase volume by 5%
alias volu=’amixer set HDMI — $[$(amixer get HDMI |grep -o [0-9]*%|sed ‘s/%//’)+5]%’
# Decrease volume by 5%
alias vold=’amixer set HDMI — $[$(amixer get HDMI |grep -o [0-9]*%|sed ‘s/%//’)-5]%’

O establecer directamente el valor con (donde 90% es el volumen deseado) para el jack de 3.5»
amixer sset Headphone,0 90%

O para HDMI
amixer sset HDMI,0 90%

Acceso a la Web

Ahora solo queda acceder a la web con la ip y puerto configurado y elegir el cliente, es posible que haya que echar un vistazo a la configuración del cliente para ver que todo está correcto como dar acceso a spotify.

A veces el refresco de algunas playlist no funciona correctamente y puede ser necesario borrar cookies o recargar la página, se puede probar desde otra máquina para verificar si realmente refresca o no.

Ahora vamos a ver como configurar estas rutas por algo más fácil de recordar, para ello en Apache creamos un virtual host que nos haga de proxy con el servidor de spotify, creamos un fichero en la carpeta /etc/apache2/sites-available/003-spotify.conf con el siguiente contenido, obviamente deberemos tener un sistema DNS que nos resuelva correctamente el nombre spotify, vamos a suponer que el servidor está en la dirección 192.168.1.4

<VirtualHost spotify:80>
  ServerName spotify.domain
  SererAlias spotify
  ProxyPreserveHost On
  ProxyPass / http://192.168.1.4:6680/
  ProxyPassReverse / http://192.168.1.4:6680/
  CustomLog /var/log/apache2/spotify.log combined
  ErrorLog /var/log/apache2/spotify.error.log
</VirtualHost>

Para habilitar el sitio ejecutamos:

sudo a2ensite 004-spotify.conf

Fuentes:

https://github.com/mopidy/mopidy-spotify

https://www.mopidy.com/

Configurando Raspberry Pi como servidor de música [Spotify]

Global Robot Expo 2017

Patrocinado por la FNAC tuve ocasión de echar un vistazo a la Expo Robot que se celebró este año en Madrid, un espacio amplio donde había varias áreas temáticas.

La primera sección dedicada a robótica industrial, robots que se mueven por ejemplo siguiendo una línea o que se dedican a automatizar ciertas tareas.

Img 1

Img 2

Después un paseo por las cada vez más pujantes impresoras 3D, se pueden apreciar creaciones de cierta complejidad.

Img 3

Los robots educativos que se puedan programar siguen apareciendo aunque es verdad que todavía sigue siendo un poco cara la gama alta.

Img 4

Img 5

Una sección dedicada a la domótica casera, por ejemplo el clásico ejemplo de la aspiradora:

Img 6

O un autónomo limpiador de cristales al más puro estilo spiderman:

Img 7

O algo un poco más complejo como un pequeño asistente casero:

Img 8

Ahora un espacio dedicado a los fans de los clásicos:

Img 9

Una de las secciones más grandes estuvo dedicada a los drones habiendo incluso competiciones entre ellos, siendo algunos de ellos de gama profesional necesitando sistemas de manejo en remoto.

Img 10

Img 11

Img 12

Una de las secciones más interesantes aunque no tuviera grandes máquinas a la vista, la UPV con su hyperloop de Elon Musk:

Img 13

Una sección dedicada a armazones asistidos, principalmente orientado a discapacidad, aunque más de uno estaría pensando en ser el próximo IronMan:

Img 14

Img 15

También se pudieron ver ejemplos de asistentes, cada vez un poco mejores:

Img 16

Img 17

Img 18

Interesantes de ver en acción:

Vid 1

O más interactivos:

Vid 2

O un ejemplo muy interesante de una araña artificial, muy logrado:

Vid 3

En general muy entretenido e interesante, habrá que volver el próximo año.

Global Robot Expo 2017