Autor Tema: [Tutorial] Receptor de radio Wi-Fi con OpenWrt  (Leído 172634 veces)

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

Ficht

  • Visitante
Re: Re: Re: Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #300 en: 23-12-2015, 19:05 (Miércoles) »
Si claro, el problema viene a la hora de tener que hacer dos conexiones distintas para controlar volumen del segundo mod, de ahí todo este invento...

¿Cómo controlas actualmente el volumen del primer mpd?
Perdón , la respuesta.... Fundamentalnente MPDroid.
Nunca he montado dos tarjetas de audio en el mismo router. Supongo que MPDroid no permite cambiar por separado el volumen de cada pincho de audio. Es decir, los volúmenes de las tarjetas están "sincronizados". ¿Es así?
Efectivamente el control con alsa va a las dos tarjetas y desde mpdroid selecccionas si suenan las dos o solo una o el estreaming o todo a la vez...

Enviado desde mi LG-D390n mediante Tapatalk




Ficht

  • Visitante
Re: Re: Re: Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #301 en: 23-12-2015, 19:43 (Miércoles) »
Si claro, el problema viene a la hora de tener que hacer dos conexiones distintas para controlar volumen del segundo mod, de ahí todo este invento...

¿Cómo controlas actualmente el volumen del primer mpd?
Perdón , la respuesta.... Fundamentalnente MPDroid.
Nunca he montado dos tarjetas de audio en el mismo router. Supongo que MPDroid no permite cambiar por separado el volumen de cada pincho de audio. Es decir, los volúmenes de las tarjetas están "sincronizados". ¿Es así?
Efectivamente el control con alsa va a las dos tarjetas y desde mpdroid selecccionas si suenan las dos o solo una o el estreaming o todo a la vez...

Enviado desde mi LG-D390n mediante Tapatalk



Queda así en el teléfono, y es muy practico...

« Última modificación: 23-12-2015, 19:55 (Miércoles) por Ficht »

raphik

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #302 en: 23-12-2015, 19:55 (Miércoles) »
Si los volúmenes van sincronizados en ambos routers, me parece que te valdría la solución de danitool (mpd en el "repetidor remoto" bebiendo de la salida por stream del mpd principal).
La sincronización del volumen podría hacerse automáticamente mediante un pequeño script que correría en el repetidor.

Ficht

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #303 en: 23-12-2015, 20:10 (Miércoles) »
S los volúmenes van sincronizados en ambos routers  

Eso es lo que quisiera conseguir...

Citar
me parece que te valdría la solución de danitool (mpd en el "repetidor remoto" bebiendo de la salida por stream del mpd principal)

Así es como está ahora mismo

Citar
La sincronización del volumen podría hacerse automáticamente mediante un pequeño script que correría en el repetidor.
eso lo ha pensado una parte remota de mi cerebro, pero la parte mas cercana de él ... no sabe como hacerlo pero creo que lo intentará, y si no... pedirá ayuda antes de agotarse...  :D

Gracias!

raphik

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #304 en: 23-12-2015, 20:33 (Miércoles) »
¿Podrías probar si este código, ejecutado en el router remoto, devuelve el valor del volumen del mpd principal? (Sustituye 192.168.1.x por la IP del router principal.)
Código: [Seleccionar]
echo "status" | nc 192.168.1.x 6600 | grep -e "^volume: " | sed 's/volume: //'

EDITO:

Asegúrate de que estas líneas aparezcan en el archivo /etc/mpd.conf del principal:
Citar
# dirección y puerto para MPD
bind_to_address "any"
port "6600"
« Última modificación: 23-12-2015, 20:38 (Miércoles) por raphik »

Ficht

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #305 en: 23-12-2015, 22:02 (Miércoles) »
¿Podrías probar si este código, ejecutado en el router remoto, devuelve el valor del volumen del mpd principal? (Sustituye 192.168.1.x por la IP del router principal.)
Código: [Seleccionar]
echo "status" | nc 192.168.1.x 6600 | grep -e "^volume: " | sed 's/volume: //'

Al intentar hecerlo desde dentro del fichero mpd.conf ; el arranque del MPD  da un error  '"' expected
Claro, MPD emplea " para separar valores y el scrip tb. Para  intentar hacerlo como salida de audio, tampoco es interpretado de manera correcta unrecognized parameter in config file at line 234: echo

