Autor Tema: [Ayuda] BASH para reiniciar la RasPi  (Leído 216 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado vixium

  • Newbie
  • *
  • Mensajes: 11
    • Ver Perfil
  • Estación: ESAND1100000011500E
[Ayuda] BASH para reiniciar la RasPi
« en: 12 de Noviembre del 2018, 12:50:15 pm »
Buenas tardes,

Tengo una PCE conectada a una RasPi y tengo un problema de desconexiones que se solucionan reiniciando todo. He conseguido que al reiniciar la RasPi se reinicie también la consola de la PCE, así que ya lo único que me queda para no perder los datos con estos cortes es automatizar el proceso.

Por ello, necesito ayuda para programar un bash en linux que se ejecute cada minuto (se mete en el crontab) y que éste compare el fichero realtime.txt que utiliza cumulusMX. Detallo más la teoría:

- Tengo un fichero realtime.txt que contiene la fecha, la hora y todos los valores registrados por la estación.
- Este fichero se sobreescribe con datos nuevos cada minuto.

La idea es guardar los datos de los 3 últimos ficheros (3 minutos) y comparar si la velocidad del viento, temperatura, humedad, etc son idénticos.

--> Si son idénticos: la estación ha perdido señal y el realtime solo está actualizando la hora, pero no los datos de sensores, porque se ha quedado con el último valor. Por lo tanto: reboot.
--> Si son diferentes: no hacer nada.

Ya digo, la teoría es facil, pero no tengo ni tiempo ni conocimiento para hacerlo. ¿alguien que controle me puede ayudar?¿a alguien se le ocurre otra solución?

Gracias!!

Desconectado jmviper

  • Moderador Global
  • Hero Member
  • *****
  • Mensajes: 1.785
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:[Ayuda] BASH para reiniciar la RasPi
« Respuesta #1 en: 12 de Noviembre del 2018, 21:02:12 pm »
Hola vixium

Sí se puede hacer... en programación prácticamente todo es posible... he creado el bash con lo poco que me sé (y googleando un rato  *+* *+*) y debo de decir que probándolo funciona...

El problema es que hay que restringir muuuucho los campos a leer del realtime.txt que genera Cumulus… explico... algunos campos aunque se pierda la señal del viento pueden ir siendo alterados (o tardar tiempo en serlo) por Cumulus como el Rain rate o la velocidad media del viento por lo que no serían exactamente "iguales".

El script es este:

Código: [Seleccionar]
#!/bin/bash

realtime='/etc/CumulusMX/realtime.txt'
check='/home/pi/cumuluscheck.txt'

cat $realtime | cut -d ' ' -f 3-5,7-8 >> $check
lineas=$(wc -l < $check)
lineas2=$(uniq $check | wc -l)
if [[ $lineas == 4 ]]
then sed -i '1d' $check
elif [[ $lineas -lt 3 ]]
then exit
fi
if [[ $lineas2 == 1 ]]
then rm $check
     reboot
fi

Te lo comento un poco.

al principio en realtime= y en check= aparecen las rutas (siempre éstas entre comillas) donde se encuentra el archivo realtime de Cumulus MX (depende de dónde lo hayas puesto) y del archivo que servirá para comparar líneas que se ubicará por defecto en /home/pi

Comparará sólo los campos de temperatura, humedad, punto de rocío y velocidad y dirección del viento. El peligro de esto es que si por ejemplo tu estación está 3 minutos con la misma temperatura, humedad y por ejemplo el viento está a 0 km/h que puede fácilmente darse en situaciones de inversión térmica en las que no hay casi variación el script haría que se reiniciase la raspi.

Yo, en vez de cada minuto pondría que cada 3 ó cada 5 minutos comparase los 3 registros (se puede variar el número de registros a comparar)

Si creas el archivo con nano hazlo con sudo delante para que sea propiedad de root y ponle permisos de ejecución con sudo chmod +x nombredelarchivo (que deberá terminar en extensión .sh)

Ponlo en el crontab de root (sudo crontab -e), por ejemplo */3 * * * * rutadelarchivobash ejecutaría el script cada 3 minutos por lo que si en esos 9 minutos esos valores son inguales en todas las líneas reiniciaría la Raspi.

Si tienes alguna duda o quieres saber algo por aquí estoy

saludos
« Última modificación: 13 de Noviembre del 2018, 13:14:03 pm por jmviper »


Archena, Valle de Ricote (Murcia). 120 msnm. 18.771 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado vixium

  • Newbie
  • *
  • Mensajes: 11
    • Ver Perfil
  • Estación: ESAND1100000011500E
Re:[Ayuda] BASH para reiniciar la RasPi
« Respuesta #2 en: 16 de Noviembre del 2018, 12:28:38 pm »
Acabo de verlo, estoy pendiente de probarlo en cuanto tenga un hueco libre (este finde pretendo ponerme un rato con este tema).

Muchísimas gracias!! os comentaré las novedades!

Un saludo

Desconectado vixium

  • Newbie
  • *
  • Mensajes: 11
    • Ver Perfil
  • Estación: ESAND1100000011500E
Re:[Ayuda] BASH para reiniciar la RasPi
« Respuesta #3 en: 16 de Noviembre del 2018, 18:02:59 pm »
Probado y funcionando.

He modificado algunas cosas, he metido más variables (6 en total: temperatura, humedad, punto de rocío, velocidad media, racha máxima y dirección de viento)

También he modificado el número de líneas a escribir en el fichero (de 3 a 5).

En resumen, se ejecuta cada 2 minutos y guardo las 5 últimas ejecuciones del script. Si todas son iguales (10 minutos con las mismas medidas de las 6 variables), reinicio.

Gracias a todos y en especial a jmviper!
Un saludo

Desconectado jmviper

  • Moderador Global
  • Hero Member
  • *****
  • Mensajes: 1.785
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:[Ayuda] BASH para reiniciar la RasPi
« Respuesta #4 en: 16 de Noviembre del 2018, 20:21:26 pm »
Ok puedes modificarlo a tu gusto.

La velocidad media del viento se quedaría al cabo de poco tiempo igual a la racha actual si ésta se quedase estancada.

En cuanto a ponerlo a 5 registros habrás tenido que modificar los condicionales del script de esta manera:

Código: [Seleccionar]
if [[ $lineas == 6 ]]
then sed -i '1d' $check
elif [[ $lineas -lt 5 ]]
then exit
fi
if [[ $lineas2 == 1 ]]
then rm $check
     reboot
fi

Que te funcione como se espera  ;)

saludos


Archena, Valle de Ricote (Murcia). 120 msnm. 18.771 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es