Mostrando entradas con la etiqueta Raspberry pi. Mostrar todas las entradas
Mostrando entradas con la etiqueta Raspberry pi. Mostrar todas las entradas

lunes, 21 de septiembre de 2015

Raspberry + Telegram

Este post, solo pretende ser unas simples notas sobre la instalación y uso del cliente de Telegram.
Aplicación de mandar avisos al teléfono…. las 1000 y una Frikadas…. que cada uno decida las suyas.

Instalación

apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make python2.7-dev libevent-dev libjansson-dev
cd /opt
git clone --recursive https://github.com/vysheng/tg.git && cd tg
./configure
make

En varios sites he visto que no usan el «recursive», sin esta tendremos cabeceras no resueltas, cuando intentes compilar.

Arrancar el cliente.

Tras esto podemos arrancar la app (Hace uso de algun path relativo por lo que debes entrar en «/opt/tg» aunque la invoque con el path absoluto):

/opt/tg/bin/telegram-cli -k tg-server.pub -W

Nota: La primera vez te dara un codigo que deberas introducir en la app de tu teléfono.
Puedes revisar la lista de comando con «help»

Comandos interesantes.

Un par de comando que he usado:

contact_list (Lista tus contactos.)

NOTA: Con el cliente arrancado puedes tabular para completar, lo cual te permite completar, por ejemplo, el nombre de un contacto y darte cuenta que si tienes espacios para la app son «_» de modo que:
contacto con espacio es contacto_con_espacio y no "contacto con espacio"

Mandar msg y ficheros de texto.

Para mandar msg, basta con teclear con el cliente arrancado…

msg Contacto "Texto a enviar"

Si queremos mandar el contenido de un fichero de texto.

send_text Contacto /ruta/fichero

Nota: Para mandar un msg a alguien por primera vez es necesario crear el chat antes:

chat_add_user Nobre_Chat Contacto

Tras esto podemos mandar el msg con el comando «msg»
Hasta aqui el uso del cliente pero y en un script como…..

Envio del contenido de un fichero de Texto.

Este script «/usr/loca/tg_text.sh» recibe dos argumentos, arranca el cliente y manda el msg (Fichero de texto).

#!/bin/bash
destination=$1;
text=$2;
(sleep 10;echo "send_text $destination $text"; sleep 5; echo "safe_quit") | /opt/tg/bin/telegram-cli -k tg-server.pub -W

Invocamos con: (Recordar…. dentro de «/opt/tg»)

/usr/local/tg_text.sh Usuario /usr/local/fich.txt

Envio de un msg.

Este script es idéntico al anterior pero cambiamos el comando send_text por msg.

#!/bin/bash
destination=$1;
message=$2;
(sleep 10;echo "msg $destination $message"; sleep 5; echo "safe_quit") | /opt/tg/bin/telegram-cli -k tg-server.pub -W

Invocamos con: (Recordar…. dentro de «/opt/tg»)

/usr/local/tg_msg.sh Usuario "Texto a enviar"

Aplicaciones…. lo dicho, muchas por ejemplo, parsear periódicamente webs de descargas y recibir las novedades en el móvil…..

Lo próximo una cámara un sensor de movimiento y….. el gato como actor principal xDDD

viernes, 29 de agosto de 2014

Temperatura – Raspberry

Siempre había tenido la «falsa» sensación de que la raspberry no debía calentarse mucho. Como siempre llaga la hora de despertar.
Tras varias tomas aleatorias ví que la temperatura era mas menos de unos 60ºC sin tener nada de carga de trabajo.
root@RASP1:~# /opt/vc/bin/vcgencmd measure_temp
temp=60.5'C
Así que para tener una opinión mas formada he decidido tomar un muestreo cada hora, durante una semana. Al final indicare como los he obtenido, aunque no tiene misterio.

Gráficas:
21 / 22 Agosto 2014



   
23 / 24 Agosto 2014


   
25 / 26 Agosto 2014


   
27 / 28 Agosto 2014


   
Se puede ver que la temperatura media es de unos 60ºC y que hay picos de las 10h a las 12h los cuales tienen su explicación… , ya que es el momento en que el sol incide sobre las raspberry por la ventana. Los días que recuerdo tapar la luz no existen estos picos.
Por otro lado he colocado un ventilador el cual puedo encender o parar con un interruptor.  Tras dejar un día completo el ventilador funcionando la caída de temperatura es muy alta…

