Autor Tema: Bluetooth en OpenWrt  (Leído 5375 veces)

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

raphik

  • Visitante
Bluetooth en OpenWrt
« en: 22-01-2016, 22:54 (Viernes) »
Hace ya varios meses que le vengo dando vueltas al tema del Bluetooth en OpenWrt. La información que se encuentra en Internet es confusa y hasta contradictoria en algunos casos. Hay mucha información obsoleta de versiones antiguas. En fin, escribo este post para compartir mis pequeños avances y animaros a comentar los vuestros.

Las pruebas las he realizado en un hg553 con un firmware CC 15.05 recién bajado del repositorio.
He probado cuatro pinchos BT distintos, de los que sólo dos han funcionado bien.


1) PRELIMINARES.

Conectar el pincho BT al usb trasero del router y comprobar que OpenWrt detecta algo.
Código: [Seleccionar]
dmesg
  usb 2-2: new full-speed USB device number 1 using ohci-platform

Instalar paquetes bluetooth.
Código: [Seleccionar]
opkg update
opkg install kmod-bluetooth bluez-libs bluez-utils

El script de arranque es /etc/init.d/bluetoothd [command]. Admite los comandos:
  start     Inicia el servicio
  stop      Detiene el servicio
  restart   Reinicia el servicio
  reload    Vuelve a cargar los ficheros de configuración
  enable    Habilita el inicio automático del servicio en el arranque
  disable   Deshabilita el inicio automático del servicio en el arranque


Comprobar que OpenWrt reconoce el dispositivo bluetooth local.
Código: [Seleccionar]
hciconfig
hci0: Type: BR/EDR  Bus: USB
BD Address: 00:0A:94:XX:XX:XX  ACL MTU: 120:20  SCO MTU: 50:0
DOWN
RX bytes:141156 acl:5149 sco:0 events:4601 errors:0
TX bytes:57010 acl:4229 sco:0 commands:179 errors:0
(OpenWrt encuentra un dispositivo hdi0 con MAC 00:0A:94:XX:XX:XX en estado DOWN.)

Activar el dispositivo bluetooth.
Código: [Seleccionar]
hciconfig hci0 upEl comando no devuelve nada por pantalla.

Confirmar que el dispositivo está activado:
Código: [Seleccionar]
hciconfig hci0
hci0: Type: BR/EDR  Bus: USB
BD Address: 00:0A:94:XX:XX:XX  ACL MTU: 120:20  SCO MTU: 50:0
UP RUNNING
RX bytes:141156 acl:5149 sco:0 events:4601 errors:0
TX bytes:57010 acl:4229 sco:0 commands:179 errors:0
La línea UP RUNNING indica que está activado.

Obtener mayor infiormación del dispositivo bluetooth.
Código: [Seleccionar]
hciconfig -a hci0
hci0: Type: BR/EDR  Bus: USB
BD Address: 00:0A:94:XX:XX:XX  ACL MTU: 120:20  SCO MTU: 50:0
UP RUNNING
RX bytes:140879 acl:5149 sco:0 events:4598 errors:0
TX bytes:57001 acl:4229 sco:0 commands:176 errors:0
Features: 0xff 0xff 0x8d 0x78 0x18 0x18 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'BlueZ 5.30'
Class: 0x000000
Service Classes: Unspecified
Device Class: Miscellaneous,
HCI Version: 1.2 (0x2)  Revision: 0x0
LMP Version: 1.2 (0x2)  Subversion: 0x8a9
Manufacturer: Silicon Wave (11)
La verdad es que todavía no sé cómo sacarle jugo a toda esta información.

Cambiar el nombre del dispositivo bluetooth. Por defecto es 'BlueZ 5.30'.
Código: [Seleccionar]
hciconfig hci0 name 'Mi router OpenWrt'El comando tampoco devuelve nada en esta ocasión. Para verificar el nuevo nombre: hciconfig -a hci0.


2) CONECTAR EL ROUTER A UN DISPOSITIVO REMOTO.
(Las pruebas las he hecho con un GPS Bluetooth Holux 1200)