Desde la consola, casi funciona, pero devuelve  "volume:xx"   y esto no establece el valor en consola...


Sigo jugando que me gusta mucho la idea esta.... que envidia me dais los que saben picar scripts.... jejeje  ;)


raphik

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #306 en: 23-12-2015, 22:48 (Miércoles) »
Siento haberme explicado tan mal.

Las líneas
Citar
bind_to_address "any"
port "6600"
van dentro del fichero de configuración del mpd principal, que está en "/etc/mpd.conf". Por lo general, este fichero se edita desde el PC Windows con la utilidad WinSPC.

El comando
Código: [Seleccionar]
echo "status" | nc 192.168.1.x 6600 | grep -e "^volume: " | sed 's/volume: //' no va dentro de ningún fichero. Hay que ejecutarlo desde una terminal de OpenWrt en el router secundario. Por lo general , el comando se lanza desde el PC Windows con la utilidad PuTTY.

danitool

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #307 en: 23-12-2015, 23:50 (Miércoles) »
es interesante lo de poder sincronizar el volumen de dos mpd en distintos routers, se podría hacer un loop que compruebe el volumen de audio en un router y lo cambie en el otro, que se ejecute cada 1 segundo, pero no resultaría instantáneo.

Sin embargo podría haber una forma más inmediata, viendo que te funciona el comando de netcat de raphik para obtener el volumen de audio sin problemas, mpc debería también funcionar
Citar
mpc volume
debería devolver el volumen de audio en el router local, ahora faltaría que mpc se conectase al remoto y pusiese ese mismo volumen de audio allí

mpc dispone de un comando interesante que es idleloop
Código: [Seleccionar]
mpc idleloopel cual recoge eventos de mpd, si lo ejecutamos y cambiamos de volumen recoge el string mixer. Pues bien como lo recoge contínuamente, esto se le podría pasar a awk, para que cada vez que lo detecte ejecute mpc conectándose al local y el remoto, en uno para obtener el volumen y en el remoto para establecerlo

Resumiendo, sería ejecutar este comando
Código: [Seleccionar]
mpc idleloop mixer | awk '/mixer/ { system("mpc -h 192.168.0.72 $(mpc volume|sed s/[:\%]//g)")}'Esta cosa la ejecutarías en la línea de comandos de OpenWrt
 ;D

igual te cuesta entender el chorizo, pero al menos ves que hay una ip, y esa sería la ip del segundo router (el remoto)

podría dar algún error debido a la interpretación de entrecomillados, si funciona sería conveniente añadir al final
Código: [Seleccionar]
&>/dev/null &para que no devuelva nada y sea más limpio.

raphik

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #308 en: 23-12-2015, 23:57 (Miércoles) »
Desde la consola, casi funciona, pero devuelve  "volume:xx"   y esto no establece el valor en consola...
Sí, funciona. Lo único que hace es sacar por consola el valor del volumen del mpd principal.

Para replicar el valor del volumen principal en el secundario, el comando a ejecutar desde la consola del secundario sería:
Código: [Seleccionar]
mpc volume $(echo "status" | nc 192.168.1.x 6600 | grep -e "^volume: " | sed 's/volume: //' )

Ficht

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #309 en: 24-12-2015, 00:04 (Jueves) »
es interesante lo de poder sincronizar el volumen de dos mpd en distintos routers, se podría hacer un loop que compruebe el volumen de audio en un router y lo cambie en el otro, que se ejecute cada 1 segundo, pero no resultaría instantáneo.

Sin embargo podría haber una forma más inmediata, viendo que te funciona el comando de netcat de raphik para obtener el volumen de audio sin problemas, mpc debería también funcionar
Citar
mpc volume
debería devolver el volumen de audio en el router local, ahora faltaría que mpc se conectase al remoto y pusiese ese mismo volumen de audio allí

mpc dispone de un comando interesante que es idleloop
Código: [Seleccionar]
mpc idleloopel cual recoge eventos de mpd, si lo ejecutamos y cambiamos de volumen recoge el string mixer. Pues bien como lo recoge contínuamente, esto se le podría pasar a awk, para que cada vez que lo detecte ejecute mpc conectándose al local y el remoto, en uno para obtener el volumen y en el remoto para establecerlo