29 / 30 Agosto 2014 ( Ventilador ON )


   
La caída es de unos 20ºC (33%) aproximadamente. Es así como debería estar siempre.
Con estas pruebas la opción mas evidente es dejar funcionando el ventilador pero tiene un problema…..
El «sonido» más bien «ruido«, es sumamente molesto…. Ahora estoy pensando en como aislar un poco la raspberry , para atenuar lo suficiente el ruido…. caja de cartón, corcho….. Ya iré probando.

Raspberry con Ventilador y disipadores.





Para tomar las medidas he usado los siguientes mini scripts, por llamarlos algo…

En el cron de root:

#Toma Datos Control Temperatura
00 * * * * /usr/local/scripts/control_temperatura/temperaturas.sh
15 00 * * * /usr/local/scripts/control_temperatura/genera_grafica.sh
30 00 * * * rm /usr/local/scripts/control_temperatura/datos_temp.txt

temperaturas.sh


#!/bin/bash
PATH_TRAB=/usr/local/scripts/control_temperatura
if [ ! -f $PATH_TRAB/datos_temp.txt ]; then
echo "#Hora Temperatura">>$PATH_TRAB/datos_temp.txt
fi
HORA=`date +%H`
TM=`/opt/vc/bin/vcgencmd measure_temp`
TEMPERATURA=`echo ${TM:5:-2}`
echo $HORA $TEMPERATURA>>$PATH_TRAB/datos_temp.txt

genera_grafica.sh


#!/bin/bash
PATH_TRAB=/usr/local/scripts/control_temperatura
NOMBRE=grafica_`date +%d_%m_%Y`.jpg
sed -i 's/00\ /24\ /g' $PATH_TRAB/datos_temp.txt
cat $PATH_TRAB/script_plot.sh |gnuplot > `echo $PATH_TRAB/$NOMBRE`

script_plot.sh


set terminal jpeg #Formato de salida
set title "Grafica Temperatura" #Titulo
set xlabel "HORA" #Etiqueta eje x
set ylabel "TEMPERATURA" #Etiqueta eje y
set yrange [0:100] #Rango eje y
#Dibujo de la gráfica (columnas 1 y 2) tipo de línea 4 y ancho de línea 3:
plot '/usr/local/scripts/control_temperatura/datos_temp.txt' using 1:2 with linespoints linetype 4 linewidth 3 title "Temp"

Cuando tenga la chapucilla para el ruido lo colgaré.

sábado, 19 de julio de 2014

Apagado disco USB – RaspBerry

Publicación original: 19.07.2014

Tengo una raspberry conectada 24/7, en la cual tengo conectado un disco usb que uso muy poco (motivo por el que nunca se me había planteado la necesidad de poder «apagarlo» automáticamente). Hasta ahora montaba y desmontaba el disco según necesidades.

Es posible que para un proyecto futuro, me interese tener el/los disco/s montados siempre y que el SO los apague según el tiempo de inactividad.
Un compañero me comento el uso y me he puesto a mirar HDPARM

Nota:

Simplemente a modo de recordatorio, buscando info sobre el tema he visto que podemos saber si ha existido actividad en el disco consultando el fichero:

/sys/block/sda/stat

Cuando se realizan operaciones sobre el disco el valor número cambia.

cat /sys/block/sda/stat | tr -dc "[:digit:]"

HDPARM

Con mi disco he tenido unos problemas, que detallare al final. Aunque el estado «unknown» que se ve a continuación, esta relacionado con mis problemas.

Ver el estado del disco:

root@RASP1:~# hdparm -C /dev/sda1
/dev/sda1:
drive state is: unknown
root@RASP1:~#

Si todo funciona correctamente el estado debe ser «active/idle, standby»….

Ver el tiempo tras el que pasaremos a inactividad «spin-down«

root@RASP1:~# hdparm -B /dev/sda
/dev/sda:
APM_level = 120

Este valor se debe entender del siguiente modo:
  • SI Permitimos el Spin-Down: Entre 1 y 127
  • NO Permitimos el Spin-Down: Entre 128 y 254
  • El valor de 255 : Desactiva la gestión de energía avanzada del disco duro.

Cuando permitimos el spin-down, el tiempo en segundos, se obtiene multiplicando por 5 el valor dado, así un valor de 120, serán 120*5 segundos….. 10 minutos

Estableciendo el valor:

Para esto editamos el fichero de configuración de hdparm:

/etc/hdparm.conf

Y al final añadimos: (Este punto no he conseguido que funcione con mi disco)

/dev/DISCO {
  spindown_time = Valor_deseado}
Tras esto es suficiente con dejar el demonio corriendo:

/etc/init.d/hdparm restart

NOTA: Problemas con mi disco

