Tu propio Network-Music-Player o como reciclar una PC obsoleta

Muchachos, encontré un cliente MPD para Windows que destroza incluso al GMPC (que debería ser el mejor, pero no).

Se llama "Cantata". La primera impresión es que es un soft diseñado para Windows 3.11... Pero a los 10 minutos de uso se van a dar cuenta que es el mejor, por lejos.

Incluso carga archivos cue que NINGUN otro cliente puede cargar. Tengo varios cue que con todos los demás clientes dan error, pero Cantanta los carga perfectamente.


También funciona en GNU/Linux...


Bueno, era eso nomás.
 

Dr. Zoidberg

Well-known-Papá Pitufo
Yo intente evaluar el "Cantata" hace un par de años, pero no logre instalarlo. Tal vez estsba muy crudo aún...
De todas formas solo lo iba a usar para hacer pruebas desde la PC por que controlo todo desde el celu.
 

Dr. Zoidberg

Well-known-Papá Pitufo
Ya estaba podrido de tener que subir la escalera a encender la PC donde está la música para luego bajar a encender el NMP, que ya sabemos que no soporta Wake-On-Lan (WOL) por que es muy viejo, así que se me ocurrió la idea modificar la página web de control remoto del NMP para desde ahí encender la PC que guarda la música que SI soporta WOL. Puede que no sea lo mejor, pero al menos me evito una subida de escaleras con la rodilla operada.

Así quedó la nueva página web del NMP:

76-control-remoto-web.png

Lo que está recuadrado en rojo es el nuevo botón que le agregué, y tiene por trabajo enviar un magic-packet WOL para despertar a la PC que guarda la música, que ahora vive hibernando en lugar de apagarse por completo.
De esta forma, solo enciendo el NMP y luego, con pulsar el botón "Wakeup music storage server" enciendo la otra PC sin moverme del lugar.
Para que esto funcione hay que instalar el programa etherwake (tan dificil como sudo apt-get install etherwake) e invocarlo con la dirección de capa MAC de la placa de red de la PC remota que quieren encender con WOL.

Lean este post anterior para ver que es lo mínimo necesario para que funcione el acceso vía página web.

Les dejo adjunto el archivo index.cgi (en formato zip) que se encarga de mostrar esa pantalla y ejecutar los comandos de cada botón. Si a alguien le sirve, me sentiré contento.
 

Adjuntos

Así quedó la nueva página web del NMP:

Ver el archivo adjunto 170395
Les dejo adjunto el archivo index.cgi (en formato zip) que se encarga de mostrar esa pantalla y ejecutar los comandos de cada botón. Si a alguien le sirve, me sentiré contento.
Hola Doc, por supuesto que sirve :cool:, en mi red tengo una página con los accesos a cada servicio que uso (el acceso web a mopidy, torrent y alguna pavada mas), me gustaría agregarle un botón para refrescar la base de datos pero no lo pude hacer, sería ejecutar el comando "mopidy local scan" o "mopidyctl local scan", no sé nada de programación así que mas que copiar una plantilla y cambiarle los links no pude hacer, ¿sería posible ejecutar el comando desde un botón en una página local?.

gracias y un saludo!
 

Dr. Zoidberg

Well-known-Papá Pitufo
sería ejecutar el comando "mopidy local scan" o "mopidyctl local scan", no sé nada de programación así que mas que copiar una plantilla y cambiarle los links no pude hacer, ¿sería posible ejecutar el comando desde un botón en una página local?
Claro que se puede, pero primero verificá el funcionamiento del comando ejecutándolo manualmente.
Si funciona OK, el cambio es simple:
Bash:
#!/bin/sh

# Perform shell variable expansion for any form data
eval "`/usr/bin/proccgi $*`"

echo -n "Content-type: text/html
Pragma: nocache
cache-control: no-cache, must-revalidate, no-store

<!DOCTYPE html>
<html><head>
<style>
table, th, td {
    border: 1px solid black;
    border-collapse: collapse;
}
th, td {
    padding: 12px;
}
</style>
<title>PolloX - NMP</title></head><body>"
case "$FORM_OKBTN" in
    "System")
        echo "<center><b>System information</b><br><br>"
        echo "<table><tr><td nowrap><pre>"
        /usr/bin/uptime
        echo "</pre></td></tr><tr><td nowrap><pre>"
        /sbin/ifconfig eth0
        echo "</pre></td></tr><tr><td nowrap><pre>"
        /usr/bin/free -m
        echo "</pre></td></tr><tr><td nowrap><pre>"
        cat /proc/asound/card*/pcm*p/sub*/hw_params
        echo "</pre></td></tr><tr><td nowrap><pre>"
        sensors
        echo "</pre></td></tr></table></center>"
        echo "<br></body></html>"
        exit 0
        ;;
    "Mount points")
        echo "<center>Status of mount points<br><br>"
        echo "<table><tr><td nowrap><pre>"
        /bin/df -h
        echo "</pre></td></tr></table></center>"
        echo "<br></body></html>"
        exit 0
        ;;
    "Wakeup music storage server")
        echo "<center>Waking up music storage</center>"
        /usr/sbin/etherwake poner:aca:la:mac:de:la:placa:de:red:donde:esta:la:musica
        echo "<br></body></html>"
        exit 0
        ;;
    "Reset")
        echo "<center>Restarting Player...</center>"
        /sbin/reboot
        echo "<br></body></html>"
        exit 0
        ;;
    "Shutdown")
        echo "<center>Shutting down Player...</center>"
        /sbin/poweroff
        echo "<br></body></html>"
        exit 0
        ;;
    "Suspend")
        echo "<center>Suspending Player...</center>"
        /usr/sbin/pm-suspend&
        echo "<br></body></html>"
        exit 0
        ;;
    "Hibernate")
        echo "<center>Hibernating Player...</center>"
        /usr/sbin/pm-hibernate&
        echo "<br></body></html>"
        exit 0
        ;;
    *)
