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

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

Desconectado raphik

  • ****
  • Mensajes: 72
Transformar el router en altavoz bluetooth
« en: 14-06-2020, 12:08 (Domingo) »
Gracias al magnífico trabajo de Daniel Engberg (diizzyy), que ha portado Bluez-Alsa a OpenWrt, es posible utilizar un router como altavoz Bluetooth.

En principio, valdría cualquier router soportado por OpenWrt que tenga dos puerto USB donde pinchar una tarjeta de sonido y un dispositivo Bluetooth.



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: 20-06-2020, 20:27 (Sábado) por raphik »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2125
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
No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
Los dispositivos táctiles y las pantallas pequeñas son una lacra para la información relevante y el desarrollo de interfaces de usuario.
Trabajar sin la nube debería ser una prestación de los IoT, no un bug.

Desconectado raphik

  • ****
  • Mensajes: 72
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: 72
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: 72
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 »