Las pruebas las estoy haciendo con un disco WD:


root@RASP1:~# hdparm -I /dev/sda
/dev/sda:
ATA device, with non-removable media
Model Number: WDC WD5000BEVT-11A03T0
Serial Number: WD-WX30A6957814
Firmware Revision: 01.01A01
...

En este disco no he podido definir el valor en el fichero de configuración, así como ver el estado del disco, ni forzar el «apagado» del disco


root@RASP1:~# hdparm -y /dev/sda
/dev/sda:
issuing standby command
HDIO_DRIVE_CMD(standby) failed: Invalid argument

Sin embargo el disco si para cuando establezco el valor via comando:

root@RASP1:~# hdparm -B 121 /dev/sda
/dev/sda:
setting Advanced Power Management level to 0x79 (121)
HDIO_DRIVE_CMD failed: Invalid argument
APM_level = 121
root@RASP1:~# hdparm -B /dev/sda
/dev/sda:
APM_level = 121
root@RASP1:~#
root@RASP1:~#
root@RASP1:~# hdparm -B 120 /dev/sda
/dev/sda:
setting Advanced Power Management level to 0x78 (120)
HDIO_DRIVE_CMD failed: Invalid argument
APM_level = 120
root@RASP1:~# hdparm -B /dev/sda
/dev/sda:
APM_level = 120

Este valor esta en uso hasta que el disco se desconecta de la corriente. Por lo que no es un problema para mi no poder, establecerlo de manera permanente.

lunes, 12 de mayo de 2014

Raspberry Pi. Interruptor apagado - Control GPIO

Este post intenta abordar la necesidad que me surgió, de poder hacer un apagado ordenado de la RaspBerry.

No era viable conectarme a la misma para realizar el apagado, ni tampoco apagar de power en cada ocasión ya que eran demasiadas y corría el riesgo de dejar el sistema inconsistente.

Una de las alternativas es la de conectar la Rasp al mundo, para lo que tenemos los puetos "general purpose input output" o GPIO.

De cara al montaje siguiente, hay que tener presente que, tenemos dos implementaciones de GPIO. REV1 y REV2. Debemos adaptarlo a la nuestra, ya que hay 3 diferencias en los nombres (marcados en azul)

Nota: En mi caso GPIO Rev.1 (Pin5 --> GPIO1)

El script hace básicamente lo siguiente....
Conectamos un interruptor al pin 5 (definido como de entrada y con valor 1) y al pin 6 (GND... con valor 0), cuando activamos~(cortorcicuitamos) el interruptor, el pin 5 de entrada recibe el 0 que tenemos en GND y cambia su valor a "0"comprobamos este valor y si es "0", lanzamos el shutdown o el script deseado.

El montaje queda así.... "cutre" pero completamente operativo.


El script es el siguiente:

Se puede descargar aquí

Nota2: Un poco de teoria...
Los puertos GPIO no son accesibles hasta que se han exportado al espacio de usuario. Hasta ese momento solo el Kernel puede acceder a ellos. Por lo que es necesario el export antes de poder definir la dirección IN/OUT o el valor.
Ejemplo.
root@RASP1:/sys/class/gpio# ls -als                                             ..                                                    
0 --w-------  1 root root 4096 may 12 01:23 export                             
0 lrwxrwxrwx  1 root root  0 may 12 01:23 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
0 --w-------  1 root root 4096 may 12 01:23 unexport
-----------------------------------
                                                    
root@RASP1:/sys/class/gpio# echo "5" > ./export
root@RASP1:/sys/class/gpio# ls -als
..
0 --w------- 1 root root 4096 may 12 01:24 export
0 lrwxrwxrwx  1 root root  0 may 12 01:24 gpio5 -> ../../devices/virtual/gpio/gpio5
0 lrwxrwxrwx  1 root root    0 may 12 01:23 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
0 --w-------  1 root root 4096 may 12 01:23 unexport
-----------------------------------                                                    
root@RASP1:/sys/class/gpio# echo "5" > ./unexport
root@RASP1:/sys/class/gpio# ls -als
..
0 --w-------  1 root root 4096 may 12 01:24 export
0 lrwxrwxrwx  1 root root    0 may 12 01:23 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
0 --w-------  1 root root 4096 may 12 01:24 unexport  

Con este montaje se hizo un centro de descargas, donde tras verificar la descarga vía transmission, se realiza un apagado ordenado se saca el pen, se "usa" la descarga.
Aunque lo verdaderamente interesante es la posibilidad de dotar a la RaspBerry de "interruptores" que realicen tareas.... Copias, checkeos, arrancar servicios...