Descubrir dispositivos al alcance.
Código: [Seleccionar]
hcitool -i hci0 scan
Scanning ...
00:1B:C1:XX:XX:XX HOLUX_M-1200

Obtener información de un dispositivo remoto.
Código: [Seleccionar]
sdptool -i hci0 browse 00:1B:C1:XX:XX:XX
Browsing 00:1B:C1:XX:XX:XX ...
Service Name: SPP slave
Service RecHandle: 0x10000
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
(De aquí, interesa saber que el dispositivo remoto admite el protocolo RFCOMM en el canal 1.)

Emparejar el router con el dispositivo remoto.
Código: [Seleccionar]
rfcomm -i hci0 bind HOLUX_M-1200 00:1B:C1:XX:XX:XX 1Este comando tampoco devuelve nada.

Se puede verificar que los dispositivos están emparejados.
Código: [Seleccionar]
rfcomm -i hci0
rfcomm0: 00:0A:94:XX:XX:XX -> 00:1B:C1:XX:XX:XX channel 1 connected [tty-attached]

Al emparejar los dispositivos con rfcomm, OpenWrt crea un fichero especial ("pipe", en la jerga linux) llamado /dev/rfcomm0. Comprobar que existe.
Código: [Seleccionar]
ls /dev/rf*
/dev/rfcomm0

Visualizar las sentencias NMEA que el GPS envía al router.
Código: [Seleccionar]
cat /dev/rfcomm0
$GPGGA, ...
$GPGSV, ...
$GPRMC, ...

Desemparejar los dispositivos.
Código: [Seleccionar]
rfcomm -i hci0 release HOLUX_M-1200
Desactivar el BT del router.
Código: [Seleccionar]
hciconfig hci0 down

3) CONECTAR UN DISPOSITIVO REMOTO AL ROUTER.
(Las pruebas las he hecho con un móvil Samsung ACE GT-5839i con Android 2.3.6)

Hacer visible el dispositivo bluetooth del router. (Por defecto está oculto).
Código: [Seleccionar]
hciconfig hci0 piscan
Comprobar que el comando anterior ha funcionado.
Código: [Seleccionar]
hciconfig -a hci0La línea UP RUNNING PSCAN ISCAN confirma que el dispositivo es visible.

Puede ser que además haya que cambiarle la clase para hacerlo visible.
Código: [Seleccionar]
hciconfig hci0 class 0x5a0100
Ahora el router es visible desde al móvil. Sin embargo, todavía no he podido emparejarlos. El móvil pide contraseña para emparejar. He probado 0000 y 1234. El router rechaza la conexión.

Ocultar el dispositivo bluetooth del router.
Código: [Seleccionar]
hciconfig hci0 noscan
Y hasta aquí he llegado con los experimentos.


« Última modificación: 23-01-2016, 12:13 (Sábado) por raphik »

raphik

  • Visitante
Re: Bluetooth en OpenWrt.
« Respuesta #1 en: 23-01-2016, 08:41 (Sábado) »
Esta información proviene de la página (en inglés) http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html. Es para la versión 5.37, por lo que las discrepancias con la 5.30 que se instala con OpenWrt probablemente serán mínimas.

Ficheros de configuración.
Por lo que se lee, hay un fichero principal y otros tres suplementarios en la carpeta /etc/bluetooth: main.conf, input.conf, network.conf y proximity.conf
Se menciona la existencia de un fichero relacionado con el script de arranque: /etc/sysconfig/bluetooth. Lo cierto es que no está en esa ruta. El que hay en el router es /etc/config/bluetooth
Por último, hay un par de ficheros que el propio usuario puede crear en la carpeta /etc/bluetooth: rfcomm.conf y uart.conf.

Script de arranque.
Durante el arranque del router se puede hacer uso de un script que cargaría el proceso bluetoothd, un programa tipo daemon imprescindible para el funcionamiento de BT. Se trata del fichero /etc/init.d/bluetoothd.

Herramientas.
Al instalar bluez-utils, se generan en el router un conjunto de harramientas. Copio y pego.

