Raspberry Pi: carga / uso del procesador, temperatura, memoria libre, dirección IP y uptime

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:

panelcontrol

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:

santi

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.

 

 

Esta entrada fue publicada en Raspberry Pi y etiquetada , , , , , , , , , , , , . Guarda el enlace permanente.

Deja un comentario