Resumiendo, sería ejecutar este comando
Código: [Seleccionar]
mpc idleloop mixer | awk '/mixer/ { system("mpc -h 192.168.0.72 $(mpc volume|sed s/[:\%]//g)")}'Esta cosa la ejecutarías en la línea de comandos de OpenWrt
 ;D

igual te cuesta entender el chorizo, pero al menos ves que hay una ip, y esa sería la ip del segundo router (el remoto)

podría dar algún error debido a la interpretación de entrecomillados, si funciona sería conveniente añadir al final
Código: [Seleccionar]
&>/dev/null &para que no devuelva nada y sea más limpio.

Jejeje Muchas gracias!!

voy a probar.... a ver que me sale, y no creas, del chorizo lo leo y lo entiendo mas o menos como el aleman.... que si prestas atención, sabes mas o menos de lo que se habla...  :-X

Ficht

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #310 en: 24-12-2015, 00:05 (Jueves) »
Desde la consola, casi funciona, pero devuelve  "volume:xx"   y esto no establece el valor en consola...
Sí, funciona. Lo único que hace es sacar por consola el valor del volumen del mpd principal.

Para replicar el valor del volumen principal en el secundario, el comando a ejecutar desde la consola del secundario sería:
Código: [Seleccionar]
mpc volume $(echo "status" | nc 192.168.1.x 6600 | grep -e "^volume: " | sed 's/volume: //' )

lume: " | sed 's/volume: //' )
volume: 65%   repeat: off   random: off   single: off   consume: off
root@OpenWrt:~#

jejejeje

raphik

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #311 en: 24-12-2015, 00:09 (Jueves) »
@danitool
En mi opinión, el control para replicar el volumen debe correr en el secundario. De esta manera, en un escenario donde hubiera varios secundarios sólo sería necesario conocer la IP del principal.
Por contra, si el control corriese en el primario, habría que conocer las IPs de cada uno de los secundarios.

danitool

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #312 en: 24-12-2015, 00:16 (Jueves) »
@danitool
En mi opinión, el control para replicar el volumen debe correr en el secundario. De esta manera, en un escenario donde hubiera varios secundarios sólo sería necesario conocer la IP del principal.
Por contra, si el control corriese en el primario, habría que conocer las IPs de cada uno de los secundarios.

Entonces sería sencillo de replicar el comando pero ejecutado desde el secundario, supongo que esto serviría:

Código: [Seleccionar]
mpc -h 192.168.0.72 idleloop mixer | awk '/mixer/ { system("mpc $(mpc -h 192.168.0.72 volume|sed s/[:\%]//g)")}'
Aunque si hay un corte de conexión creo que mpc terminaría y habría que arrancarlo de nuevo, con lo cual habría que meterlo en un loop para que se ejecute cada vez que se caiga.

Ficht

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #313 en: 24-12-2015, 00:17 (Jueves) »
@danitool
En mi opinión, el control para replicar el volumen debe correr en el secundario. De esta manera, en un escenario donde hubiera varios secundarios sólo sería necesario conocer la IP del principal.
Por contra, si el control corriese en el primario, habría que conocer las IPs de cada uno de los secundarios.

Si, tienes razón, pero es lo que dice raphik tambíen, o tiene que estar preguntando el secundario constantemente o el primario manda alguna orden que ejecute esta linea en el/los secundarios, esto creo que convina las dos cosas y me parece asi de pronta mas relajado el trabajo de cada router...

Esto está mal escrito, lo dejo borrado ahora....
« Última modificación: 24-12-2015, 00:28 (Jueves) por Ficht »

Ficht

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #314 en: 24-12-2015, 00:33 (Jueves) »
@danitool
En mi opinión, el control para replicar el volumen debe correr en el secundario. De esta manera, en un escenario donde hubiera varios secundarios sólo sería necesario conocer la IP del principal.
Por contra, si el control corriese en el primario, habría que conocer las IPs de cada uno de los secundarios.

Entonces sería sencillo de replicar el comando pero ejecutado desde el secundario, supongo que esto serviría:

Código: [Seleccionar]
mpc -h 192.168.0.72 idleloop mixer | awk '/mixer/ { system("mpc $(mpc -h 192.168.0.72 volume|sed s/[:\%]//g)")}'
Aunque si hay un corte de conexión creo que mpc terminaría y habría que arrancarlo de nuevo, con lo cual habría que meterlo en un loop para que se ejecute cada vez que se caiga.

