Graicas

Ahora se me ocurren varias aplicaciones chulas para utilizar la pantalllita. La más inmediata, un simple reloj que informe de la fecha y hora.
raphik, ¿te parece bien que publique aquí en este mismo hilo los scripts que se me vayan ocurriendo para darle utilidad a la pantallita?
Si no lo ves adecuado, lo borro; pero yo creo que estaría bien tenerlo aquí mismo, por si alguien más se anima y quiere utilizar estos scripts, además de, por supuesto, mejorarlos, optimizarlos, corregirlos, modificarlos.... al antojo de quien quiera = Software libre.
"RELOJ" que muestra fecha y hora y posible información cada minuto o cada hora:
#!/bin/sh
# Script que muestra la fecha completa y la hora en pantalla LCD 1604.
# Utiliza (requiere) el script lcd_write.sh de raphik.
# Sintaxis: fechayhora.sh
# Se recomienda dejarlo en ejecucion en segundo plano.
# Opcionalmente puede mostrar informacion extra cada minuto y cada hora.
# Empieza en modo demo, mostrando una prueba cada minuto y hora.
# Programado por Peperfus
VERSION=1.6;
RUTA_lcd_write=/root;
FIL=0;
COL=0;
COLANYO=0;
DIAMES=99;
DIASEM=99;
DIASEMANA=99;
MES=99;
MESELEG=99;
ANYO=99;
ANYOELEG=9999;
HORA=99;
MINUTOS=99;
SEGUNDOS=99;
limpiaFil()
{
# 16 caracteres blanco "1234567890123456"
$RUTA_lcd_write/lcd_write.sh $FIL 0 " ";
}
calculaHora()
{
HORA=$(date | cut -d : -f 1 | tail -c 3);
}
calculaMinutos()
{
MINUTOS=$(date -Iminute | cut -d : -f 2 | head -c 2);
}
calculaSegundos()
{
SEGUNDOS=$(date -Isecond | cut -d : -f 3 | head -c 2);
}
calculaDiaMes()
{
DIAMES=$(date -I | cut -d - -f 3);
}
calculaDiaSem()
{
calculaDiaSemana;
DIASEM=$(echo $DIASEMANA | head -c 3);
}
calculaDiaSemana()
{
DIAWEEK=$(date | head -c 3);
case "$DIAWEEK" in
Sun)
DIASEMANA="Domingo";
;;
Mon)
DIASEMANA="Lunes";
;;
Tue)
DIASEMANA="Martes";
;;
Wed)
DIASEMANA="Miercoles";
;;
Thu)
DIASEMANA="Jueves";
;;
Fri)
DIASEMANA="Viernes";
;;
Sat)
DIASEMANA="Sabado";
;;
esac
}
calculaMes()
{
MES=$(date -I | cut -d - -f 2);
}
calculaMesEleg()
{
# Para los meses demasiado largos COLANYO se desplaza a la derecha y se usa el anyo corto
COLANYO=12;
calculaMes;
case "$MES" in
01)
MESELEG="Enero";
;;
02)
MESELEG="Febrero";
;;
03)
MESELEG="Marzo";
;;
04)
MESELEG="Abril";
;;
05)
MESELEG="Mayo";
;;
06)
MESELEG="Junio";
;;
07)
MESELEG="Julio";
;;
08)
MESELEG="Agosto";
;;
09)
MESELEG="Septiembre";
COLANYO=14;
;;
10)
MESELEG="Octubre";
;;
11)
MESELEG="Noviembre";
COLANYO=14;
;;
12)
MESELEG="Diciembre";
COLANYO=14;
;;
esac
}
calculaAnyo()
{
calculaAnyoEleg;
ANYO=$(echo $ANYOELEG | tail -c 3);
}
calculaAnyoEleg()
{
ANYOELEG=$(date | tail -c 5);
}
muestraHoras()
{
calculaHora;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "$HORA";
}
muestraMinutos()
{
calculaMinutos;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "$MINUTOS";
}
muestraSegundos()
{
calculaSegundos;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "$SEGUNDOS";
}
muestraHoraCompelta()
{
muestraHoraCorta;
calculaSegundos;
$RUTA_lcd_write/lcd_write.sh $FIL $(($COL+5)) ":";
$RUTA_lcd_write/lcd_write.sh $FIL $(($COL+6)) "$SEGUNDOS";
}
muestraHoraCorta()
{
calculaHora;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "$HORA";
$RUTA_lcd_write/lcd_write.sh $FIL $(($COL+2)) ":";
calculaMinutos;
$RUTA_lcd_write/lcd_write.sh $FIL $(($COL+3)) "$MINUTOS";
}
muestraZonaHoraria()
{
$RUTA_lcd_write/lcd_write.sh 0 0 "Zona horaria:";
$RUTA_lcd_write/lcd_write.sh 1 0 "$(cat /etc/config/system | grep zonename | cut -d \' -f 2)";
}
muestraDiaSemana()
{
calculaDiaSemana;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "$DIASEMANA";
}
muestraDiaSem()
{
calculaDiaSem;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "$DIASEM";
}
muestraFechaCompleta()
{
muestraFechaCorta;
# ANYO
calculaAnyo;
$RUTA_lcd_write/lcd_write.sh $FIL $(($COL+5)) "/";
$RUTA_lcd_write/lcd_write.sh $FIL $(($COL+6)) "$ANYOELEG";
}
muestraFechaCorta()
{
$RUTA_lcd_write/lcd_write.sh $FIL $COL " ";
# DIA
calculaDiaMes;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "$DIAMES";
$RUTA_lcd_write/lcd_write.sh $FIL $(($COL+2)) "/";
# MES
calculaMes;
$RUTA_lcd_write/lcd_write.sh $FIL $(($COL+3)) "$MES";
}
muestraFechaElegante()
{
# DIA
calculaDiaMes;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "$DIAMES";
calculaMesEleg;
$RUTA_lcd_write/lcd_write.sh $FIL $(($COL+3)) "$MESELEG";
calculaAnyo;
# Si el mes es demasiado largo, se usa anyo corto
if [ $COLANYO -eq 14 ]; then ANYOELEG=$ANYO; fi
$RUTA_lcd_write/lcd_write.sh $FIL $COLANYO "$ANYOELEG";
}
refrescar()
{
# Actualiza toda la pantalla.
# Se suele invocar en la hora 00, cuando cambia el dia
# O bien, tras una informacion por minuto u hora.
$RUTA_lcd_write/lcd_write.sh init;
FIL=0;
COL=0;
muestraDiaSemana;
COL=11;
muestraHoraCorta;
FIL=1;
COL=0;
muestraFechaElegante;
}
infoXMinuto()
{
# Informacion extra para mostrar cada minuto
# DEBE limpiar lo que escribe
FIL=1;
COL=0;
limpiaFil;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "Ha pasado 1 min"
sleep 2;
limpiaFil;
muestraFechaElegante;
}
infoXHora()
{
# Informacion extra para mostrar cada hora
# DEBE limpiar lo que escribe
FIL=1;
COL=0;
limpiaFil;
$RUTA_lcd_write/lcd_write.sh $FIL $COL "Ha pasado 1hora"
sleep 5;
limpiaFil;
muestraFechaElegante;
}
presentacion()
{
# Mis 3 segundos de gloria xD
$RUTA_lcd_write/lcd_write.sh init;
$RUTA_lcd_write/lcd_write.sh 0 0 "SMART CLOCK v$VERSION";
$RUTA_lcd_write/lcd_write.sh 1 0 "Por Peperfus";
sleep 3;
}
muestraDatos()
{
$RUTA_lcd_write/lcd_write.sh init;
# IPS del router: 1234567890123456
$RUTA_lcd_write/lcd_write.sh 0 0 "Las IPS de mis "
$RUTA_lcd_write/lcd_write.sh 1 0 "interfaces son:"
sleep 1;
$RUTA_lcd_write/lcd_write.sh init;
FIL=0;
for IP in $(ifconfig | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1)
do
# echo $IP;
$RUTA_lcd_write/lcd_write.sh $FIL 0 $IP;
if [ $FIL -eq 0 ]; then FIL=1;
else FIL=0;
fi
sleep 1
done
sleep 2
# ZONA HORARIA
# Es para asegurarnos de que la ZH
# esta bien configurada y la hora
# visualizada es fiable;
muestraZonaHoraria;
sleep 2;
$RUTA_lcd_write/lcd_write.sh init;
$RUTA_lcd_write/lcd_write.sh 0 0 "Cliente NTP:";
NTP="Parado";
pidof ntpd > /dev/null;
if [ $? -eq 0 ]; then NTP="En marcha"; fi
$RUTA_lcd_write/lcd_write.sh 1 0 "$NTP";
sleep 2;
$RUTA_lcd_write/lcd_write.sh init
$RUTA_lcd_write/lcd_write.sh 0 0 "Conex. INTERNET:";
$RUTA_lcd_write/lcd_write.sh 1 0 "Intentando...";
sleep 1;
INTERNET=KO;
wget -qs http://google.com;
if [[ $? -eq 0 ]]; then INTERNET=OK; fi
$RUTA_lcd_write/lcd_write.sh 1 0 "$INTERNET ";
sleep 3;
if [ "$INTERNET" == "OK" ]; then
$RUTA_lcd_write/lcd_write.sh 0 0 "Sincronizando ";
$RUTA_lcd_write/lcd_write.sh 1 0 "con Internet ...";
# Sincronizar reloj de la pantalla con Internet.
calculaMinutos;
calculaHora;
# Si la hora es 0 es posible
# que no haya podido coger la hora de Internet.
# Asi que esperamos un tiempo hasta cogerla
# o agotar un timeour; A no ser... que se encienda
# el router a las 00 horas, que la hora seria
# correcta.
TIMEOUT=20;
while [ $HORA -eq 0 ] && [ $TIMEOUT -ge 0 ]; do
sleep 1;
calculaHora;
TIMEOUT=$((($TIMEOUT)-1));
#echo $TIMEOUT;
done
else #1234567890123456
$RUTA_lcd_write/lcd_write.sh 0 0 "Imposible sin- ";
$RUTA_lcd_write/lcd_write.sh 1 0 "cronizar reloj ";
sleep 2
$RUTA_lcd_write/lcd_write.sh 0 0 "con Internet ";
$RUTA_lcd_write/lcd_write.sh 1 0 "actualmente. ";
sleep 2
$RUTA_lcd_write/lcd_write.sh 0 0 "Se seguira in- ";
$RUTA_lcd_write/lcd_write.sh 1 0 "intentando. ";
sleep 2
$RUTA_lcd_write/lcd_write.sh 0 0 "AVISO: ";
$RUTA_lcd_write/lcd_write.sh 1 0 "La hora puede ";
sleep 2
$RUTA_lcd_write/lcd_write.sh 0 0 "ser incorrecta. ";
$RUTA_lcd_write/lcd_write.sh 1 0 "Se corregira en ";
sleep 2
$RUTA_lcd_write/lcd_write.sh 0 0 "cuanto sea ";
$RUTA_lcd_write/lcd_write.sh 1 0 "posible. ";
sleep 2
fi
}
############
## SCRIPT ##
############
$RUTA_lcd_write/lcd_write.sh init;
presentacion;
muestraDatos;
refrescar;
while [ true ]; do
while [ "$MINUTOS" != "00" ]; do
FIL=0;
COL=14;
sleep 60;
muestraMinutos;
# infoXMinuto;
done
FIL=0;
COL=11;
muestraHoras;
# infoXHora;
# Para que vuelva a entrar en bucle minutos
# actualizar pantalla una vez al dia:
if [ "$HORA" == "00" ]; then refrescar; sleep 1; fi
MINUTOS=-1;
done;
Queda así:
(El vídeo es de la versión anterior del script).
Lo he probado un rato; no sé si tiene algún error; pero parece que va bien.
Si alguien encuentra algún error, o sugerencia...
Próximas ideas:
Mostrar wasaps
Mostrar resultados de fútbol
...