Rescatando mi viejo LCD para mejorar el servidor de render

Hace unas semanas que tuve la idea de recuperar mi LCD Crystalfontz de la caja en la que lo tenía guardado, para darle una nueva vida mostrando información útil en el frontal de mi nuevo servidor de render.

Aquí no he hablado de mi nuevo servidor de render, pero por poner en contexto, básicamente es una caja de PC expresamente configurada para renderizar de manera continua (y de paso, dejando libre el PC donde trabajo).

Siempre he sido muy aficcionado a este tipo de pantallas en un ordenador, como delatan los archivos de mi blog, así que esta ha sido una tarea que me ha entretenido bastante.

De la idea al montaje

Básicamente he usado la caja del PC que usaba antes de construir mi nuevo escritorio con el PC integrado, que además está totalmente aislada acústicamente, algo que agradezco porque al estar funcionando al 100% de manera permanente, está provista de varios ventiladores que producen cierto ruido.

El LCD lo colocaría en la puerta frontal que tiene la caja, así que el primer paso fue acudir a la ficha de mi LCD en la página de Crystalfontz, que por cierto, está muy bien documentada, porque desde ahi, pude bajarme un datasheet con todo lujo de especificaciones, incluyendo un esquema técnico con todas las medidas.

Solamente tuve que extraer el plano del PDF, e imprimirlo a escala sobre un folio adhesivo que me sobraba de un proyecto anterior (también habría servido un folio normal con pegamento).

Tras colocarlo sobre la puerta, usé mi pequeña máquina con un disco de corte. Realmente quedaría perfecto con una cortadora láser, pero la idea es no gastar dinero innecesario, y este invento no va a estar colocado en un museo, así que…

Al final el corte quedó como si lo hubiera hecho con un martillo y un cincel, porque el disco tendía a derretir el plástico, y era imposible hacer los cortes perpendiculares con esta herramienta, pero la estética no es lo que más me importaba en este caso.

Así van varias fotos con el LCD colocado:

Trasera del LCD montado
Caja con el hardware a la vista y el frontal separado
Trasera del LCD ya conectado
Caja completa funcionando con el LCD

 

Configurando el LCD en Linux

Aunque he escrito en este blog varios tutoriales sobre configuración de diferentes pantallas LCD, no viene mal un pequeño recordatorio general.

Han cambiado algunas cosas desde entonces. Una de ellas es que lcd4linux funciona desde el principio sin tener que compilar ni que hacer nada más allá de instalar su paquete, a pesar de que apenas se ha actualizado desde entonces.

En términos generales, una vez instalado, solamente hay que crear el archivo /etc/lcd4linux.conf y que tenga las siguientes secciones:

  • Display – Para configuración general del hardware del LCD. Esta es la única parte que varía según el tipo de LCD que usamos.
  • Widget – Una sección de este tipo por cada “función” que queramos tener
  • Layout – Donde “maquetamos” de qué manera queremos que aparezca la información a mostrar
  • Variables – Donde incluimos variables para el funcionamiento de nuestro LCD si fuera necesario
  • Display – Puesta en último lugar, declara qué LCD usar (si es que tenemos declarados varios con la sección Display).
  • Layout – Puesta en último lugar, declarará qué esquema usaremos para mostrar información (si es que tuviéramos declarados varios con la sección Layout).

Configuro el hardware del LCD

De modo que, en primer lugar, configuro mi LCD Crystalfontz CF634 de la siguiente manera:

Display CF634 {
Driver   'Crystalfontz'
Model    '634'
Port     '/dev/ttyUSB0'
Speed     19200
# Range from 0-255. Datasheet suggests 90 as 'about right'
Contrast  60
# 0 apagado, 1-99 variable y 100 a tope
Backlight 100
Size    '20x4'
Icons    8
}

Mostrando un título arbitrario

Después la primera información que aparece es un título arbitrario que muestra la palabra RENDER, y que defino con este widget:

Widget Titulo {
 class 'Text'
 width 12
 align 'L'
 prefix 'RENDER | '
}

Contador de fotogramas renderizados

A continuación, en la misma fila, muestro el número de fotogramas que llevo renderizados. Básicamente es un widget que usa el plugin exec, que muestra la salida de un comando que exista en el sistema. El widget es el siguiente:

Widget Frames {
 class 'Text'
 expression exec('ls -1 /home/usuario/carpeta | wc -l', 5000)
 width 11
 align 'R'
 prefix 'Frames: '
}

Y el comando que ejecuta (resaltado en negrita) básicamente lo que hace es contar cada 5 segundos el número de archivos que existen dentro de una carpeta.

Medidor de carga en el procesador

En el segundo renglón muestro un indicador que muestra en tiempo real la carga combinada de los núcleos del procesador, usando este widget:

Widget Busy {
 class 'Text'
 expression proc_stat::cpu('busy', 500)
 prefix 'Load: ' 
 postfix '%' 
 width 10 
 precision 0
 align 'R' 
 update tick 
}

Comprobando si Blender está en ejecución

A continuación uso de nuevo la función exec para ejecutar un script que comprueba si un determinado proceso está en ejecución o no, usando este widget:

Widget Checkblender {
 class 'Text'
 expression exec('checkb3d', 5000)
 width 9
 align 'R'
 prefix '| '
}

El script checkb3d lo coloqué en /usr/local/bin y le otorgué permisos de ejecución, y contiene lo siguiente:

#!/bin/bash

if pgrep "blender" > /dev/null
then
 echo "B3D ON"
else
 echo "B3D OFF"
fi

De esa forma, si “blender” está en la lista de procesos, muestra “B3D ON” y si no existe, muestra “B3D OFF”.

Es importante que el nombre del script no contenga la palabra blender, ya que de ser así, al ejecutarse, se detectaría a sí mismo, dando lugar a falsos positivos. Esta es la razón por la que lo he llamado checkb3d.

Mostrando la IP local

Ocupando todo el tercer renglón estoy mostrando la IP local. El mismo software lcd4linux dispone de un plugin para mostrar la IP, pero por alguna razón, al usarlo, provocaba que el procesador se pusiera al 100%, así que opté por volver a usar la función exec y un script alternativo que hiciera lo mismo, usando por un lado este widget:

Widget GetIP {
 class 'Text'
 expression exec('getip', 5000)
 width 20
 align 'R'
 prefix 'IP: '
}

El script getip, al igual que con el anterior, lo copio a /usr/local/bin y le doy permisos de ejecución. Como en Debian el comando ifconfig requiere privilegios de root, tuve que buscar un script que hiciera la misma función sin requerir accesos especiales, y lo encontré en esta página de un foro de Unix. El contenido sería el siguiente

#!/bin/bash
 netstat -n -t | awk '{print $4}' | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" |\
grep -v "127.0.0.1" | sort -u

Mostrando la fecha y la hora

Todo el renglón inferior está siendo usado para mostrar la hora y la fecha, que puedo mostrar fácilmente con este widget:

Widget FechaHora {
  class 'Text'
  expression strftime('%d %b %H:%M',time())
  width 12
  align 'R'
  update 1000
}

Finalizando

Básicamente eso es todo lo que he tenido que hacer para tener funcionando el LCD con las funciones que he considerado más prácticas para mi servidor de render.

  • El indicador de número de fotogramas me sirve para comprobar el progreso de renderizado de una secuencia, dado que casi todo lo que renderizo son animaciones
  • El indicador de carga en el procesador me sirve para averiguar si Blender está renderizando, o ya ha terminado de renderizar
  • El indicador de ejecución de Blender me sirve sobre todo para averiguar si se ha cerrado inesperadamente por algún error, cosa que no suele ocurrirme nunca, pero no deja de ser útil
  • El indicador de dirección IP me sirve en primer lugar para corroborar que el ordenador tiene conexión con la red local, y en segundo lugar, para corroborar si estoy conectando con la IP correcta cuando quiero acceder al servidor por SSH o web, por ejemplo.
  • El indicador de fecha y hora es un mero adorno mientras no pienso en darle una función más práctica a ese renglón.

Son funciones que considero especialmente útiles teniendo en cuenta que el servidor es una caja de PC que está funcionando todo el tiempo conectada a la red, pero sin monitor ni periféricos, de modo que puedo estar informado al instante de datos que de otra manera solo podría recabar conectando el PC a un innecesario monitor.

Por último, aquí dejo colgado mi archivo lcd4linux.conf completo, por a alguien le interesa usarlo de base o estudiarlo.

Dejar una respuesta:

Tu dirección de correo no será publicada

Pie del sitio