bccmd is used to issue BlueCore commands to Cambridge Silicon Radio devices.
bluemoon is a Bluemoon configuration utility.
bluetoothctl is the interactive Bluetooth control program.
bluetoothd is the Bluetooth daemon.
btmon provides access to the Bluetooth subsystem monitor infrastructure for reading HCI traces.
ciptool is used to set up, maintain, and inspect the CIP configuration of the Bluetooth subsystem in the Linux kernel.
hciattach is used to attach a serial UART to the Bluetooth stack as HCI transport interface.
hciconfig is used to configure Bluetooth devices.
hcidump reads raw HCI data coming from and going to a Bluetooth device and prints to screen commands, events and data in a human-readable form.
hcitool is used to configure Bluetooth connections and send some special command to Bluetooth devices.
hex2hcd is used to convert a file needed by Broadcom devices to hcd (Broadcom bluetooth firmware) format.
l2ping is used to send a L2CAP echo request to the Bluetooth MAC address given in dotted hex notation.
l2test is L2CAP testing program.
rctest is used to test RFCOMM communications on the Bluetooth stack.
rfcomm is used to set up, maintain, and inspect the RFCOMM configuration of the Bluetooth subsystem in the Linux kernel.
sdptool is used to perform SDP queries on Bluetooth devices.
« Última modificación: 23-01-2016, 10:01 (Sábado) por raphik »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 1942
Re: Bluetooth en OpenWrt
« Respuesta #2 en: 23-01-2016, 13:18 (Sábado) »
Muy bueno!!!  >:( >:( >:(

Chincheta unas semanitas...  ;D
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.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.

Pteridium

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #3 en: 23-01-2016, 15:36 (Sábado) »
Coincido con Tki2000: muy bueno.  >:( >:( >:(

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4583
Re: Bluetooth en OpenWrt
« Respuesta #4 en: 23-01-2016, 18:59 (Sábado) »
Impresionante  >:( >:(
Valoraciones positivas en compra/venta:
124 en Htcmania
156 en Har2mano
20 en elchapuzasinformatico
10 en gsmspain
 ....
 
Mis equipos en venta: https://drive.google.com/open?id=1jkj-kzmCBVkVb3_at6sgKinmE7YdFeRi

raphik

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #5 en: 25-01-2016, 01:11 (Lunes) »
Vincular dispositivos, solucionado.

En BlueZ 5.30, los dispositivos se vinculan o emparejan con la herramienta bluetoothctl. El problema es que en OpenWrt no funciona. Una vez cargada la herramienta, se bloquea el teclado y no deja escribir. Por eso en infinidad de páginas se lee "bluetooth is broken".

La buena noticia es que tiene fácil arreglo.
Un tal PolarSolvent publicó la solución en la página https://github.com/openwrt/packages/issues/1497. Dice: "The policy delivered with bluez sources in bluez-5.30/src/bluetooth.conf is probably a better fit since it has correct interfacenames and does not use the at_console policy. Putting it in /etc/dbus-1/system.d/bluetooth.conf lets you pair devices with bluetoothctl"

A efectos prácticos, hay que sustituir el fichero /etc/dbus-1/system.d/bluetooth.conf del router con el original del repositorio v5.30.

Esto se puede hacer:
1) Por el camino largo: https://www.kernel.org/pub/linux/bluetooth/, buscar bluez-5.30.tar.gz, descargarlo, abrirlo con el gestor de archivadores,  buscar en la carpeta src y extraerlo. Transferirlo al router.
2) Por el camino corto: teclear en una terminal
Código: [Seleccionar]
cd /etc/dbus-1/system.d
mv bluetooth.conf bluetooth.conf.bak
wget http://galeon.com/raphik/bluetooth.conf
reboot

Lo suyo ahora es aprovechar que funciona la herramienta bluetoothctl para emparejar el router con el teléfono móvil.
Código: [Seleccionar]
root@OpenWrt:~# bluetoothctl
[NEW] Controller 00:1B:10:XX:XX:XX Mi router OpenWrt [default]
[bluetooth]# power on
Changing power on succeeded
[CHG] Controller 00:1B:10:XX:XX:XX Powered: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1B:10:XX:XX:XX Discovering: yes
[NEW] Device 08:08:C2:XX:XX:XX 08-08-C2-XX-XX-XX
[CHG] Device 08:08:C2:XX:XX:XX RSSI: -74
[CHG] Device 08:08:C2:XX:XX:XX RSSI: -63
[CHG] Device 08:08:C2:XX:XX:XX RSSI: -73
[CHG] Device 08:08:C2:XX:XX:XX RSSI: -65
[CHG] Device 08:08:C2:XX:XX:XX LegacyPairing: no
[CHG] Device 08:08:C2:XX:XX:XX Name: GT-S5839i
[CHG] Device 08:08:C2:XX:XX:XX Alias: GT-S5839i
[CHG] Device 08:08:C2:XX:XX:XX LegacyPairing: yes
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# pair 08:08:C2:XX:XX:XX
Attempting to pair with 08:08:C2:XX:XX:XX
[CHG] Device 08:08:C2:XX:XX:XX Connected: yes
Request PIN code
[agent] Enter PIN code: 5555
  (( En el móvil sale un mensaje pidiendo el PIN de 'Mi router OpenWrt'. Teclear 5555 ))
[CHG] Device 08:08:C2:XX:XX:XX Modalias: bluetooth:v000Fp0000d0000
[CHG] Device 08:08:C2:XX:XX:XX UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device 08:08:C2:XX:XX:XX UUIDs: 00001106-0000-1000-8000-00805f9b34fb
[CHG] Device 08:08:C2:XX:XX:XX UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device 08:08:C2:XX:XX:XX UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 08:08:C2:XX:XX:XX UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device 08:08:C2:XX:XX:XX UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device 08:08:C2:XX:XX:XX UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device 08:08:C2:XX:XX:XX UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 08:08:C2:XX:XX:XX Paired: yes
Pairing successful
Una vez vinculados, lo siguiente será conectar los dispositivos y transferir ficheros, o flujo de audio, o lo que sea...

Saludos.
« Última modificación: 02-08-2016, 21:40 (Martes) por raphik »

anatulfo

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #6 en: 01-02-2016, 21:40 (Lunes) »
Muy Bueno.

 >:( >:(

cjrs

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #7 en: 07-07-2016, 17:43 (Jueves) »
Estupendo tema raphik, dado que te manejas muy bien con routers con openwrt, wifi y bluetooth, se me ocurre dado que hay poca informacion en español de que se pueda usar un router wifi con openwrt por un lado con la interfaz wifi en modo cliente o STA para conectarse a otro router wifi y por otro lado con la interfaz bluetooth como punto de acceso a modo de red PAN o red bluetooth, tal vez tu si logres llevar a buen termino dicho proyecto, y asi para clientes que no tengan wifi aun podrian seguir navegando por internet con solo el bluetooth, como le ocurre al terminal Nokia 206 que puedes navegar por internet pero con bluetooth ya que no incorpora wifi ^-^

faio86

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #8 en: 21-09-2016, 16:10 (Miércoles) »
Magnifico aporte se me ocurre una idea alguno habéis conseguido enviar audio por Bluetooth en OpenWrt,
(para luego hacerlo sonar en unos altavoces inalámbricos, así seria portátil).
Gracias de antemano.
« Última modificación: 21-09-2016, 16:10 (Miércoles) por faio86 »

danitool

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #9 en: 21-09-2016, 16:52 (Miércoles) »
Magnifico aporte se me ocurre una idea alguno habéis conseguido enviar audio por Bluetooth en OpenWrt,
(para luego hacerlo sonar en unos altavoces inalámbricos, así seria portátil).
Gracias de antemano.
Supongo que hablas de usar unos altavoces inalámbricos comerciales bluetooth, el emparejamiento debería ser como ha explicado raphik

El caso es que justamente hace poco estuve revisando el concepto opuesto, el de usar openwrt como kit de altavoces bluetooth inalámbricos.

La idea sería colocar una tarjeta de sonido USB al router con salida de audio a unos altavoces, un bluetooth USB, y hacer que todo el conjunto se comporte como unos altavoces bluetooth. No parece fácil, según leí podria haber problemas con dbus en openwrt y quizás más cosas.

Info básica de como hacerlo
https://jprvita.wordpress.com/2009/12/15/1-2-3-4-a2dp-stream/

eduperez

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #10 en: 22-09-2016, 14:20 (Jueves) »
Magnifico aporte se me ocurre una idea alguno habéis conseguido enviar audio por Bluetooth en OpenWrt,
(para luego hacerlo sonar en unos altavoces inalámbricos, así seria portátil).
Gracias de antemano.
Supongo que hablas de usar unos altavoces inalámbricos comerciales bluetooth, el emparejamiento debería ser como ha explicado raphik

El caso es que justamente hace poco estuve revisando el concepto opuesto, el de usar openwrt como kit de altavoces bluetooth inalámbricos.

La idea sería colocar una tarjeta de sonido USB al router con salida de audio a unos altavoces, un bluetooth USB, y hacer que todo el conjunto se comporte como unos altavoces bluetooth. No parece fácil, según leí podria haber problemas con dbus en openwrt y quizás más cosas.

Info básica de como hacerlo
https://jprvita.wordpress.com/2009/12/15/1-2-3-4-a2dp-stream/

Ya sé que va en contra del espíritu del foro, pero... por muy poco dinero tienes un receptor bluetooth con salida de audio; sólo tienes que alimentarlo, conectarlo a un amplificador, y emparejarlo con un móvil o cualquier dispositivo.

raphik

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #11 en: 22-09-2016, 19:22 (Jueves) »
Ya sé que va en contra del espíritu del foro, pero... por muy poco dinero tienes un receptor bluetooth con salida de audio; sólo tienes que alimentarlo, conectarlo a un amplificador, y emparejarlo con un móvil o cualquier dispositivo.
Pues eso, sólo que faio86 propone que el dispositivo con el que se empareja sea un router OpenWrt.
 ;) Saludos.

danitool

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #12 en: 22-09-2016, 20:26 (Jueves) »
Ya sé que va en contra del espíritu del foro, pero... por muy poco dinero tienes un receptor bluetooth con salida de audio; sólo tienes que alimentarlo, conectarlo a un amplificador, y emparejarlo con un móvil o cualquier dispositivo.

No lo dudo aunque ese dispositivo comercial ni tendría acceso a internet ni un sinfín de características que ofrece Openwrt.

Mi idea era la de usar el invento para una radio wifi, de forma que pudiese reproducir tanto de forma autónoma como emparejado por bluetooth (como "esclavo") por ejemplo a un móvil u otro dispositivo que le envíe audio por bluetooth. Haciendo p.ej un script para que cambiase de un modo a otro.

En cuanto a lo que que quiere hacer faio86, creo que además de seguir el tuto para el emparejamiento que explicó raphik, habría que además instalar el sistema de audio. Creo que a partir de cierta versión de bluez solo funciona con pulseaudio, y con alsa no. Puede que sea un poco más complicado de hacer de lo que parece a primera vista.

faio86

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #13 en: 23-09-2016, 14:31 (Viernes) »
Buenas, para escuchar musica mi opcion seria poco util, pienso seria util para emitir notificaciones por voz desde nuestro openwrt (o deberia de llamarle lede).

raphik

  • Visitante
Re: Bluetooth en OpenWrt
« Respuesta #14 en: 27-09-2016, 10:04 (Martes) »
Mi idea era la de usar el invento para una radio wifi, de forma que pudiese reproducir tanto de forma autónoma como emparejado por bluetooth (como "esclavo") por ejemplo a un móvil u otro dispositivo que le envíe audio por bluetooth. Haciendo p.ej un script para que cambiase de un modo a otro.
Una de las limitaciones de BT es que sólo podrías emparejar el emisor con un único dispositivo receptor. Para enviar audio a múltiples receptores se puede utilizar una mini emisora FM.
Yo tengo una como ésta:

Cuando se conecta por USB, OpenWRT la ve como una tarjeta de sonido.

Saludos.
« Última modificación: 27-09-2016, 10:15 (Martes) por raphik »