Voy a intentar describir de la manera más sencilla posible los pasos a seguir para poder obtener y gestionar información interna de nuestra Raspberry Pi como pueden ser: Uso/carga del procesador, temperatura de la CPU, temperatura de la GPU, memoria disponible, conexiones de red activas, dirección ip, y tiempo que lleva encendida de manera ininterrumpida (uptime).
Para que resulte más fácil y práctico voy a ilustrarlo con un ejemplo escrito en python:
Estos son los módulos a cargar y las funciones:
import commands import datetime import psutil import subprocess from datetime import timedelta def get_cpuload(): cpuload = psutil.cpu_percent(interval=1, percpu=False) return str(cpuload) def get_ram(): san = subprocess.check_output(['free','-m']) lines = san.split('\n') return ( int(lines[1].split()[1]), int(lines[2].split()[3]) ) def get_cpu_temp(): tempFile = open( "/sys/class/thermal/thermal_zone0/temp" ) cpu_temp = tempFile.read() tempFile.close() return float(cpu_temp)/1000 def get_gpu_temp(): gpu_temp = commands.getoutput( '/opt/vc/bin/vcgencmd measure_temp' ).replace('temp=','').replace('\'C','') return float(gpu_temp) def get_connections(): san = subprocess.check_output(['netstat','-tun']) return len([x for x in san.split() if x == 'ESTABLISHED']) def get_ipaddress(): arg='ip route list' ip=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE) data = ip.communicate() split_data = data[0].split() ipaddr = split_data[split_data.index('src')+1] return ipaddr
def get_uptime(): with open('/proc/uptime', 'r') as f: uptime_seconds = float(f.readline().split()[0]) uptime = (timedelta(seconds = uptime_seconds)) return str(uptime)
Y este sería el código que necesitaríamos para mostrar los datos en pantalla:
print 'Uso CPU ' + get_cpuload() + '%' print 'Mem. Libre ' + str(get_ram()[1])+ ' Mbytes' print 'Temp.CPU ' + str(get_cpu_temp()) print 'Temp.GPU ' + str(get_gpu_temp()) print 'Con.Red. ' + str(get_connections())+ ' Activas' print 'Direc.IP ' + str(get_ipaddress())+ ' ' print 'Uptime ' + get_uptime()
Vamos a llevarlo a la práctica, en primer lugar crearemos un fichero de script python que llamaremos control.py con:
sudo nano control.py
Una vez dentro del editor bastará con copiar/pegar el código respetando su orden, asegurándonos de guardar los cambios con CTRL + X , pulsando a continuación Y o S para confirmar la grabación.
Para ejecutarlo:
python control.py
El resultado será algo parecido a esto:
Uso CPU 0.0%
Mem. Libre 800 Mbytes
Temp.CPU 52.078
Temp.GPU 51.5
Con.Red. 4 Activas
Direc.IP 10.0.0.206
Uptime 2:13:39.910000
En mi caso he ido un poco más allá y me he enviado el resultado a mi teléfono móvil a través de Telegram:
Nota: El script os aseguró que está bien, si os aparece algún error al ejecutarlo la experiencia me dice que puede ser uno de estos dos:
- Uno en el que se haga referencia a un error en la sintaxis por haber utilizado algún carácter no ASCII.
- Otro relacionado con un error en el módulo psutil.
El primer error se suele deber a que en el proceso de copiar/pegar nuestro sistema ha copiado las comillas simples como acentos, lo que a la vista resulta difícil de detectar. Para resolverlo/asegurarnos bastará con entrar en el script y reescribir cada comilla simple (borrándola y escribiéndola desde nuestro teclado), guardando finalmente los cambios con Ctrl + X.
De producirse el segundo error, este se debe a que no tenemos instalado el módulo psutil, lo cual tiene fácil arreglo, bastando con ejecutar los siguientes comandos:
sudo apt-get install build-essential python-dev python-pip sudo pip install psutil
Espero que os sea útil, si necesitáis cualquier aclaración no dudéis en contactarme.