Encendido apagado de disco duro externo con Raspberry Pi I
Una vez que la parte física está finalizada y probada con unos sencillos comandos, es el momento de hacer el uso del disco lo más sencillo posible.
El disco duro está conectado a un Raspberry Pi que tiene OpenElec instalado. OpenElec monta el sistema en “Read Only”, de manera que se hace complicada la modificación de la configuración. Para solucionar este contratiempo, utilizo otro Raspberry Pi, desde el cual le mandaré los comandos básicos ya explicados. Este Raspberry Pi (en adelante DomoPi) tiene instalado https://www.raspbian.org/.
En primer lugar voy a intentar gestionar el funcionamiento del sistema desde una pequeña web alojada en DomoPi. La idea es que desde la web se lance con un exec las ordenes a través de ssh. Para ello, es necesario mandar órdenes vía ssh y que no se solicite contraseña por parte del Raspberry Pi con OpenElec.
Para que no se pida la contraseña se deben realizar varios pasos:
- Generación de una llave RSA. Hay que tener en cuenta que el login se hace desde el usuario de nginx y por tanto este y los siguientes comandos tienen que lanzarse con esta identidad.
- Copiado de la llave pública en la máquina destino.
- A partir de este momento ya no se solicita contraseña.
# Generación de la llave rsa desde root pero haciéndose pasar por www-data. # Se almacena en una carpeta oculta .ssh root@domopi:/# su -c 'ssh-keygen -b 4096 -t rsa' www-data Generating public/private rsa key pair. Enter file in which to save the key (/var/www/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /var/www/.ssh/id_rsa. Your public key has been saved in /var/www/.ssh/id_rsa.pub. # La llave se ha generado en el home del usuario de nginx. root@domopi:/var/www/.ssh# ls id_rsa id_rsa.pub # Con su nos hacemos pasar por www-data y copiamos la clave. root@domopi:/var/www/.ssh# su - www-data $ ssh-copy-id root@openelec # Sólo falta comprobar que no pide contraseña. $ ssh root@openelec ############################################## # OpenELEC - The living room PC for everyone # # ...... visit http://www.openelec.tv ...... # ############################################## OpenELEC (official) Version: 5.0.8 OpenELEC:~ #
Ahora que ya se pueden ejecutar órdenes desde el segundo RPi, os describo la mini web de test y un también mini – script. La mini web podría ser algo así.
<html> <head></head> <body> <form action="" method="post">[GPIO 23] DISCO <input type="submit" name="encender23" value="Encender"> <input type="submit" name="apagar23" value="Apagar"> </form> </body> </html> <?php if ($_POST[encender23]) { $a = exec("ssh root@openelec '/storage/scripts/mng_gpios.sh 23 out 0'"); echo $a; } if ($_POST[apagar23]) { $a = exec("ssh root@openelec '/storage/scripts/mng_gpios.sh 23 out 1'"); echo $a; } ?>
Y el mini script.
# Parametros del script. # El GPIO a gestionar, El sentido [in,out] y el valor [0,1] GPIO=$1 DIRECTION=$2 VALUE=$3 PATH=/sys/class/gpio/ EXPORT=$PATH/export UNEXPORT=$PATH/unexport # Exportacion del gpio recibido echo $GPIO > $EXPORT # Establecimiento del sentido de la comunicacion echo $DIRECTION > $PATH'gpio'$GPIO'/direction' # Finalmente la fijacion del valor echo $VALUE > $PATH'gpio'$GPIO'/value'
El script está almacenado en /storage/ ya que en este volumen los cambios son persistentes.
Tanto la web como el scripts son únicamente Pruebas de concepto de lo que se puede hacer. La web podría ser más elaborada incluyendo un proceso de login. En cuanto al script faltan muchos controles como por ejemplo controlar si ya está exportado el gpio.