?>/script>'; } ?> Transformar el router en altavoz bluetooth Widgets Magazine

Autor Tema: Transformar el router en altavoz bluetooth  (Leído 5951 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado raphik

  • *****
  • Mensajes: 102
Transformar el router en altavoz bluetooth
« en: 14-06-2020, 12:08 (Domingo) »
Es posible utilizar un router OpenWRT como altavoz Bluetooth gracias al proyecto BlueZ-ALSA, que permite recibir audio desde dispositivos bluetooth externos, sin necesidad de instalar PulseAudio. Voy a explicar como hacerlo sin entrar en demasiados detalles.

Como punto de partida necesitamos:
  • Un router OpenWRT conectado a Internet que tenga dos puertos USB libres
  • Una tarjeta bluetooth USB compatible con Linux (cuidado con esto, que las hay que sólo valen para Windows)
  • Una tarjeta sonido USB
  • Conocimientos para manejar Openwrt desde un cliente remoto (SSH o PuTTY)
NOTA: El paquete que he compilado soporta únicamente routers mips32, que son estos: https://openwrt.org/docs/techref/instructionset/mips_mips32#devices_with_this_instructionset.


Puedes hacer tu propia compilación (los detalles están aquí) o descargarte alguna de estas:
Altavoz Bluetooth con el HG553
Altavoz Bluetooth con el HG556a

Las compilaciones incluyen ALSA, BlueZ y Bluez-Alsa. No se utiliza PulseAudio.
ALSA es un componente del núcleo de Linux diseñado para manejar dispositivos de sonido.
BlueZ es la pila oficial de protocolos Bluetooth para Linux. A partir de la versión 5 dejó de ser compatible con ALSA, en favor de PulseAudio. PulseAudio parece no funcionar en OpenWrt. Afortunadamente existe Bluez-Alsa.
Bluez-Alsa permite la integración entre BlueZ y ALSA, actuando como intermediador entre perfiles BT de audio y dispositivos BT de audio. Bluez-Alsa no está incorporado en OpenWrt, pero se puede incorporar haciendo una "compilación a medida".


Cargar la imagen en el router, insertar los pinchos USB de audio y BT y arrancar el router.


EMPAREJAR EL TELÉFONO MÓVIL CON EL ROUTER Y ENVIARLE AUDIO

En el PC, abrir una sesión SSH e invocar la utilidad para configurar conexiones BT "bluetoothctl"
Código: [Seleccionar]
root@OpenWrt:~# bluetoothctl
Agent registered

Desde la utilidad "bluetoothctl", activar el pincho BT del router
Código: [Seleccionar]
power on
discoverable on
pairable on
default-agent




En el teléfono móvil, activar BT. El dispositivo OpenSpk (el router) aparecerá disponible. Pulsarlo para vincular




El teléfono móvil pide un PIN. Poner cualquiera, por ejemplo 0000




La utilidad "bluetoothctl" detecta la solicitud de conexión de un nuevo dispositivo. Confirmar PIN. Poner el mismo que al teléfono móvil
Si pide confirmación para algún servicio determinado, contestar que sí. La conexión queda establecida




En el teléfono, el dispositivo OpenSpk aparece sincronizado y conectado




Cerrar la utilidad "bluetoothctl"
Código: [Seleccionar]
quit
En la sesión SSH, teclear
Código: [Seleccionar]
alsamixer -D bluealsa -V capture
Bajar el volumen de captura hasta un discreto 28% aproximadamente, para evitar saturación




Salir pulsanto la tecla Esc

En la sesión SSH, teclear
Código: [Seleccionar]
bluealsa-aplay -vv 00:00:00:00:00:00
La utilidad bluealsa-aplay recoge el audio del dispositivo BT y lo redirecciona a la tarjeta de sonido




Volver al teléfono móvil y reproducir un audio o un vídeo. ¡El sonido se oirá en los altavoces o auriculares del router!

El volumen del pincho de audio se puede controlar con alsamixer
Código: [Seleccionar]
alsamixer



FICHEROS DE CONFIGURACIÓN
(Incluidos en la compilación)

/etc/bluetooth/audio.conf (Configura el pincho BT para recibir audio)
Código: [Seleccionar]
[General]
Enable=Source
(Parece que lo razonable sería Enable=Sink, pero no. BlueZ es así.)

/etc/bluetooth/main.conf (Se le puede poner un nombre al altavoz BT. No es necesario, pero mola)
Código: [Seleccionar]
[General]
Name=OpenSpk

/etc/init.d/bluealsa (Habilita el servicio bluealsa audio-sink)
Código: [Seleccionar]
#!/bin/sh /etc/rc.common

START=70
USE_PROCD=1
PROG=/usr/bin/bluealsa
start_service() {
procd_open_instance
procd_set_param command "$PROG" -i hci0 -p a2dp-sink
procd_close_instance
}
stop() {
service_stop /usr/bin/bluealsa
}

/etc/dbus-1/system.d/bluealsa.conf (Políticas de seguridad)
Código: [Seleccionar]
<!-- This configuration file specifies the required security policies
     for BlueALSA core daemon to work. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <!-- ../system.conf have denied everything, so we just punch some holes -->

  <policy user="root">
    <allow own_prefix="org.bluealsa"/>
    <allow send_destination="org.bluealsa"/>
  </policy>

  <policy group="audio">
    <allow send_destination="org.bluealsa"/>
  </policy>

</busconfig>

/etc/asound (Genera el dispositivo PCM virtual bluealsa)
Código: [Seleccionar]
defaults.bluealsa.service "org.bluealsa"
defaults.bluealsa.interface "hci0"
defaults.bluealsa.profile "a2dp"
defaults.bluealsa.delay 10000

Es necesario reiniciar los servicios para activar los cambios
Código: [Seleccionar]
service dbus restart
service bluetoothd restart
service bluealsa restart

O, si se prefiere, hacer un reboot.
« Última modificación: 25-08-2023, 13:10 (Viernes) por raphik »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re:Transformar el router en altavoz bluetooth
« Respuesta #1 en: 15-06-2020, 11:05 (Lunes) »
[...] Asegurarse de que se compilará la versión 19.07.3, actualizar e instalar fuentes [...]

Según la página de openwrt, esa versión da problemas en el arranque del hg556. ¿No será mejor probar con la 19.07.4 que dice que ese asunto ya está arreglado?

Está en los warnings en la página:
https://openwrt.org/toh/huawei/hg556a

Desconectado raphik

  • *****
  • Mensajes: 102
Re:Transformar el router en altavoz bluetooth
« Respuesta #2 en: 15-06-2020, 12:31 (Lunes) »
Según la página de openwrt, esa versión da problemas en el arranque del hg556. ¿No será mejor probar con la 19.07.4 que dice que ese asunto ya está arreglado?

Está en los warnings en la página:
https://openwrt.org/toh/huawei/hg556a

Gracias por avisar.

He quitado los enlaces para el HG556a. Los volveré a poner cuando genere nuevas imágenes 19.07.4.

Desconectado raphik

  • *****
  • Mensajes: 102
Receta para una compilación a medida que incluya BlueZ, ALSA y Bluez-Alsa.
« Respuesta #3 en: 15-06-2020, 12:41 (Lunes) »
Bluez-Alsa no viene "de serie" con OpenWrt. Para incluirlo hay que hacer una compilación a medida.

Descargar la versión SNAPSHOT (19.07.4). BlueZ y Dbus no interactúan bien en versiones anteriores
Código: [Seleccionar]
git clone https://github.com/openwrt/openwrt.git/
Descargar fuentes
Código: [Seleccionar]
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a

Descargar fuentes blue-alsa
Código: [Seleccionar]
mkdir -p ./feeds/packages/sound/bluez-alsa
mkdir -p ./feeds/packages/sound/bluez-alsa/files
wget -O  ./feeds/packages/sound/bluez-alsa/Makefile https://raw.githubusercontent.com/diizzyy/packages/sound-bluez-alsa/sound/bluez-alsa/Makefile
wget -O ./feeds/packages/sound/bluez-alsa/files/bluealsa.init https://raw.githubusercontent.com/diizzyy/packages/sound-bluez-alsa/sound/bluez-alsa/files/bluealsa.init

Editar el fichero openwrt/feeds/packages/sound/bluez-alsa/Makefile y eliminar la dependencia @LINUX_4_14 (línea 29).

Instalar fuentes blue-alsa
Código: [Seleccionar]
./scripts/feeds update -a
./scripts/feeds install bluez-alsa

Configurar opciones de firmware
Código: [Seleccionar]
make menuconfig
Seleccionar router
Target System ---> (X) Broadcom BCM63xx
Target Profile ---> (X) Huawei EchoLife HG553


Habilitar LuCI y comprobar la wifi (que a veces no está correctamente configurada)
LuCI ---> Collections ---> <*> luci
Kernel modules ---> Wireless Drivers ---> <*> kmod-b43
Network ---> WirelessAPD ---> <*> wpad-basic


Habilitar soporte de AUDIO
Kernel modules ---> Sound Support ---> <*> kmod-sound-core
Kernel modules ---> Sound Support ---> <*> kmod-usb-audio
Sound ---> <*> alsa-utils
Sound ---> <*> mpg123


Habilitar soporte BLUETOOTH
Utilities  ---> <*> bluez-daemon
Utilities  ---> <*> dbus-utils (para inspeccionar dbus)
Kernel modules ---> Input modules ---> <*> kmod-input-uinput (por si acaso hiciera falta)


Habilitar BLUEALSA
Global build settings  ---> (*) Compile with support for patented functionality
# Si no se marca lo que pone en la línea anterior, no se podrá elegir la siguiente
Sound ---> <*> bluez-alsa
# Si no se optimizar el driver fdk-aac para velocidad, dará error al compilar
Sound  ---> -*- fdk-aac
  Configuration ---> (*) Optimize for speed


Compilar (Mi PC sólo tiene dos núcleos)
Código: [Seleccionar]
make -j3 V=cs
« Última modificación: 17-06-2020, 20:12 (Miércoles) por raphik »

Desconectado raphik

  • *****
  • Mensajes: 102
Compilación BlueAlsa para el HG556a
« Respuesta #4 en: 16-06-2020, 07:58 (Martes) »
Según la página de openwrt, esa versión da problemas en el arranque del hg556. ¿No será mejor probar con la 19.07.4 que dice que ese asunto ya está arreglado?

Está en los warnings en la página:
https://openwrt.org/toh/huawei/hg556a

He compilado la versión SNAPSHOT (la 19.07.04, actualmente) y las he colgado aquí:
Huawei EchoLife HG556a (version A)
Huawei EchoLife HG556a (version B)
Huawei EchoLife HG556a (version C)

Para compilar hay que modificar el fichero openwrt/feeds/packages/sound/bluez-alsa/Makefile.
https://github.com/diizzyy/packages/blob/sound-bluez-alsa/sound/bluez-alsa/Makefile
Hay que eliminar la dependencia @LINUX_4_14 de la línea 29 o sustituirla por @LINUX_5_4.

He hecho pruebas con dos HG556a, versiones B y C, y funcionan bien. No tengo ninguno de la versión A.
« Última modificación: 18-06-2020, 11:50 (Jueves) por raphik »