lunes, 12 de septiembre de 2016

Script para detectar modelos de Raspberry Pi dentro de rpimonitor

  Aunque es bastante útil el paquete RPi-Monitor para ver el estado de cada computador, si se tienen varios modelos del Raspberry Pi como es mi caso, empieza pasar que ya no se cuál es qué modelo. Para eso quería agregar en mi panel de control algún comando para identificar el modelo y poder diferenciarlos.



  Buscando en internet, encontré un script que podía identificar esto basado en los datos de /proc/cpuinfo, aunque le faltaban casos. Así que expandí el script según la referencia de los modelos del Raspberry que está en eLinux: Which Pi have I got - elinux.org.

Script para identificar el modelo RPi

  El script original de Greg Stephens, al cual contribuí con estos cambios, está en su repositorio github: pivers.sh - rgstephens/pisetup Github.

  Aquí copio el script, que permite identificar el modelo. Actualizado a modelos disponibles al Q4 2018.

#!/bin/bash
CPU=`cat /proc/cpuinfo | grep Serial | cut -d ':' -f 2 | sed -e "s/ //g"`
HW=`cat /proc/cpuinfo | grep Hardware | cut -d ':' -f 2 | sed -e "s/ //g"`
REV=`cat /proc/cpuinfo | grep Revision | cut -d ':' -f 2 | sed -e "s/ //g"`
#values from http://elinux.org/RPi_HardwareHistory
case ${REV} in
  a020d3)
    echo 'Pi 3 Model B+, 1024MB RAM'
    ;;
  9020e0)
    echo 'Pi 3 Model A+, 512MB RAM'
    ;;
  a02082|a22082|a32082)
    echo 'Pi 3 Model B, 1024MB RAM'
    ;;
  a01040|a01041|a21041|a22042)
    echo 'Pi 2 Model B, 1024MB RAM'
    ;;
  900092|900093|920093)
    echo 'Pi Zero, 512MB RAM'
    ;;
  9000c1)
    echo 'Pi Zero W, 512MB RAM'
    ;;
  0015|900021)
    echo 'Pi Model A+, 512MB RAM'
    ;;
  0012)
    echo 'Pi Model A+, 256MB RAM'
    ;;
  0010|0013|900032)
    echo 'Pi, Model B+, 512MB RAM'
    ;;
  0011|0014)
    echo 'Compute Module 1, 512MB RAM'
    ;;
  a020a0)
 echo 'Compute Module 3, 1024MB RAM'
 ;;
  0002|0004|0005|0006)
    echo 'Pi Model B, 256MB RAM'
    ;;
  000d|000e|000f)
    echo 'Pi Model B, 512MB RAM'
    ;;
  0003)
    echo 'Pi Model B (ECN0001), 256MB RAM'
    ;;
  Beta)
    echo 'Pi, Model B (Beta), 256MB RAM'
    ;;
  0007|0008|0009)
    echo 'Pi, Model A, 256MB RAM'
    ;;
  *)
    echo '${REV} (unknown)'
    ;;
esac

 

 Grabar el contenido en nuevo archivo pivers.sh

cd ~/
sudo nano pivers.sh

 Aquí hay que copiar el contenido del script dentro del archivo y grabar con CTRL + O y luego CTRL + X.

Para que funcione en forma fácil, hay que mover el archivo al directorio /bin/, con permisos de usuario root:

sudo mv pivers.sh /bin/pivers.sh

Configurar RPi-Monitor para mostrar el modelo

   Hay que editar el archivo que muestra la versión, agregando el comando para llamar al script. Por seguridad haremos también un respaldo del archivo original:
cd /etc/rpimonitor/template
sudo cp version.conf version-bak.conf
sudo nano version.conf

   Las líneas que edité son las marcadas en color:
########################################################################
# Extract System information
#  Page: 1
#  Information               Status     Statistics
#  - computer model          - yes      - no
#  - distribution name       - yes      - no
#  - kernel version          - yes      - no
#  - firmware version        - yes      - no
#  - processor model         - yes      - no
#  - num of pkg upgradable   - yes      - no
#  - list of pkg upgradable  - yes      - no
########################################################################
static.1.name=distribution
static.1.source=/etc/os-release
static.1.regexp=PRETTY_NAME.\"(.*)\"
static.1.postprocess=

static.2.name=kernel_version
static.2.source=uname -msr
static.2.regexp=(.*)
static.2.postprocess=

static.3.name=firmware
static.3.source=/proc/version
static.3.regexp=(#\d+)
static.3.postprocess=

static.4.name=processor
static.4.source=/proc/cpuinfo
static.4.regexp=(?:Processor|model name)\s+: (.*)
static.4.postprocess=

static.5.name=model
static.5.source=/bin/pivers
static.5.regexp=(.*)
static.5.postprocess=

dynamic.1.name=upgrade
dynamic.1.source=/var/lib/rpimonitor/updatestatus.txt
dynamic.1.regexp=(\d+ upgradable\(s\)|.* .*)
dynamic.1.postprocess=
dynamic.1.rrd=

dynamic.2.name=packages
dynamic.2.source=/var/lib/rpimonitor/updatestatus.txt
dynamic.2.regexp=^\s+(.*)\s+\d+ upgradable
dynamic.2.postprocess=
dynamic.2.rrd=

web.status.1.content.1.name=Version
web.status.1.content.1.icon=version.png
web.status.1.content.1.line.1='Model: <b>' + data.model + '</b>'
web.status.1.content.1.line.2='Processor: <b>' + data.processor + '</b>'
web.status.1.content.1.line.3='Distribution: <b>'+ data.distribution + '</b>'
web.status.1.content.1.line.4='Kernel version: <b>' + data.kernel_version + '</b>'
web.status.1.content.1.line.5='Firmware: <b>' + data.firmware + '</b>'
web.status.1.content.1.line.6='Package(s): <b>' + data.upgrade + '</b>' + ShowInfo('packages','Package(s) upgradable(s)',data.packages)

   Las líneas siguientes a la ultima marcada, solo tienen modificadas el número de línea sumándole 1 (donde decía 1 puse 2, donde decía 2 puse 3, y así).  Cuando termine los cambios, grabar con CTRL + X.

   Finalmente se debe reiniciar el servicio con el comando siguiente, y al visitar la página del RPi se debe ver la imagen mostrada al principio del post.

$ sudo service rpimonitor restart