Y le sigo dando vueltas al asunto.... la ventaja de "escribir" software jajajajaja!
Resulta que no puedo encender el NMP en forma remota por que no tengo ninguna placa de red de la que salga un conector para vincular a los contactos wake-on-LAN del motherboard, y como esto me tiene un poco envenenado me dispuse a hacer algo para, al menos, apagar el NMP en forma remota, ya sea desde el celu o desde una tablet (esta prohibido arrojarle ladrillos y esas cosas).
Como creo que alguna vez comenté, lo mas directo es instalar un servidor web y diseñar una interfaz HTML que me de acceso a un par de botones: uno para Apagar el NMP y el otro para Resetearlo (por si se fuera al diablo el MPD.... cosa que nunca sucede
).
El primer asunto fué buscar un servidor web que fuera pequeño y liviano en ejecución, para no gastar recursos del NMP en algo que se ejecuta esporádicamente y al fin del día. De casualidad, recordé un servidor muuuy bueno, rápido, seguro y simple que había desarrollado Jef Poskanzer de ACME Labs
allá por mediados de los 90s y que se llama
thttpd (por "Tiny HTTPD") y que pueden estudiar y descargar desde
ACÁ.
El programa se entrega en código fuente y hay que compilarlo con las clásicas
./configure y luego
make. La instalación es un poco enrredada, por que hay que escribir a mano los scripts de arranque y luego instalarlos en el sistema (esto suena complicado pero mejor vean el
man del comando
update-rc.d que hace casi todo por nosotros) y también hay que copiar a mano los archivos en su lugar... pero dado que son solo tres archivos, no es que vayamos a trabajar mucho. De todas formas, las instrucciones y archivos de ejemplo estan especificados en la web de
thttpd así que si leen, no hay como escaparle... y si nó, pregunten
. La foto "muestra" a el thttpd ejecutándose en el sistema:
Con el servidor funcionando y apuntado al directorio /usr/local/www/data solo queda por hacer una página web para apagar o reiniciar el NMP, y para esto recurrí al desarrollo de la interfaz del Brazil Firewall and Router (BrazilFW) que es el gateway que uso en casa y para cuyo proyecto open-source alguna vez participé como traductor de la interfaz web (hace como 10 años de esto
).
Cuando comencé el análisis me encontré que ellos también usan el thttpd como servidor web de la interfaz, si bien tiene una compilación un poco mas "personalizada" y está compilado junto al BusyBox que usa BFW, así que hice bien en compilar por mi cuenta.
De este proyecto tomé prestada la página web de inicio que acá les copio y que usé tal cual estaba:
Código:
<html>
<head>
<meta http-equiv="Expires" content="Thu, 01 Jan 1970 00:00:00 GMT" />
<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="Pragma" content="no-cache" />
<script language="JavaScript">
window.location="/cgi-bin/";
</script>
<!--
Bug Microsoft Internet Explorer.
Para que o Internet Explorer possa aceitar o erro customizado,
e necessario que o arquivo de erro contenha mais de 512 Bytes.
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#######
--!>
</html>
Luego usé un script de BFW que se llama reboot.cgi y que tuve que adaptar y renombrar a index.cgi para el uso que voy a darle. Quedó como a continuación les muestro:
Código:
#!/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
<html><head><title>PolloX - NMP</title><body>"
case "$FORM_OKBTN" in
"Reset")
echo "<center>Restarting Player...</center><br></body></html>"
/sbin/reboot
exit 0
;;
"Shutdown")
echo "<center>Shutting down Player...</center><br></body></html>"
/sbin/poweroff
exit 0
;;
*)
cat << CLEOF
<center><form method="POST" action="/cgi-bin/index.cgi"><br>
<table border=0>
<tr><th><h2>PolloX - NMP</h2></th></tr>
<tr><td align=center><h2><b>Attention</b></h2></td></tr>
<tr><td align=center><input type=submit value="Shutdown" name=OKBTN><br><input type=submit value="Reset" name=OKBTN></td></tr>
</table></form></center>
CLEOF
;;
esac
echo "<br></body></html>"
que claramente es un script de consola que se ejecuta como un CGI del servidor web. La parte del final es la primera que se ejecuta, y al presionar un boton, la próxima vez se ejecuta el bloque de "Reset" o "Shutdown" según el boton presionado (el que sepa HTML lo va a entender fácilmente).
El unico problema que tuve fué conseguir y compilar el programa
proccgi que analiza lo que envía el cliente y obtiene las partes del formulario bajo un nombre conocido, pero se puede descargar desde
ACA.
Bueno... lo que se vé desde el navegador es lo siguiente:
Y lo que queda cuando presionamos el boton de shutdown...
y la ventana de la consola remota confirmando el apagado del player...
Bien... hasta acá llegamos por hoy... solo queda hacer que la página se vea bien en el celular, por que todo aparece chiquitísimo!!!!!!.. o buscar algún componente para Android que sea capaz de enviar un pedido POST de HTTP.
Edito:
Y bueno... encontré una aplicación Android gratuita que se llama HTTP Requester y que pueden descargar desde
ACA. Permite enviar peticiones GET y POST, y esta última es la que necesitamos. La app solo pesa 58K
y la configuración fué muy simple:
- Ingresar la URL http://vaca-linux/cgi-bin/index.cgi
- Elegir como formato del envío a text/plain
- Ingresar como contenido a OKBTN=Shutdown
- Hacer click en POST
.... y el player apagado de primera intención!!!!
La aplicación guarda el comando ejecutado para repetirlo luego cuando sea necesario
, así que ya tengo como apagarlo en el futuro... pero no se si podré crear un acceso directo a ese comando para ejecutarlo con un click. Si lo logro, les aviso