Esto se que debería trabajar, pero se queda a la espera... de algo... que no he encontrado (yo voy mas despacio, tengo que mirar con detenimiento y compresión)

raphik

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #315 en: 24-12-2015, 00:40 (Jueves) »
Haciendo uso de mpc (que para eso está  :-[) y de la sintaxis propuesta por danitool, el comando siguiente, ejecutado en el secundario debería replicar el volumen del primario:
Código: [Seleccionar]
mpc $(mpc -h 192.168.1.1 volume|sed s/[:\%]//g)

danitool

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #316 en: 24-12-2015, 00:44 (Jueves) »
@danitool
En mi opinión, el control para replicar el volumen debe correr en el secundario. De esta manera, en un escenario donde hubiera varios secundarios sólo sería necesario conocer la IP del principal.
Por contra, si el control corriese en el primario, habría que conocer las IPs de cada uno de los secundarios.

Entonces sería sencillo de replicar el comando pero ejecutado desde el secundario, supongo que esto serviría:

Código: [Seleccionar]
mpc -h 192.168.0.72 idleloop mixer | awk '/mixer/ { system("mpc $(mpc -h 192.168.0.72 volume|sed s/[:\%]//g)")}'
Aunque si hay un corte de conexión creo que mpc terminaría y habría que arrancarlo de nuevo, con lo cual habría que meterlo en un loop para que se ejecute cada vez que se caiga.

Esto se que debería trabajar, pero se queda a la espera... de algo... que no he encontrado (yo voy mas despacio, tengo que mirar con detenimiento y compresión)
pues simple, se queda a la espera de que cuando cambies el volumen con tu cliente en android, lo replique en el router secundario

Ficht

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #317 en: 24-12-2015, 00:54 (Jueves) »
@danitool
En mi opinión, el control para replicar el volumen debe correr en el secundario. De esta manera, en un escenario donde hubiera varios secundarios sólo sería necesario conocer la IP del principal.
Por contra, si el control corriese en el primario, habría que conocer las IPs de cada uno de los secundarios.

Entonces sería sencillo de replicar el comando pero ejecutado desde el secundario, supongo que esto serviría:

Código: [Seleccionar]
mpc -h 192.168.0.72 idleloop mixer | awk '/mixer/ { system("mpc $(mpc -h 192.168.0.72 volume|sed s/[:\%]//g)")}'
Aunque si hay un corte de conexión creo que mpc terminaría y habría que arrancarlo de nuevo, con lo cual habría que meterlo en un loop para que se ejecute cada vez que se caiga.

Esto se que debería trabajar, pero se queda a la espera... de algo... que no he encontrado (yo voy mas despacio, tengo que mirar con detenimiento y compresión)
pues simple, se queda a la espera de que cuando cambies el volumen con tu cliente en android, lo replique en el router secundario

joooo que tonto tonto
claro que si...
funciona perfecto!"!!!
jajaja
pues ya esta!!!!
conseguido.
jajaja
que  pescao que soy....  >:(
« Última modificación: 24-12-2015, 01:39 (Jueves) por Ficht »

Ficht

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #318 en: 24-12-2015, 01:06 (Jueves) »
@danitool
En mi opinión, el control para replicar el volumen debe correr en el secundario. De esta manera, en un escenario donde hubiera varios secundarios sólo sería necesario conocer la IP del principal.
Por contra, si el control corriese en el primario, habría que conocer las IPs de cada uno de los secundarios.

Entonces sería sencillo de replicar el comando pero ejecutado desde el secundario, supongo que esto serviría:

Código: [Seleccionar]
mpc -h 192.168.0.72 idleloop mixer | awk '/mixer/ { system("mpc $(mpc -h 192.168.0.72 volume|sed s/[:\%]//g)")}'
Aunque si hay un corte de conexión creo que mpc terminaría y habría que arrancarlo de nuevo, con lo cual habría que meterlo en un loop para que se ejecute cada vez que se caiga.

Esto se que debería trabajar, pero se queda a la espera... de algo... que no he encontrado (yo voy mas despacio, tengo que mirar con detenimiento y compresión)
pues simple, se queda a la espera de que cuando cambies el volumen con tu cliente en android, lo replique en el router secundario

Ahora investigare un poco por mi parte primero esto...

  mpc outputs                                           Show the current outputs
  mpc enable [only] <output # or name> [...]            Enable output(s)
  mpc disable [only] <output # or name> [...]           Disable output(s)
  mpc toggleoutput <output # or name> [...]             Toggle output(s)

que es la segunda parte del juego...

pero, creo que ya sera para mañana, que hoy hay que dormir y mana trabajar....

Pd:  la linea de "mpc idleloop" en el arranque y va perfecto...
« Última modificación: 24-12-2015, 01:11 (Jueves) por Ficht »

danitool

  • Visitante
Re: [Tutorial] Receptor de radio Wi-Fi con OpenWrt
« Respuesta #319 en: 13-01-2016, 16:17 (Miércoles) »
Buenas, voy a poner algunas cosillas útiles para la radio wifi, fundamentalmente relacionado con el receptor de infrarrojos.

Resulta que en la Raspberry Pi tienen un driver mediante el cual pueden conectar un módulo de infrarrojos a un GPIO y con él usar LIRC. El driver es específico para la rpi. Siempre pensé en adaptarlo pero existía el problema de que bcm63xx no tiene implementados los IRQ en el driver  GPIO así que resultaba imposible.

Pero no hace mucho me di cuenta que los bcm63xx disponen de lo que llaman external IRQs accesibles desde ciertos GPIOs. Todas las placas bcm63xx tienen entre 4 y 6 external IRQs. Y casi siempre podemos encontrar que alguno de ellos está en algún botón del router sobre todo en los bcm6328 donde los GPIO23 GPIO24 van compartidos con dos ext IRQ.

Bien, basándome en el driver de la rpi hice algunas modificaciones, para que de en estos particulares GPIOs tome sus IRQs y los maneje.

El resultado fue totalmente exitoso, el driver me funcionó a la primera. Solo necesité de compilarlo en un firmware con soporte para LIRC.

Usé un TSOP4838 como receptor de infrarrojos (cuesta alrededor de 50 céntimos), y no requiere de ninguna circuitería extra, va directamente conectado al GPIO.
Código: [Seleccionar]
+-----------------------+ 3
|               data -> +---------------------o GPIO34 (BCM6368)
|                         |
|      _____________|
|     /                   |
|    (                    | 2  
|     \____________ + +---------------------o +3.3V
|                         |
|                         | 1
|                         - +---------------------o GND
+-----------------------+

El driver también tiene soporte para el emisor, con lo cual podríamos controlar un ampli externo. Necesitaría de una circuitería adicional detallado en:
https://wiki.openwrt.org/doc/howto/lirc-gpioblaster


El paquete para compilarlo en el kernel aquí:
https://github.com/danitool/openwrt-pkgs/tree/bb/lirc-bcm63xx

Me funcionó tanto en Attitude Adjustment como en Barrier Breaker. Pero a partir de Chaos Calmer parece que se han cargado el controlador de IRQs externos en el kernel debido a que metieron un nuevo driver, que no funciona.

Insisto en que solo unos pocos GPIOs son válidos para el receptor (para el emisor vale cualquiera). Estos GPIOs concretos están en la tabla
https://wiki.openwrt.org/doc/hardware/soc/soc.broadcom.bcm63xx#external_irqs

Algunos GPIOs de esta tabla no fueron comprobados, por ejemplo el 25 y 26 de los bcm6328. Ya que esto no está documentado, o no tenemos acceso a documentación de Broadcom Corp.


También hice alguna modificación en el demonio LIRC irexec, para que cada vez que pulsamos un botón configurado del mando a distancia parpadee un LED del router (a elección)
https://github.com/danitool/openwrt-pkgs/blob/bb/lirc/patches/01-add-irexec_led_blink-option.patch
para que funcione necesita del módulo de kernel kmod-ledtrig-oneshot

Y por último para que además de tener un aviso luminoso tengamos un aviso acústico, hice un howto en la wiki de como añadir un buzzer (zumbador) de corriente contínua al router.

https://wiki.openwrt.org/doc/howto/buzzer-mod


Saludos
« Última modificación: 13-01-2016, 18:25 (Miércoles) por danitool »