cat << CLEOF
<center><form method="POST" action="/cgi-bin/index.cgi"><br>
<center><h2>PolloX - NMP</h2></center>
<table>
<tr><td align="center"><h2><b>System commands</b></h2></td></tr>
<tr><td align="center"><input type=submit value="System" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Mount points" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Wakeup music storage server" name=OKBTN></td></tr>
<!-- <tr><td align="center"><input type=submit value="Mount music" name=OKBTN></td></tr> -->
<tr><td align="center"><input type=submit value="Shutdown" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Suspend" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Hibernate" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Reset" name=OKBTN></td></tr>
</table></form></center>
CLEOF
    ;;
esac

echo "<br></body></html>"
El código de arriba es un shell-script y tiene la operación repartida en dos partes:
La primera es la que se encarga de ejecutar cada comando usando el nombre de cada botón como elemento de selección
Bash:
case "$FORM_OKBTN" in
    "System")
        echo "<center><b>System information</b><br><br>"
        echo "<table><tr><td nowrap><pre>"
        /usr/bin/uptime
        echo "</pre></td></tr><tr><td nowrap><pre>"
        /sbin/ifconfig eth0
        echo "</pre></td></tr><tr><td nowrap><pre>"
        /usr/bin/free -m
        echo "</pre></td></tr><tr><td nowrap><pre>"
        cat /proc/asound/card*/pcm*p/sub*/hw_params
        echo "</pre></td></tr><tr><td nowrap><pre>"
        sensors
        echo "</pre></td></tr></table></center>"
        echo "<br></body></html>"
        exit 0
        ;;
    "Mount points")
        echo "<center>Status of mount points<br><br>"
        echo "<table><tr><td nowrap><pre>"
        /bin/df -h
        echo "</pre></td></tr></table></center>"
        echo "<br></body></html>"
        exit 0
        ;;
    "Wakeup music storage server")
        echo "<center>Waking up music storage</center>"
        /usr/sbin/etherwake poner:aca:la:mac:de:la:placa:de:red:donde:esta:la:musica
        echo "<br></body></html>"
        exit 0
        ;;
    "Reset")
        echo "<center>Restarting Player...</center>"
        /sbin/reboot
        echo "<br></body></html>"
        exit 0
        ;;
    "Shutdown")
        echo "<center>Shutting down Player...</center>"
        /sbin/poweroff
        echo "<br></body></html>"
        exit 0
        ;;
    "Suspend")
        echo "<center>Suspending Player...</center>"
        /usr/sbin/pm-suspend&
        echo "<br></body></html>"
        exit 0
        ;;
    "Hibernate")
        echo "<center>Hibernating Player...</center>"
        /usr/sbin/pm-hibernate&
        echo "<br></body></html>"
        exit 0
        ;;
    *)
y la segunda es la que se encarga de dibujar los botones y enviar el comando al servidor para que este lo ejecute:
Bash:
<center><form method="POST" action="/cgi-bin/index.cgi"><br>
<center><h2>PolloX - NMP</h2></center>
<table>
<tr><td align="center"><h2><b>System commands</b></h2></td></tr>
<tr><td align="center"><input type=submit value="System" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Mount points" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Wakeup music storage server" name=OKBTN></td></tr>
<!-- <tr><td align="center"><input type=submit value="Mount music" name=OKBTN></td></tr> -->
<tr><td align="center"><input type=submit value="Shutdown" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Suspend" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Hibernate" name=OKBTN></td></tr>
<tr><td align="center"><input type=submit value="Reset" name=OKBTN></td></tr>
</table></form></center>
Entonces lo que hay que hacer es cambiar el nombre a uno de los botones (o agregar un boton nuevo, pero lo otro es más fácil), por ejemplo el de Reset, que quedaría:
Bash:
<tr><td align="center"><input type=submit value="Refrescar Base de Datos" name=OKBTN></td></tr>
Con eso, aparece un botón que dice "Refrescar Base de Datos"
Ahora tenemos que agregar la ejecución del comando que vos necesitás y para eso hay que modificar, en la primera parte, el bloque que correspondía al Reset, cambiándole el string de selección, el comando a ejecutar y el cartelito que escribe mientras trabaja. Antes era así:
Bash:
 "Reset")
        echo "<center>Restarting Player...</center>"
        /sbin/reboot
        echo "<br></body></html>"
        exit 0
        ;;
y ahora quedaría:
Bash:
 "Refrescar Base de Datos")
        echo "<center>Releyendo musica...</center>"
        /ruta/al/mopidy local scan 
        echo "<br></body></html>"
        exit 0
        ;;
Y con eso debería ser suficiente.
 
Gracias Doc, el comando en forma manual funciona correctamente, lo vengo usando así desde que armé la primera versión (ya dos años??), voy a implementarlo en estos dias y les cuento como me fué.

Muchas gracias y un abrazo!
 

Arriba